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 。
评论