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读者交流群 )。