Принцип компиляции и выполнения программы в среде CLR
Система управления памятью называется Garbage Collector (GC)
Среда CLR обеспечивает интеграцию языков и позволяет объектам, созданным на одном языке, использовать объекты, написанные на другом. Такая интеграция возможна благодаря стандартному набору типов и информации, описывающей тип
1) Common Type System(CTS) которая описывает все базовые типы данных, поддерживаемые средой CLR, и определяет, как эти типы данных будут представлены в формате метаданных .NET
2) Common Language Specification (CLS) минимальный набор возможностей, который должен быть реализован производителями ПК, чтобы продукты работали в CLR
Для того чтобы написанная, например, на C# программа была выполнена, ее необходимо преобразовать в программу на языке, «понятном» компьютеру (исполняемый код).
Такой процесс преобразования называется компиляцией, а программа, которая его выполняет, компилятором
На первом этапе все .NET компиляторы генерируют промежуточный код на языке
Intermediate Language (IL — промежуточный язык) или IL-код. IL-код не является
специфичным ни для какой операционной системы и ни для какого языка программирования. Он может быть выполнен в любой среде, для которой реализована CLR-система. На втором этапе IL-код переводится в код, специфичный для конкретной операционной системы и архитектуры процессора. Эта работа возлагается на JIT-компилятор (Just In Time compiler – компилирование точно к нужному моменту). Только после этого операционная система может выполнить приложение. Замечание JIT-компилятор входит в состав среды CLR
IL-код, выполняемый под управлением CLR, называется управляемым (managed). Это
означает, что среда CLR полностью управляет жизненным циклом программы: отслеживает безопасность выполнения команд программы, управляет памятью и т.д. Это, несомненно, является достоинством управляемого кода. Конечно, использовать приложения, разработанные на основе управляемого кода, можно только тогда, когда на компьютере установлена .NET Framework. Использование IL-кода имеет и оборотную сторону – поддержка любой платформы означает отказ от функциональности, специфичной для конкретной платформы. Обойти это
ограничение позволяет использование неуправляемого кода (unmanaged), т.е. кода, который не контролируется CLR и выполняется самой операционной системой. Такой код приходится использовать при необходимости обращения к низкоуровневым функциям операционной системы (например, понятие реестра существует только в Windows и функции, работающие с реестром, приходится вызывать из операционной системы). Иногда использование
неуправляемого кода позволяет ускорить выполнение некоторых алгоритмов
Еще больше новостей в моем телеграм канале EasyProgers - https://t.me/easyprogers














