4.1 Среда dotNet (.NetFramewok)

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

Приложения (программы) можно разрабатывать на разных языках программирования, которые поддерживают эту технологию.

.NET Framework обеспечивает:

  • совместное использование разных языков программирования;
  • безопасность и переносимость программ;
  • общую модель программирования на базе платформы Windows.

С точки зрения программирования, .NET Framework состоит из двух основных составляющих:
  • общеязыковая исполнительная среда CLR (Common Language Runtime);
  • библиотека базовых классов.
Принцип действия общеязыковой среды выполнения CLR (Common Language Runtime)
Общеязыковая среда CLR решает задачи автоматического выявления типов .NET, загрузки этих типов и управление ними. Среда CLR осуществляет управление памятью, обслуживание приложения, обработку потоков и реализует многочисленные проверки связанные с безопасностью.

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

Общеязыковая среда выполнения CLR управляет выполнением кода .NET.

После компиляции программы на C# (или другом языке) создается файл, который содержит особого рода псевдокод или байт-код (а не исполнительный файл, как было раньше). Этот псевдокод называется Microsoft Intermediate Language (MSIL) или Common Intermediate Language (CIL). Этот псевдокод есть промежуточным языком Microsoft.

Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.

Любая программа, которая скомпилирована в псевдокод MSIL, может быть выполнена в любой среде, которая содержит реализацию CLR. Это обеспечивает переносность программ в среде .NET Framework.

Процесс преобразования исходного кода в код на языке MSIL (CIL или IL) и создание файла сборки (*.dll или *.exe):

После этого, псевдокод превращается в исполняемый код. Это осуществляет JIT -компилятор. JIT (Just-in-time) -компиляция – это компиляция на «лету».

Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).

Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле (*.dll или *.exe) с помощью считывания метаданных этого файла.

После этого CLR размещает в памяти считанный из сборки тип.

Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.

Последним происходит выполнение запрашиваемого программного кода.

Промежуточный язык MSIL (Microsoft Intermediate Language) или CIL (Common Intermediate Language)
Сперва промежуточный язык псевдокода назывался Microsoft Intermediate Language (MSIL). Позднее (в последних версиях .NET) это название было изменено на Common Intermediate Language (CIL — общий промежуточный язык). Аббревиатуры MSIL, CIL и IL (Intermediate Language)означают одно и то же.

Промежуточный язык CIL (или MSIL) формируется после компиляции программы на некотором языке программирования, который поддерживает платформу .NET Framework.

MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:
  • могут переноситься на разные платформы;
  • не зависят от конкретного процессора.
Фактически, MSIL – это язык переносного ассемблера.

Схема взаимодействия между исходным кодом, компилятором .NET и механизмом выполнения .NET
Программист создает исходный код приложения на языке, который поддерживает технологию .NET (языке C#, C++/CLI, Visual Basic .NET и т.д.). Приложение создается в некоторой среде программирования, например Microsoft Visual Studio. Компилятор формирует сборку – файл, который содержит CIL-инструкции, метаданные и манифест.

После запуска на выполнение этого приложения на некотором компьютере (некоторой платформе), в работу запускается механизм выполнения .NET. Предварительно, на компьютере должна быть установлена одна из версий (как минимум) .NET Framework.

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

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

Связь между исходным кодом, компилятором и механизмом выполнения .NET: