Mono 4.0 发布,支持 C# 6

  • Jonathan Allen
  • 朱明

2015 年 6 月 9 日

话题:语言 & 开发

Mono 4.0本月正式发布。这标志着含有微软的CoreCLR项目的开放源代码的首个版本的问世。其默认的语言为C# 6,这意味着 Mono 再一次抢在微软之前推出了新的 C# 编译器的 RTM 版本。

除了我们之前报道的功能和变化,Mono 4 还应当具有“更小的调试开销”和“基本的 PowerPC64 LE 支持”。目前这些功能的具体细节不详。

许多人在问,既然微软正在开发自己的开源、跨平台的 CLR,为什么 Mono 项目还要继续呢。Mono 的贡献者和 reddit 用户_alexrp_解释道,

我觉得人们对 Mono/CoreCLR 整件事情有种错误的观念。为什么一种虚拟机(VM)变成开源并移植到其它操作系统,就意味着另外一种虚拟机不能存在呢?这就好象是说,只能有一种 Python 实现,或者一种 JVM。那不是好事。竞争是良性的。

Mono 确实具备了很多 CoreCLR 没有的功能:LLVM、完整的提前编译(AOT)、原生客户端(NaCl)、微进程(tasklet)、跨虚拟机的垃圾回收 (GC)桥接(bridge)、各种探查器(profile)模块等等。Mono 的启动时间和运行时内存占用也针对那些连 CoreCLR(至少现在)都没有作为目标的平台/设备进行了优化。另一方面,CoreCLR 有更成熟的垃圾回收,以及通常来说更好的代码生成(也因此造成了更慢的启动速度)。两种虚拟机各有所长,没有理由不能同时存在。

倒不是我们坚持要保留我们自己的代码。如果切换到 CoreCLR/参考源代码有明显的好处(更少的维护、更正确、又具备足够的移植性),我们也很高兴这样做。我们已经引入了大量的参考源代码,而且我们也正在引入 CoreCLR 虚拟机的某些部分:

https://github.com/mono/mono/blob/master/mono/metadata/decimal-ms.c

https://github.com/mono/mono/blob/master/mono/metadata/threadpool-ms.c

4.0 版本也并非没有瑕疵。 Reddit 的用户whatsinashagbox写道,

我现在不太确定该如何处理这种情况,我有一个应用程序用到了一些第三方的 DLL,似乎要求 10.0.0.0 版本的 Microsoft.VisualBasic.dll,而它无法在 mono 4 下运行。发布说明中似乎暗示有办法让它使用.Net 4.5 的程序集,但是我不清楚怎么才能做到。有人知道怎么才能让它在新的 mono 版本下运行吗?

这事目前正在研究,似乎是个意外的问题。

查看英文原文:Mono 4.0 Released with C# 6


感谢邵思华对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

语言 & 开发