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

问题描述 投票:0回答:1

最近我开始阅读有关 .NET 重组细节的内容(主要是通过 .NET Core GitHub 页面)。

他们似乎创建了兄弟项目来支持更多平台。在阅读时,我的印象是 CoreCLRCoreRT 是专有 Roslyn 编译器的新开源版本。 CoreRT 提供本机 (AOT) 编译。 LLILC 是指导 LLVM 框架的替代实现。

这个可以确认吗?从用户的角度来看,这些项目的差异和目标是什么?为什么将来有人会使用 Roslyn 而不是 CoreCLR?

.net clr roslyn coreclr corert
1个回答
65
投票

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 编译器。

© www.soinside.com 2019 - 2024. All rights reserved.