Ruby 1.9.1 程序库兼容性纵览

阅读数:1534 2009 年 2 月 16 日

话题:RubyRuby on Rails语言 & 开发

Ruby 1.9.1是 1.9.x 系列第一个稳定发布版,它带来了众多语言和标准库的改进,特别是性能上有很大的提升。

然而,既有代码和 Gems 的兼容性问题却成为迁移至 1.9.1 的一大阻碍。造成这种情况的原因多种多样。比如说,ParseTree这个 Gem 现在不可用的原因就是新的 Ruby 虚拟机在解析源代码并编译成字节码以后,不再保持一棵 Ruby 的解析树(parsetree)。局部替代品是跟随 1.9.x 一同发布的 Ripper 程序库(比如 MacRuby 正是使用 Ripper 进行一些 Ruby 源代码的解析)。仅仅需要解析源代码的程序库则可以使用 Ripper 或者ruby_parser

另外,可能导致兼容性问题的原因还包括语言本身语义上的微小变动。例如,目前 block 变量范围的调整以及其他一些改动等

不管原因如何,2007 发布的 1.9 和今年早些时候发布的 1.9.1 使得让程序库兼容 1.9.x 的问题越来越受到关注。

根据众多报告,Rails 2.3(或者 Rails Edge)似乎是 1.9.x 兼容的,而早起的发布版还有些问题。Ryan Bigg 列出了一些在 1.9.1 上使用 Rails 所遇到的问题Phusion Passenger的网志上宣称,他们最新的版本已经兼容 1.9.1,并详细列出了其为此所升级或修正的程序库。一些数据库适配器(adapters)也在此列,例如支持 Ruby1.9.1 的 MySQL 适配器 2.8.1 版本发布

找寻兼容性问题的一个好地方就是http://isitruby19.com/。这个站点列出了 Ruby Gems 并允许用户报告他们关于兼容性方面的经验。一个很有趣的功能是 Gem 名字旁边的绿色条或者红色条,用来表示这个 Gem 在 1.9 上是成功了还是失败了。

但是,这个结果的正确性也并非毫无错误,尤其是那些只有一个用户报告的 Gems。在本新闻发布时止,ParseTree Gem 被标记为“Working”,这和ParseTree 的创始人 Ryan Davis 早些时候的一条消息相违背。而且,在 Ruby 1.9.1 上对 ParseTree 进行的快速测试会因失败而输出:

parse_tree.rb:3:in `': ParseTree doesn't work with ruby 1.9.1 

然而,在你遇到兼容性问题的时候,还是可以先去 http://isitruby19.com 看看再说。

使你迟迟没有迁移到 Ruby 1.9.1 的理由是什么?

查看英文原文:Ruby 1.9.1 Library Compatibility Roundup