MacRuby 综述:0.7 发布、基于 GCD 的 Web 服务器以及 BridgeSupport

  • Werner Schuster
  • 张龙

2010 年 11 月 7 日

话题:RubyRuby on RailsApple语言 & 开发

近日,MacRuby 0.7 发布了(实际上是 0.7.1),该版本包含了众多的 Bug 修复并改进了对 Ruby 的兼容性

MacRuby 0.7 是 MacRuby 首个支持 Ruby 1.9.2 的版本,因此该版本重新实现了众多的新特性并提供了向后的修复(backport)。

此次发布通过了 90% 的 RubySpecs,而上一版本则为 82%。

MacRuby 0.7.1 借助于BridgeSupport 工具的支持可以提供对 Cocoa、Objective-C 以及 C 的完整脚本支持。之前的版本在某些地方还是存在着缺陷,比如不支持 Apple 向 Objective-C 中所添加的块(blocks)特性。现在开发者可以向接收 C 块的 API 传递 Ruby Proc 了,反之亦然。

之所以不支持这些特性的原因在于缺少元数据的支持,而 BridgeSupport 则是这一问题的解决方案。由于构建在 LLVM 的 Clang 解析器上,它可以 查看到库的源代码并生成 MacRuby 所能使用的元数据,之后 MacRuby 可以使用这些元数据获悉库接收的到底是什么,比如块、符号等等。BridgeSupport 的源代码表明了 Clang 决定并生成元数据的方式。

MacRuby 支持并发的 Ruby 线程(也就是没有 GIL),这对于 Mac OS X Snow Leopard 系统范围的线程池系统 Grand Central Dispatch(GCD)非常有帮助。

能够说明 MacRuby 与 GCD 集成的示例就是全新的 Web 服务器 ControlTower,它使用 MacRuby 编写。由于构建在 Rack 之上,它可以通过将请求委托给 GCD 队列对其进行处理,而队列则可以按照顺序或并发的方式来处理请求。ControlTower 的发布声明给出了其架构概览,同时还有与 Thin 服务器对比的性能参数。

虽然 ControlTower 支持 Rack,但 Rails 用户还是会有些失望——MacRuby 0.7.1 并不支持 Rails 3。团队期望 MacRuby 的下一版本能够支持 Rails。

MacRuby 0.7 所支持的另一个 Mac OS X 特性就是 Sandbox,它可以限制 OS 进程的权限。我们可以对 Sandbox 进行设定以拒绝网络访问、文件系统访问等等。但它并非 MacRuby 所独享的特性——其他的 Ruby 实现也可以通过Playpen 扩展使用 Mac OS X Sandbox 特性。

最后,MacRuby 发布声明还提及了加快各种 Ruby 代码运行速度的一些小技巧:

我们实现了一个基本的解释器,通过简单的启发式方法在编译期计算代码中不常经过的路径。比如说,使用简单的 #eval 声明来创建代码已经成为 Ruby 库的常见使用方式,现在它的运行速度已经得到了极大的提升。

想要上手 MacRuby 的开发者们应该读一读“MacRuby: The Definitive Guid”这本书,它是 Matt Aimonetti 为 O'Reilly 所编写的,网上有免费的版本。

查看英文原文:MacRuby Roundup: 0.7 Released, GCD-based Web Server, BridgeSupport

RubyRuby on RailsApple语言 & 开发