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

What's the difference between .NET CoreCLR, CoreRT, Roslyn and LLILC

最近我开始阅读有关 .NET 重组的详细信息(主要是通过 .NET Core github pages)。 看起来他们创建了兄弟项目以支持更多平台。在阅读时,我的印象是 CoreCLR and CoreRT is a new OpenSource version of propriety Roslyn compiler. CoreRT provides native (AOT) compilation. And LLILC 是指导 LLVM 框架的替代实现。

谁能从用户的角度确认和描述这个项目的差异和目标?为什么以后会有人使用 Roslyn 而不是 CoreCLR?

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

为了运行这段代码,CIL必须被编译成目标计算机体系结构可以执行的二进制代码。 .NET 目前提供了三种方法来做到这一点:

  1. 在应用 运行ning 时使用 JIT 编译器将 CIL 代码编译成二进制代码。该模型由 CoreCLR 实现。 CoreCLR 最初是 CLR 的副本。它已被修改以支持不同的操作系统。它们是分开和并行维护的。
  2. 将 CIL 代码编译成二进制代码并集成任何所需的 .NET 框架组件以生成 single-file self-contained 可执行文件,其性能更接近代码编写的本地语言。这项技术被称为.NET Native。 CoreRT 是这项技术的 open-source 实现。 .NET Native 和 CoreRT 的主要区别在于,前者使用的 AOT 编译器是 UTC 编译器(MSVC 编译器后端),而后者目前使用的是 RyuJIT。 UTC 在优化代码方面比 RyuJIT 更积极。同样在 CoreRT 中,运行time 的一些组件已在 C# 中干净利落地重新实现。 CoreCLR 仍然使用 C++ 实现。
  3. NGEN 与 .NET Native 类似,只是生成的可执行文件不是 self-contained 并且需要外部安装 运行time.

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

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