下一版 Ruby 将在今年晚些时候发布正式版,现在预览版 1.9.2 Preview 1 已经发布。与此同时还发布了一个详细的更新列表,这个列表给出了 API 的更新情况:
- Socket API 将更加对象化。
- 重新实现 Time 并且加强之。现在的 Time 没有 max/min 值,也就是说不存在 2038 年问题。
- 使用了新的 Random 类来生成随机数序列。
- merb 用户的好消息:Method#parameter。
列表的最后一项,新的方法Method#parameters
对于 Merb 的 action 参数特性是非常必要的。这个特性需要知道一个方法的形式参数的个数和名字。在 Ruby 1.8.x 中,通常使用 ParseTree来实现这个功能,但是由于 ParseTree 已经废弃,不会在 Ruby 1.9.x 中存在,所以 action 参数在 1.9.x 中不可用。权益之计是在 JRuby 和 Ruby 1.9.1 上使用 the methodpara 这个 gem。
现在使用Method#parameters
,获得方法的形式参数将会变得非常简单。只需简单地获取方法的句柄,然后调用parameters
。例如,方法:
def hello(a,b,x=42, *args)
的参数可以表示为:
[[:req, :a], [:req, :b], [:opt, :x], [:rest, :args]]
简略浏览 Ruby Trunk ChangeLog (注意:大文件),我们可以看到 Narihiro Nakamura 近期所做出的更新。“Longlife GC patch”(链接地址给出了diff)通过改变 VM和GC来以不同的方式处理长生命周期对象。从这些更新中可以看到,在这次发布版中,长生命周期对象看起来像是方法体和内联的缓存条目。在长生命周期空间中,使用 remembered sets 来跟踪变化。
在 1.9.2 中计划加入更多特性;但是究竟哪些特性会加入到最终版本中依然悬而未决。
在数年前,只有一个主流Ruby 版本的时候,编写一个兼容的Ruby 程序库是非常容易的。现在的程序库不但要兼容Ruby 1.9.x,还要兼容其他各种类型的Ruby 实现。
David A. Black 搭建了一个介绍 Ruby 版本的站点, http://ruby-versions.net/ :
我搭建了一个站点,你可以 ssh 登录上去,检视大量历史及现在的 Ruby 版本以及各种实现,包括 Ruby 1.0 到 1.9.2 的快照、Rubinius、JRuby 和 Ruby 企业版等。
另外一个检查跨版本 Ruby 代码的办法是 MultiRuby ,它会下载相应的 Ruby 版本然后在这些版本上运行代码。
查看英文原文: Ruby VM Roundup: Ruby 1.9.2 Preview 1, Ruby Versions Site
评论