Какая разница между .NET CoreCLR, CoreRT, Roslyn и LLILC

Недавно я начал читать подробности реорганизации .NET(главным образом через страницы .NET github). Это означает, что они создали проекты для сестер, чтобы поддерживать больше платформ. Во время чтения у меня создается впечатление, что CoreCLR и CoreRT - новая версия привилегии OpenSource Roslyn. CoreRT обеспечивает сборку (AOT). И LLILC - это альтернативная реализация, направляющая структуру LLVM.

Можно ли подтвердить и описать различия и цели этих проектов с точки зрения пользователя? Почему кто-то будет использовать Roslyn в будущем вместо CoreCLR?

Ответ 1

Roslyn - это платформа компилятора, позволяющая создавать инструменты статического и динамического анализа, а также расширения и преобразования пользовательских языков для языков программирования С# и VB. Она также позволяет встраивать эти языки в другие языки или приложения. Roslyn включает в себя компиляторы С# и VB и другие инструменты. Эти компиляторы испускают код Common Intermediate Language (CIL).

Для запуска этого кода CIL должен быть скомпилирован в двоичный код, который может выполнять архитектура целевого компьютера. В настоящее время .NET предоставляет три способа сделать это:

  1. Скомпилируйте код CIL в двоичный код, используя JIT-компилятор во время работы приложения. Эта модель реализована в CoreCLR. CoreCLR начался как копия CLR. Он был модифицирован для поддержки разных ОС. Они поддерживаются отдельно и параллельно.
  2. Скомпилируйте код CIL в двоичный код и интегрируйте все необходимые компоненты .NET Framework, чтобы создать отдельный исполняемый файл с одним файлом, производительность которого ближе к написанному на родном языке. Эта технология называется .NET Native. CoreRT - это реализация этой технологии с открытым исходным кодом. Основное различие между .NET Native и CoreRT заключается в том, что компилятор AOT, используемый первым, - это компилятор UTC (серверная часть компилятора MSVC), в то время как последний в настоящее время использует RyuJIT. UTC гораздо более агрессивен в оптимизации кода, чем RyuJIT. Также в CoreRT некоторые компоненты среды выполнения были полностью переопределены в С#. CoreCLR по-прежнему использует реализацию C++.
  3. NGEN, аналогичный .NET Native, за исключением того, что созданные исполняемые файлы не являются автономными и требуют внешней установленной среды выполнения.

LLILC - это компилятор CIL, основанный на переносимой среде компилятора LLVM. Его можно использовать для построения JIT (текущих) и AOT (будущих) компиляторов. Преимущество этого компилятора состоит в том, что он использует оптимизацию компилятора Clang C++ и переносит модель расширяемости LLVM (этапы анализа и оптимизации) в .NET.

CoreRT и LLILC являются новыми проектами и все еще находятся на ранней стадии разработки и требуют гораздо больше работы для поддержки производственных приложений. Так что если вы пользователь, а не участник, CoreCLR и Roslyn для вас. Опять же, CoreCLR - это среда выполнения, а Roslyn - компиляторы С# и VB.