Среда выполнения
предоставляет необходимые службы во
время выполнения приложении.
Традиционно каждой среде
программирования соответствует своя
среда выполнения. В качестве примера
среды выполнения могут служить
стандартная библиотека языка С.
библиотека базовых классов Microsoft (MFC),
среда выполнения языка Visual Basic, а также
виртуальная машина Java (Java Virtual Machine).
Среда выполнения платформы .NET получила
название общеязыковой среды выполнения
CLR (Common Language Runtime).
Управляемый код и данные
Общеязыковая среда выполнения
CLR (Common Language Runtime) предостаатяет в
распоряжение .NET-кода ряд служб (включая
и библиотеку классов .NET Framework, которая
размещается на верхнем слое CLR). Для того
чтобы воспользоваться этими службами,
.NET-код должен иметь предсказуемое
поведение и. к тому же, быть понятным
общеязыковой среде выполнения CLR.
Например, для того чтобы среда
выполнения могла осуществить проверку
границ массивов, все массивы в .NET имеют
идентичный формат. Требования типовой
безопасности могут налагать на .NET-код и
другие ограничения.
Ограничения, которые
накладываются на .NET-код, определяются
общей системой типов (Common Type System, CTS), а
также ее реатизацией в промежуточном
языке IL, разработанном корпорацией Microsoft
(Microsoft Intermediate Language— MSIL, или просто IL).
Общей системой типов определены типы и
операции, которые могут использоваться
кодом, работающим в общеязыковой среде
выполнения CLR. Так, именно общей системой
типов (Common Type System, CTS) на используемые
типы накладывается ограничение
единичного наследования реализации. Код
на промежуточном языке, разработанном
корпорацией Microsoft (Microsoft Intermediate Language, MSIL),
компилируется во внутренний (собственный)
код платформы.
.NET-приложения содержат в себе
метаданные, т.е. описание кода и данных,
используемых приложением. Благодаря
использованию метаданных возможно
автоматическое преобразование данных в
последовательную форму общеязыковой
средой выполнения CLR при их сохранении.
Код, который может
использовать службы, предоставляемые
общеязыковой средой выполнения CLR,
называется управляемым кодом.
Память для управляемых данных
распределяется и освобождается
автоматически. Такое автоматическое
освобождение занимаемой памяти
называется сборкой мусора (garbage collection).
Сборка мусора решает все проблемы
утечки памяти и им подобные.
Microsoft и Европейская Ассоциация производителей ЭВМ
[European Computer Manufacturers' Association (ЕСМА)
имеет также другие названия Европейская
Ассоциация производителей компьютеров (ЕАПК)
и Европейская ассоциация изготовителей
ЭВМ Европейская Ассоциация
производители ЭВМ разрабатывает
стандарты, соблюдаемые большинством
фирм, выпускающих ЭВМ и программное
обеспечение —Прим ред]
Корпорация Microsoft передала с целью
стандартизации спецификацию языка С# и
основные части библиотеки классов .NET
Framework на рассмотрение Европейской
Ассоциации производителей компьютеров (European
Computer Manufacturers' Association — ЕСМА).
Техническими требованиями этой
независимой международной организации
по стандартам определена независимая от
платформы инфраструктура
универсального языка CLI (Common Language
Infrastructure). Общеязыковую среду выполнения
CLR можно представить себе как
инфраструктуру универсального языка CLI (Common
Language Infrastructure), дополненную библиотеками
базовых классов BCL (Basic Class Libraries).
Библиотека базовых классов BCL (Basic Class
Library) поддерживает фундаментальные типы
общей системы типов CTS (Common Type System), а
именно: ввод/вывод файлов, строки и
форматирование. Поскольку общеязыковая
среда выполнения CLR зависит от
используемой платформы, в ней
используются модели управления
процессами и памятью базовой
операционной системы.
Спецификацией (техническими
требованиями) Европейской Ассоциации
производителей компьютеров (European Computer
Manufacturers' Association — ЕСМА) определен
универсальный промежуточный язык CIL (Common
Intermediate Language). Согласно этим требованиям,
разрешено интерпретировать код на
промежуточном языке CIL или
компилировать его в собственный (внутренний)
код.
Верифицируемый код
Управляемый код может быть
проверен на предмет типовой
безопасности. Код, удовлетворяющий
требованиям типовой безопасности,
разрушить не так легко. Например,
структуры данных или другие приложения,
которые находятся в памяти, не могут
быть повреждены в результате перезаписи
буфера. Политику безопасности можно
применить к коду, удовлетворяющему
требованиям типовой безопасности.
Например, доступ к некоторым файлам или
средствам пользовательского интерфейса
может быть разрешен или запрещен.
Выполнение кода, происхождение которого
неизвестно, можно запретить.
Однако, не все приложения, для
работы которых требуется общеязыковая
среда выполнения CLR, обязаны
удовлетворять требованиям типовой
безопасности. В частности, такая
ситуация реализуется для приложений,
написанных на C++. Управляемый код,
написанный на C++, может использовать
возможности, предоставляемые
общеязыковой средой выполнения CLR,
например, сборку мусора. Но так как на C++
может быть создан и неуправляемый код,
то нет никаких гарантий относительно
того, что приложение, написанное на C++,
будет удовлетворять требованиям
типовой безопасности. В управляемом
коде, написанном на C++, нельзя выполнять
арифметические операции над
управляемыми указателями, или приводить
тип управляемого указателя к
неуправляемому. Поэтому управляемый код,
написанный на C++, можно проверить на
безопасность. Но может случиться так,
что в этом же приложении, написанном на C++,
будут выполняться арифметические
операции над указателями или приведение
типов управляемых указателей к
неуправляемым. А это, по своей сути,
ненадежно.