.NET CoreCLR,CoreRT,Roslyn和LLILC之间有什么区别

Rob*_*mba 25 .net clr roslyn coreclr corert

最近我开始阅读有关.NET重组细节的信息(主要是通过.NET Core github页面).它接缝他们创建了兄弟项目以支持更多平台.在阅读时我的印象是CoreCLRCoreRT是一个新的OpenSource版本的专有Roslyn编译器.CoreRT提供本机(AOT)编译.而LLILC是一种备选实现指挥LLVM框架.

任何人都可以从用户角度确认和描述这些项目的差异和目标吗?为什么有人会在未来使用Roslyn而不是CoreCLR?

Had*_*ais 52

Roslyn是一个编译器平台,使您能够为C#和VB编程语言构建静态和动态分析工具以及自定义语言扩展和转换.它还使您能够将这些语言嵌入到其他语言或应用程序中.Roslyn包括C#和VB编译器以及其他工具.这些编译器发出通用中间语言(CIL)代码.

要运行此代码,必须将CIL编译为目标计算机体系结构可以执行的二进制代码..NET目前提供三种方法:

  1. 在应用程序运行时使用JIT编译器将CIL代码编译为二进制代码.此模型由CoreCLR实现.CoreCLR最初是作为CLR的副本.它已被修改为支持不同的操作系统.它们是分开维护的.
  2. 将CIL代码编译为二进制代码,并集成任何所需的.NET框架组件,以生成单文件自包含可执行文件,其性能更接近代码编写的本机语言.这项技术称为.NET Native.CoreRT是该技术的开源实现..NET Native和CoreRT之间的主要区别在于前者使用的AOT编译器是UTC编译器(MSVC编译器后端),而后者当前使用的是RyuJIT.UTC比RyuJIT更优化代码.同样在CoreRT中,运行时的某些组件已在C#中完全重新实现.CoreCLR仍然使用C++实现.
  3. NGEN与.NET Native类似,不同之处在于生成的可执行文件不是自包含的并且需要外部安装的运行时.

LLILC是基于可移植LLVM编译器框架的CIL编译器.它可用于构建JIT(当前)和AOT(未来)编译器.此编译器的优点是它利用Clang C++编译器优化并将LLVM可扩展性模型(分析和优化过程)带到.NET.

CoreRT和LLILC是新项目,仍处于早期开发阶段,需要更多工作来支持生产应用程序.因此,如果您是用户而非贡献者,CoreCLR和Roslyn将为您服务.同样,CoreCLR是运行时,而Roslyn是C#和VB编译器.

  • @AnthonyGatlin见[this](https://github.com/dotnet/llilc/issues/1075#issuecomment-345278134).似乎LLILC既没有死也没有活着. (2认同)
  • @AnthonyGatlin 是什么让您认为他们正在推动人们远离 .net 核心?他们正在为 .net 核心投入大量精力。.net core 3.0 将于 2019 年推出,并计划与 C# 8.0 一起发布更多版本 (2认同)
  • @JohnOsborne,自从八个月前我发表评论以来,我已经改变了看法。我每天都使用.NET Core,并同意他们在该项目中投入大量资源。我的看法不正确。 (2认同)