В чем разница между .NET CoreCLR, CoreRT, Roslyn и LLILC

Недавно я начал читать о деталях реорганизации .NET (в основном на страницах github .NET Core). Похоже, что они создали родственные проекты для поддержки большего количества платформ. При чтении у меня сложилось впечатление, что CoreCLR и CoreRT – это новая версия собственного компилятора Roslyn с открытым исходным кодом. CoreRT обеспечивает нативную (AOT) компиляцию. А LLILC — это альтернативная реализация, управляющая инфраструктурой LLVM.

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


person Robert Zaremba    schedule 07.01.2016    source источник
comment
Roslyn полностью с открытым исходным кодом, насколько мне известно, в нем нет ничего проприетарного.   -  person Jeroen Vannevel    schedule 08.01.2016
comment
CoreRT — это среда выполнения. Roslyn — это компилятор C# и VB, компилирующий исходный код в IL. Это совершенно разные вещи.   -  person Jon Skeet    schedule 08.01.2016
comment
@JonSkeet - вы должны опубликовать свой комментарий в качестве ответа.   -  person Robert Zaremba    schedule 24.01.2016
comment
Я так не думаю. Это был бы очень краткий ответ, без особых подробностей... если честно, простой поиск открыл бы гораздо больше и больше.   -  person Jon Skeet    schedule 24.01.2016
comment
Мои комментарии здесь: stackoverflow.com/questions/22867991 /что нового в сети/   -  person nawfal    schedule 01.07.2016
comment
@ Jeroen Vannevel Нет никакой связи между продуктом с открытым исходным кодом и проприетарным. Roslyn является как открытым исходным кодом, так и проприетарным. Это один из самых больших мифов о программном обеспечении с открытым исходным кодом.   -  person Gavin Williams    schedule 17.02.2017


Ответы (1)


Roslyn — это платформа компилятора, позволяющая создавать инструменты статического и динамического анализа, а также пользовательские языковые расширения и преобразования для языков программирования C# и VB. Она также позволяет встраивать эти языки в другие языки или приложения. Roslyn включает компиляторы C# и 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 некоторые компоненты среды выполнения были заново реализованы на C#. CoreCLR по-прежнему использует реализацию C++.
  3. NGEN, который похож на .NET Native, за исключением того, что создаваемые исполняемые файлы не являются автономными и требуют установленной извне среды выполнения.

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

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

person Hadi Brais    schedule 27.01.2016
comment
Кто-нибудь знает, находится ли LLILC в активной разработке или есть замена? Их страница GitHub не показывает никакой активности в течение последних двух лет. - person Anthony Gatlin; 08.03.2018
comment
@AnthonyGatlin См. это. Похоже, что LLILC ни мертв, ни жив. - person Hadi Brais; 08.03.2018
comment
@AnthonyGatlin Почему вы думаете, что они отталкивают людей от ядра .net? Они вкладывают много усилий в ядро ​​.net. .net core 3.0 выйдет в 2019 году, и многие другие выпуски запланированы вместе с C# 8.0. - person IEnjoyEatingVegetables; 14.11.2018
comment
@JohnOsborne, я изменил свое мнение с тех пор, как оставил этот комментарий восемь месяцев назад. Я использую .NET Core каждый день и согласен, что они вкладывают в проект много ресурсов. Мое мнение было неправильным. - person Anthony Gatlin; 15.11.2018