Ruby VM 综述:Ruby 1.9.2 Preview 1,Ruby 版本收集站点

  • Werner Schuster
  • 杨晨

2009 年 7 月 24 日

话题:Ruby语言 & 开发架构

下一版 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)通过改变VMGC来以不同的方式处理长生命周期对象。从这些更新中可以看到,在这次发布版中,长生命周期对象看起来像是方法体和内联的缓存条目。在长生命周期空间中,使用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

Ruby语言 & 开发架构