微软开源.NET后,CoreCLR和项目Mono关系

nig*_*tch 13 .net mono .net-core coreclr

有人可以向我解释Mono与微软最近提供的开源/ Linux可移植.NET堆栈(CoreCLR,CoreFX,Roslyn,ASP.NET)之间的当前关系是什么?

很明显这些项目是重叠的,所以我很好奇它们的路线图是什么 - Mono会以某种方式用微软的新组件替换它们自己的组件,还是它们会以某种方式共存?

naw*_*fal 0

来自 reddit 上的 Mono 贡献者:

我认为人们对整个 Mono/CoreCLR 情况有错误的心态。为什么一个虚拟机开源并移植到其他操作系统就意味着另一个虚拟机不能存在?这就像说应该只有一种 Python 实现,或者一种 JVM。这可不是什么好事。竞争是健康的。

Mono 恰好有很多 CoreCLR 没有的功能:LLVM、完整的 AOT、NaCl、tasklet、跨 VM GC 桥、各种分析器模块等。Mono 的启动时间和运行时内存占用也针对以下平台/设备进行了优化: CoreCLR 甚至没有(至少目前)目标。OTOH,CoreCLR 具有更成熟的 GC 和通常更好的代码生成(因此启动时间更慢)。这两个虚拟机擅长做不同的事情,没有理由两者不能同时存在。

我们也不坚持保留我们自己的代码。当这样做有明显的好处时(更少的维护、更正确、仍然足够可移植),我们很高兴切换到 CoreCLR/参考源代码。我们已经导入了大量的参考源代码,并且还导入了 CoreCLR VM 的某些部分:https :
//github.com/mono/mono/blob/master/mono/metadata/decimal-ms.c https
://github.com/mono/mono/blob/master/mono/metadata/threadpool-ms.c

来自 HN 上的 .NET 成员:

核心框架库 (CoreFX) - https://github.com/dotnet/corefx - 用于所有 .NET Core 场景,包括 .NET Native (UWP)。这意味着您的代码在所有这些不同的环境中执行相同的操作,因为它使用相同的底层框架库。另外,Mono 项目采用了大量相同的代码,这意味着 Xamarin 应用程序的基本框架也变得与 CoreFX 更加兼容。是啊!我们希望将来能够使其更加正式。我们经常与@migueldeicaza 讨论此事。

基本上,它们之间发生了大量的代码共享,如果它们将来聚合,我不会感到惊讶。既然 MS 已经收购了 Xamarin,我认为他们不会对维护两个运行时非常感兴趣。