Общий промежуточный язык
Common Intermediate Language (CIL, произносится как «sil» или «kil») (ранее называвшийся Microsoft Intermediate Language или MSIL) — это самый низкий уровень удобочитаемого языка программирования в Common Language Infrastructure и в .NET Framework . Языки .NET Framework компилируются в CIL. CIL — это объектно- ориентированный язык ассемблера , основанный на стеках . Он управляется виртуальной машиной . Основными языками .NET являются C# , Visual Basic .NET , C++/CLI и J# .
CIL изначально был известен как Microsoft Intermediate Language (MSIL) во время тестирования версий языков .NET. Из-за этого CIL часто называют MSIL. Этот язык можно запустить на платформах GNU/Linux благодаря проекту Mono , который реализует виртуальную машину, похожую на .NET, но с бесплатным программным обеспечением.
Общая информация
Во время компиляции языков программирования .NET исходный код преобразуется в код CIL вместо объектного кода , зависящего от платформы или процессора . CIL — это независимый от платформы набор инструкций, который может выполняться на любом процессоре.
Инструкции CIL
Промежуточный код CIL включает в себя набор инструкций для следующих групп задач:
- зарядка и хранение
- арифметика
- Преобразование типа
- Создание объекта и манипулирование им
- Операторы стека (push/pop)
- Передача управления (прыжки)
- Вызов метода и возврат
- Обработка исключений
- Параллелизм на основе монитора
Компиляция во время выполнения
Компиляция « точно в срок» (JIT) включает преобразование промежуточного кода в код, немедленно исполняемый ЦП . Преобразование выполняется постепенно во время выполнения программы. Компиляция JIT обеспечивает оптимизацию для конкретной среды, безопасность типов во время выполнения и проверку сборки. Для этого JIT-компилятор проверяет метаданные сборки на наличие несанкционированного доступа и соответствующим образом обрабатывает нарушения.
Генератор собственных изображений
Генератор собственных образов (NGEN) создает собственный двоичный образ для текущей среды. Байт-код либо полностью опускается, либо преобразуется в собственные инструкции ЦП перед выполнением. Это устраняет накладные расходы JIT за счет переносимости; Когда образ, сгенерированный NGEN, запускается в неподдерживаемой среде, платформа .NET автоматически использует JIT-компилятор.
NGEN предназначен для ускорения выполнения сборки за счет устранения процесса JIT-компиляции во время выполнения, но в некоторых случаях это имеет неблагоприятные последствия из-за оптимизации, выполняемой оптимизатором JIT. Из-за этого рекомендуется использовать NGEN только после измерения производительности приложения до и после его использования.
Компиляция в .NET Native в облаке
Начиная с апреля 2014 года Microsoft начала разработку облачной технологии, необходимой для компиляции всех приложений в универсальном магазине приложений с использованием .NET Native в собственный код для каждого устройства. [ 1 ] Это значительно повысит производительность универсальных приложений в Windows 10 как для телефонов, так и для ПК, что позволит им открываться и возобновлять работу на 60 % быстрее и использовать на 20 % меньше памяти, что позволит сократить время отклика системы. [ 2 ]
Это значительно повысит производительность, особенно на устройствах, где потребление памяти и процессора имеет решающее значение, таких как устройства, работающие в настоящее время под управлением Windows Phone 8.1 , которые будут обновлены до Windows 10 Mobile в конце 2015 года. [ 3 ]
Метаданные
Метаданные — это информация о скомпилированных классах. Как и библиотечные типы в объектной модели компонентов , он позволяет приложениям предоставлять и обнаруживать интерфейсы, классы, типы, методы и поля в сборке. Процесс чтения метаданных называется отражением .
Выполнение CIL
- Исходный код преобразуется в Common Intermediate Language, и создается сборка .NET .
- До выполнения сборки .NET ее CIL передается через JIT-компилятор общеязыковой среды выполнения для создания машинного кода. (Сборка NGEN удаляет этот шаг во время выполнения.)
- Собственный код выполняется процессором компьютера.
Ссылки
- ↑ «Внутри .NET Native » (неопр.) . 9 канал. 2 апреля 2014 . Проверено 13 октября 2015 г. .
- ↑ «Microsoft .NET Native» (на английском языке) . Майкрософт. 10 июля 2015 г. . Проверено 13 октября 2015 г. .
- ^ «По сообщениям Lumia Spain, обновление для Windows 10 Mobile появится в ноябре» . Инсайдер Microsoft. 8 октября 2015 г. . Проверено 13 октября 2015 г. .