На чем написан net framework

Обновлено: 06.07.2024

Особенно часто возникают проблемы интеграции с унаследованным кодом ( legacy ). При решении задач интеграции возникают проблемы несовместимости.

Проблемы переносимости

Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS).

Проблемы версий

Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать.

Управление ресурсами

Одной из проблем программирования является управление и корректное освобождение ресурсов, файлов, памяти, пространства экрана, сетевых соединений, ресурсов баз данных и т. д. Некорректное управление этими ресурсами может привести к некорректному выполнению программы.

Безопасность типов

Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В.

Обработка сбоев

При разработке Windows-приложений с использованием Win32 API некоторые функции возвращают исключения, другие — коды состояний, третьи — HRESULT . Таким образом, отсутствует согласованный механизм обработки сбоев и есть возможность игнорировать некоторые исключения, что делает код небезопасным.

Один из способов решения проблемы неоднородности — разработка и поддержка стандартных программных интерфейсов, облегчающих задачу переноса приложений на серверы различных платформ. Однако приложения могут использовать базы данных , коммуникационные и другие сервисы, интерфейсы которых не являются компонентами языка или среды программирования. Другой способ, применяемый производителями для решения проблемы неоднородности, — поддержка стандартных протоколов. Системы, поддерживающие один и тот же протокол, могут взаимодействовать друг с другом, даже если они опираются на различные машинные архитектуры и операционные системы.

. NET Framework — инфраструктура разработки приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов . NET Framework Class Library .

Общеязыковая исполняющая среда (Common Language Runtime)

Common Language Runtime (CLR) — общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить разрешение со стороны CLR.

Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.

Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.

Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом.

Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее — это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти.

Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки — домены приложений ( application domain ). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.

В . NET включены сборки библиотеки классов . NET Framework Class library ( FCL ), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object , из которого в конечном счете порождаются все остальные типы.

Таким образом, всякая сущность в . NET является объектом со своими полями и методами.

Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения.

Для изменения существующего FCL -типа можно создать свой собственный производный тип . Можно создавать свои собственные пространства имен. Все это будет четко соответствовать принципам, предлагаемым платформой . NET

Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов.

Все управляемые приложения используют библиотеку классов FCL . Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.

Итоги

Инфраструктура . NET Framework поддерживает разработку и исполнение различных приложений. . NET Framework ставит своей целью решение следующих задач:

  • предоставление объектно-ориентированной среды программирования;
  • предоставление среды исполнения, решающей проблемы конфликта версий;
  • предоставление среды безопасного исполнения кода (безопасность типов и другие особенности управляемого кода);
  • предоставление среды исполнения, улучшающей производительность за счет управления памятью и кэширования результатов компиляции;
  • улучшение интеграции и переносимости приложений за счет использования общего промежуточного языка и библиотеки типов.

. NET Framework состоит из двух основных компонент : общеязыковой исполняющей среды ( CLR ) и библиотеки классов . NET Framework.

если исключить тех, кто на зарплате, т.е. инженеров Microsoft/Mono/Xamarin, их очень немного.


Как только список был готов, я залез в Википедию (см. список источников). В результате получилась следующая хронологическая последовательность:


Timeline maker
(Для интерактивной версии пройдите по ссылке)

Если я пропустил какие-то среды выполнения, дайте знать.

Чтобы облегчить восприятие хронологии, я поместил каждую среду в одну из следующих категорий:

Оставшаяся часть поста посвящена детальному описанию разных сред выполнения. Почему они появились, что они могут и зачем их сравнивать.

Другие среды выполнения Microsoft

Silverlight

Несмотря на то что платформа находится в режиме поддержки (или вообще умерла/движется к закату в зависимости от вашей точки зрения), интересно вернуться к первоначальному анонсу и посмотреть, для чего предназначалась Silverlight:

В 2007 г. в Silverlight 1.0 были реализованы следующие возможности (платформа даже работала на Linux):

  • поддержка встроенных кодеков для проигрывания видеофайлов VC-1 и WMV, а также аудиофайлов в форматах MP3 и WMA в браузере. ;
  • Silverlight поддерживает возможность постепенного скачивания и проигрывания медиаконтента с любого веб-сервера…;
  • Silverlight также опционально поддерживает встроенную потоковую передачу медиафайлов…;
  • с помощью Silverlight вы можете создавать многофункциональные пользовательские интерфейсы и анимацию, соединять векторную графику и HTML для создания привлекательного контента. ;
  • Silverlight облегчает создание насыщенного интерактивного видеоконтента.

Также, как подсказали в комментах, Silverlight был и на Symbian S60

Среды выполнения Mono/Xamarin

Для меня неважно, кто был первым, потому что я считаю Mono средством достижения цели: технологией, которая поможет Linux закрепиться на настольных компьютерах.

В этом же посте описано, как всё началось:

Проекты сообществ

Исследовательские проекты

Shared Source Common Language Infrastructure (SSCLI) (или Rotor)

Midori

Midori – кодовое имя операционной системы с управляемым кодом, которая разрабатывалась Microsoft совместно с Microsoft Research. Сообщалось, что она может стать коммерческой реализацией операционной системы Singularity, исследовательского проекта, начатого в 2003 г. для создания высоконадёжной операционной системы, в которой ядро, драйвера устройств и приложения состоят из управляемого кода. Она проектировалась для параллельных вычислений и могла запускать программу, распределённую по нескольким узлам одновременно. В ней так же была реализована модель безопасности на основе запуска приложений в изолированной среде. Microsoft предложила несколько возможных путей миграции с Windows на Midori. Работа над операционной системой была прекращена в 2015 году, хотя многие реализованные в ней идеи попали в другие проекты Microsoft.

Singularity (операционная система) (также Singularity RDK)

Singularity – экспериментальная операционная система, которая разрабатывалась Microsoft Research между 2003 и 2010 гг. Предполагалось, что это будет высоконадёжная операционная система, в которой ядро, драйвера устройств и приложения состоят из управляемого кода. Средства внутренней безопасности используют безопасность типов вместо аппаратной защиты памяти.

Redhawk

И последняя, но не менее важная среда – Redhawk:
кодовое название для экспериментальной, минимальной версии среды выполнения с управляемым кодом, которая превратилась в CoreRT.

Ссылки на источники

Ниже приведены статьи Википедии, которые я использовал для создания хронологической шкалы:

Нашлись ещё варианты

Net60

В комментариях bmforce подсказал, что была ещё одна платформа, Net60. Информации о ней не так много, но удалось найти упоминание на форуме + статья на CodeGuru:

Moonlight

Не упоминается Moonlight, который основан на Mono — Opensource версию Silverlight:

Moonlight — это open source реализация Silverlight, сделанная в основном для Linux и других Unix/X11 операционных систем. Последний релиз Moonlight (Moonlight 4 Preview 1) предоставляет поддержку основного набора возможностей Silverlight 3, плюс совместимость с Silverlight 4.

Blazor

PageFX

Всё о .NET Framework

Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!

Для чего нужна платформа

  • приложение нужно создать для разных платформ ОС,
  • необходимо разработать масштабируемый продукт с высокой производительностью,
  • для разработки требуется платформа с открытым исходным кодом.

Система Windows 8 и 8.1 работает с версией 4.5.1, а Windows 10 требуется версию поновее — 4.6, 4.6.1 или 4.6.2

На момент написания этой статьи наиболее актуальная версия — 4.8. Устанавливают её через автономный или веб-установщик.

  • Веб-установщик весит около 2 МБ, и загружает все компоненты онлайн, поэтому нужно стабильное соединение с интернетом.
  • Автономный установщик весит около 60 МБ, зато все компоненты можно установить даже без интернета. Многие разработчики выбирают именно автономный установщик, потому что он всегда под рукой.

Оба установщика имеют одинаковые версии и процесс установки по ним несложный, надо просто следовать инструкциям системы.

Как устранить неполадки при установке

Проверьте версию Windows

Если вы хотите использовать версию, которую не поддерживает ваша система, вам придётся обновить систему до Windows 8.1 или Windows 10.

Перезагрузите компьютер

Запустите инструмент восстановления .NET Framework

Соберите журналы установки

Так должен выглядеть запущенный файл Collect.exe

Так должен выглядеть запущенный файл Collect.exe

Коротко о главном

.NET Framework

Разработка на C была малоприятным занятием по причине «перегруженности» языка, к тому же C не особо подходил для построения сложных конструкций. Процесс создания приложений несколько упростился с появлением ООП и понятия классов. При этом многие методы, используемые в Win 32 API стали объединяться в классы, в свою очередь стали создаваться новые классы и объединяться в библиотеки.

С одной стороны ООП и C++ упростило разработку приложений, с другой программистам всё чаще приходилось сталкиваться с проблемами совместимости. По идее, полученный в результате компиляции кода C++ EXE-файл можно было запустить на любой ОС, но оказалось, что не всё так просто. Дело в том, что в то время стало появляться много разных типов процессоров и операционных систем, и разработчикам приходилось всё это учитывать.

Не было никакой гарантии, что программа, написанная на компьютере с одной версией Windows и определённой маркой процессора, сможет корректно работать на другом ПК с другой версий ОС и другим процессором. Вторая проблема заключалась в самих поставляемых с Windows динамических библиотеках DLL. Большая часть этих библиотек опять же была ориентирована на поддержку приложений, разработанных на языке C, поэтому программистам приходилось подключать внешние библиотеки, что было связано с множеством неудобств.

Но, пожалуй, самым большим камнем преткновения был так называемый неуправляемый код, не позволяющий разграничивать права для приложений на C. Попытку найти решение предприняла компания Sun, создав виртуальную машину Java, которая управляла приложениями, правда, написанными только на Java. Виртуальная Java-машина служила своего рода прослойкой между приложениями, операционной системой и железом, беря на себя задачу по адаптации программного обеспечения.

Common Language Runtime — основной компонент, ядро платформы NET Framework, отвечающее за компиляцию, запуск и управление приложениями.

Набор различных утилит, представленных компиляторами, дизассемблерами, генераторами сертификатов и т.д. Библиотеки, среди которых наибольшее значение имеют:

Читайте также: