В этой главе мы разберем процесс выполнения .NET Core и сравним его с .NET Framework. Процесс управляемого выполнения включает в себя следующие этапы.
- Выбор компилятора
- Компиляция вашего кода в MSIL
- Компиляция MSIL в нативный код
- Запуск кода
Выбор компилятора
-
Это многоязычная среда исполнения, среда выполнения поддерживает широкий спектр типов данных и языковых функций.
-
Чтобы получить преимущества, предоставляемые общеязыковой средой исполнения, вы должны использовать один или несколько языковых компиляторов, предназначенных для среды исполнения.
Это многоязычная среда исполнения, среда выполнения поддерживает широкий спектр типов данных и языковых функций.
Чтобы получить преимущества, предоставляемые общеязыковой средой исполнения, вы должны использовать один или несколько языковых компиляторов, предназначенных для среды исполнения.
Компиляция вашего кода в MSIL
-
Компиляция переводит ваш исходный код на язык Microsoft Intermediate Language (MSIL) и генерирует необходимые метаданные.
-
Метаданные описывают типы в вашем коде, включая определение каждого типа, подписи членов каждого типа, членов, на которые ссылается ваш код, и другие данные, которые среда выполнения использует во время выполнения.
-
Среда выполнения находит и извлекает метаданные из файла, а также из библиотек классов инфраструктуры (FCL) по мере необходимости во время выполнения.
Компиляция переводит ваш исходный код на язык Microsoft Intermediate Language (MSIL) и генерирует необходимые метаданные.
Метаданные описывают типы в вашем коде, включая определение каждого типа, подписи членов каждого типа, членов, на которые ссылается ваш код, и другие данные, которые среда выполнения использует во время выполнения.
Среда выполнения находит и извлекает метаданные из файла, а также из библиотек классов инфраструктуры (FCL) по мере необходимости во время выполнения.
Компиляция MSIL в нативный код
-
Во время выполнения компилятор JIT преобразует MSIL в собственный код.
-
Во время этой компиляции код должен пройти процесс проверки, который проверяет MSIL и метаданные, чтобы выяснить, можно ли определить, что код безопасен по типу.
Во время выполнения компилятор JIT преобразует MSIL в собственный код.
Во время этой компиляции код должен пройти процесс проверки, который проверяет MSIL и метаданные, чтобы выяснить, можно ли определить, что код безопасен по типу.
Запуск кода
-
Общеязыковая среда выполнения обеспечивает инфраструктуру, которая позволяет выполнять выполнение, и службы, которые можно использовать во время выполнения.
-
Во время выполнения управляемый код получает такие службы, как сборка мусора, безопасность, взаимодействие с неуправляемым кодом, поддержка отладки на нескольких языках и расширенная поддержка развертывания и управления версиями.
Общеязыковая среда выполнения обеспечивает инфраструктуру, которая позволяет выполнять выполнение, и службы, которые можно использовать во время выполнения.
Во время выполнения управляемый код получает такие службы, как сборка мусора, безопасность, взаимодействие с неуправляемым кодом, поддержка отладки на нескольких языках и расширенная поддержка развертывания и управления версиями.
Процесс выполнения кода .NET Core
Теперь давайте рассмотрим, как код выполняется с .NET Core по сравнению с .NET Framework. В .NET Core есть много замен этих компонентов, которые являются частью .NET Framework.
В .NET Core появилась новая серия компиляторов, как у Roslyn для C # и VB.
Вы также можете использовать новый компилятор F # 4.1, если вы хотите использовать F # с .NET Core.
На самом деле эти инструменты разные, и мы можем использовать Roslyn с .NET Framework, если мы используем C # 6 или более позднюю версию, потому что компилятор C # может поддерживать только до C # 5.
В .NET Core у нас нет библиотек классов инфраструктуры (FCL), поэтому используется другой набор библиотек, и теперь у нас есть CoreFx.
CoreFx — это переопределение библиотек классов для .NET Core.
У нас также есть новая среда выполнения с .NET Core, известная как CoreCLR, и использующая JIT-компилятор.
Теперь вопрос заключается в том, почему у нас есть повторная реализация всех этих компонентов, которые мы уже имеем в .NET Framework.
Таким образом, ответ тот же, что и для Microsoft .NET Core.