MacRuby 0.6:GCD,线程性能改进,更快的调试器,AOT

MacRuby 0.6已经发布(MacRuby 0.6下载链接)。

MacRuby 0.6升级日志中指出,MacRuby 0.6现在可以说是非常适合Cocoa开发,完善的XCode和预编译(AOT)支持将编译Ruby源代码以及运行二进制文件变为可能。

跟之前披露的一样,0.6版实验性地加入了调试支持。MacRuby的调试是在编译的代码中加入特殊指令以触发断点,而不是像其他Ruby编译器那样使用追踪或者Ruby VM Hook。

关于此调试器,升级日志中描述说:

此调试器最有意思的特性是它被抽象为一个简单的Objective-C API,而且将macrubyd作为一个客户端来使用。在未来我们可能会看到更多这样的结构。

Java和 Ruby的库之间的比较可以在Debug-Commons项目中找到。

MacRuby 0.5移除了GIL之后,线程能够并行地运行(而不是像Ruby 1.9那样一次只能运行一个Ruby线程)。0.6对多线程模式做了一些新的改进,例如(根据升级日志):

最后要说的是,在这个版本中,我们完全重写了Regexp类。它现在是基于ICU架构而不是Oniguruma的正则表达式编译和模式匹配架构。因为ICU是线程安全的。在MacRuby 0.6中,多线程可以高效地使用正则表达式。

MacRuby 0.5已经开始支持Grand Central Dispatch(GCD),Apple在Mac OS X雪豹和Phone OS 4.0上的系统级线程池以及任务系统。MacRuby 0.6还在‘dispatch’库中加入了一些新的特性和抽象概念。

Job提供了和Thread类似的接口,可以用于异步执行代码。它可以在同步或者异步的情况下使用。如下的代码就是一个例子。Job类做一些工作,然后等待其结束(这段代码取自文档):

@result = job.value
puts @result.to_int.to_s.size # => 51

异步方式需要传递一个回调函数,一旦Job完成工作便调用此函数;在Ruby中,这个当然是使用代码段来完成。

job.value {|v| p v.to_int.to_s.size } # => 51 (eventually)

MacRuby Dispatch库引入的另一个工具便是Proxy,这个工具能够帮助将调用对象的方法序列化。

其他的新特性有迭代并行化,例如迭代器的并行实现,包括Enumerable#p_each, Enumerable#p_map, Enumerable#p_find和 其他类似的方法。

GCD另一个激动人心的特性是事件源,这个特性能够允许用户在特定的事件中注册处理器,然后在GCD的队列中监视事件。事件源可以是计时器,进程的信号,I/O的输入描述符等。事件源的确是一个非常有用的工具,它能够帮助开发者利用OS级的线程池,运行在队列中的事件处理器,当事件到来的时候,处理器从线程池中取出线程,然后运行完毕之后将线程放置回线程池中。

可以阅读dispatch库源码的README获取更多关于MacRuby 0.6中GCD特性的信息。

MacRuby 0.6发布之后,用户发现了一个问题,在运行某代码段的时候,从后台线程切换到主线程会导致程序崩溃。因此,一旦发现这样古怪的线程问题,请细心留意;不过,MacRuby的trunk代码库中很快就会增加bug报告功能。

每一个Ruby版本中最大的问题不用说,当然是兼容性问题;MacRuby 0.6是如何处理这个问题的呢(根据升级日志):

MacRuby 0.6支持为官方Ruby编写的C插件。我们也能够成功支持Nokogiri,SQLite3以及PostGreSQL的MacRuby旧版本插件。

这个发布版能够通过85%的RubySpecs测试,可以更好地支持修改过的Rails 3和Ruby 1.9编码。

最后要说的是,Matt Aimonetti正在为O'Reilly写一本书,书名是MacRuby: The Definite Guide,开头数个章节已经可以在线阅读了。

查看英文原文:MacRuby 0.6 With GCD and Threading Improvements, Fast Debugger, AOT

你可能感兴趣的:(MacRuby 0.6:GCD,线程性能改进,更快的调试器,AOT)