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。