.NET CoreCLR、CoreRT、Roslyn 和 LLILC 有啥区别

Posted

技术标签:

【中文标题】.NET CoreCLR、CoreRT、Roslyn 和 LLILC 有啥区别【英文标题】:What's the difference between .NET CoreCLR, CoreRT, Roslyn and LLILC.NET CoreCLR、CoreRT、Roslyn 和 LLILC 有什么区别 【发布时间】:2016-01-07 20:58:01 【问题描述】:

最近我开始阅读有关 .NET 重组的详细信息(主要通过 .NET Core github pages)。 他们似乎创建了兄弟项目来支持更多平台。在阅读时,我的印象是CoreCLR 和CoreRT 是专有Roslyn 编译器的新开源版本。 CoreRT 提供本机 (AOT) 编译。而LLILC 是指导 LLVM 框架的替代实现。

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

【问题讨论】:

Roslyn 是完全开源的,据我所知,它没有任何专利。 CoreRT 是一个运行时。 Roslyn 是 C# 和 VB 编译器,将源代码编译为 IL。它们是完全不同的东西。 @JonSkeet - 你应该发表你的评论作为答案。 我不这么认为。这将是一个非常简短的答案,没有太多细节……老实说,简单的搜索会发现更多。 我的cmets在这里:***.com/questions/22867991/what-is-new-net-native/… 【参考方案1】:

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

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

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

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

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

【讨论】:

有谁知道LLILC是否仍在积极开发中或是否有替代品?他们的 GitHub 页面显示过去两年没有任何活动。 @AnthonyGatlin 见this。看来LLILC既不死也不活。 @AnthonyGatlin 是什么让您认为他们正在推动人们远离 .net 核心?他们正在为 .net 核心投入大量精力。 .net core 3.0 将于 2019 年推出,更多版本计划与 C# 8.0 一起发布 @JohnOsborne,自从八个月前发表评论后,我改变了看法。我每天都使用 .NET Core,并且同意他们在项目中投入了大量资源。我的意见是错误的。

以上是关于.NET CoreCLR、CoreRT、Roslyn 和 LLILC 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

C++随笔:.NET CoreCLR之GC探索

C++随笔:.NET CoreCLR之GC探索

C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole

在Linux上用自己编译出来的coreclr与donet cli运行.net core应用程序

C++随笔:.NET CoreCLR之GC探索

C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole