Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_programmirovaniyu_3_semestr.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
2.11 Mб
Скачать

Главные компоненты платформы .Net (clr, cts и cls)

Ранее, при использовании языков, таких как Visual Basic или C++, исходный код, написанный на одном из языков, преобразовывался специализированным компилятором в выполняемый код. Каждый язык функционировал в своей собственной среде поддержки (runtime), обеспечивающей работу сгенерированного выполняемого кода. При этом необходимым для каждого языка являлось наличие собственного компилятора, а также собственных средств поддержки времени выполнения (runtime).

В среде .NET, однако, компилятор соответствующего языка преобразует исходный текст программы в промежуточный формат, именуемый "промежуточным языком" {"Intermediate Language", часто пользуются аббревиатурой IL, CIL или MSIL). Этот "язык" заменяет "выполняемый код" который традиционно генерировали компиляторы.

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

CLR – это общая языковая среда поддержки времени выполнения, которая заменяет runtime-средства, зависящие от конкретного языка. Она берёт на себя обязанности по выполнению программы, представленной на промежуточном языке IL. С точки зрения программиста .NET можно рассматривать как новую среду выполнения программ и всеобъемлющую библиотеку базовых классов. Главная ее задача заключается в размещении, загрузке и управлении .NET-типами по заданному указанию. Кроме того, CLR отвечает за ряд низкоуровневых операций, таких, как управление памятью и проверка безопасности.

Таким образом, в результате компиляции исходного текста программы (например на языке С++) получается переносимый выполняемый РЕ (Portable Executable) файл, который представляет ту же самую программу, но написанную уже на промежуточном языке IL. Когда этот переносимый файл (РЕ-файл) выполняется, то CLR компилирует ее содержимое в машинный код уже непосредственно перед выполнением. Этот процесс называется компиляцией "Just In Time" или JIT-компиляцией. Здесь следует заметить, что часть исходного текста программы, написанного на языке, поддерживаемом .NET, компилируется дважды. Первая компиляция медленнее, чем вторая, так как IL, сгенерированный после первой компиляции, весьма близок к машинному коду.

Зачем же компилировать исходные тексты программ на промежуточный язык CIL, а не прямо в набор команд операционной системы (машинный код)? Дело в том, что такой подход позволяет "перевести" программы, разработанные на разных языках, на некий единый и общий для всех платформ язык. Это позволяет легко организовать взаимодействие между программами, написанными на разных языках программирования. Причем сделать это на уровне двоичных кодов. Кроме того, значительная часть платформы .NET реализована на множестве операционных систем, отличных от Windows, что позволяет легко организовать взаимодействие между программами, написанными не только на разных языках, но и функционирующих в среде разных операционных систем. Но поскольку компоновочные блоки содержат инструкции на языке IL, а не инструкции для конкретной платформы, то программные коды на языке IL перед их использованием приходится в фоновом режиме компилировать JIТ-компилятором.

В настоящее время CLR реализована для платформы Windows. Это означает, что машинный код, генерируемый CLR, может выполняться только на платформе Windows. Тем не менее, предпринимаются попытки сделать CLR доступным для каждой из альтернативных Windows платформ.

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

Основной механизм CLR размещается в библиотеке, известной под названием общего объектного модуля механизма выполнения (mscoree.dll). Когда ссылаются на какой-либо компоновочный блок для его последующего использования, то в результате автоматически загружается mscoree.dll, который, в свою очередь, загружает в память этот компоновочный блок. Механизм выполнения отвечает за выполнение следующих задач. Прежде всего – за выяснение места расположения компоновочного блока и нахождение запрашиваемого типа в его бинарном объекте с помощью чтения содержащихся там метаданных. Затем среда выполнения CLR размещает экземпляр типа в памяти, преобразует CIL- код в соответствующие платформе инструкции, выполняет все необходимые проверки безопасности, а затем выполняет полученный программный код.

Кроме загрузки компоновочных блоков и создания экземпляров пользовательских типов, CLR может взаимодействовать с типами, содержащимися в библиотеках базовых классов .NET. Вся библиотека базовых классов разбита на целый ряд отдельных компоновочных блоков, но mscorlib.dll в ней является "ключевым" компоновочным блоком. Файл mscorlib.dll содержит множество базовых типов, которые объединяют в себе решения широкого спектра общих задач программирования, а также базовые типы данных, используемые всеми языками .NET. При построении .NET-приложений автоматически предоставляется доступ к этому специальному компоновочному блоку.

На рис.1.1 показана система связей, возникающих между исходным текстом программы на любом из языков, поддерживающим технологию .NET, .NET-компилятором и механизмом выполнения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]