MacRuby 0.5 Beta增加JIT、AOT、GCD支持,删除GIL

MacRuby 0.5的首个beta版已经有了,目前仅适用于Snow Leopard(MacOS X 10.6)机器。

InfoQ就MacRuby的现状和未来采访了MacRuby的核心团队。

InfoQ:MacRuby的新VM是如何使用LLVM的?

MacRuby按需编译所有东西(当代码需要实际运行时)。[LLVM]位代码会在编译之前进行优化。

MacRuby 0.5 beta的发布说明也提到了LLVM是在调用外部函数时用来生成存根的,因为这比在老版本的MacRuby里使用的libffi要来得快。

InfoQ:MacRuby Ahead-Of-Time(AOT)编译了部分Ruby标准库。这是为什么呢?

显然,这样做会使启动更快。我们使用AOT编译它们主要是为了测试AOT编译器。它们是作为主rake任务的一部分在生成的时候编译的。

InfoQ:对本地扩展(native extensions)的支持现在处于什么状态?

经过一些小的修改,我们可以使一些C扩展运行起来,比如说,ripper、digest、socket、zlib等等。我们计划在将来的版本里完整地实现MRI的C扩展API。

InfoQ:0.5版的一个大改进是去掉了GIL。现在,这个实现已经有一段时间了,你的解决方案带来了哪些体验?

据我们所知,它没有带来任何显著的开销。启动一个线程的开销比之前稍微高一点,但之后大部分代码都能并行运行。

没有GIL的系统是让MacRuby成为真正的Cocoa开发平台的必要条件,因为桌面应用程序通常都会使用线程或者新近的Grand Central Dispatch(GCD)。

InfoQ:MacRuby允许使用AOT编译Ruby代码,那么,有没有可能不使用垃圾收集器,即能否仅仅使用Objective-C的引用计数内存管理?

不能。但我们正在考虑一种模式,在这种模式里,编译器将会生成自动释放池(autorelease pools),而运行库将不会使用Autozone GC。如果你浏览邮件列表存档,就会看到最近在讨论这个话题。

上面提到的邮件列表讨论了如何模拟GC,这对于在不支持Autozone GC的平台上运行MacRuby程序来说是至关重要的,比如说,iPhone。讨论里的另一个邮件解释了为什么把Autozone移植到iPhone上是不可行的,因为iPhone版的Cocoa是不认识GC的。

MacRuby 0.5的最终版本将会运行在32位和64位的Leopard和Snow Leopard上。

查看过去InfoQ的MacRuby报道,并开始0.5版之旅吧。

查看英文原文:MacRuby 0.5 Beta Brings JIT, AOT, GCD Support, Removes GIL

译者介绍:李永伦,从02年开始关注.NET,读过4年工商管理,任过3届微软MVP,最近恋上Ruby,私底下喜欢研究哲学和心理学,酷爱动漫、科幻、科普和金庸武侠,爱好买书、读书和藏书。InfoQ中文站内容团队,尤其是架构、SOA和Ruby社区需要您的参与,有意者请邮件至editors【AT】cn.infoq.com。

你可能感兴趣的:(MacRuby 0.5 Beta增加JIT、AOT、GCD支持,删除GIL)