经过长时间的开发者分支之后,Ruby的重要升级版本1.9.0按计划(事实上晚了4小时,原来Matz说当地时间19:00,最后实际在23:00)在圣诞节release了。

1.9.0是1.9分支的第一个版本,也是其中唯一一个开发者版本。Ruby在1.9之前一直遵循Unix的单双号规则(单数版本号代表开发者版本,一旦成熟到可以用于关键任务的生产环境,就会进入偶数版本号的分支),但在不久前Matz和他的核心团队决定改变这一点,他们新的版本策略在最新的一个thread中被总结描述如下:

1) Starting with planned Ruby 1.9.1 Ruby will not follow the even-odd number scheme, that was followed before. Ruby 1.9.n (n>=1) will be a stable version, planned for production usage.

2) Ruby 1.9.n (n>=1) contains the ideas from Ruby 2, that are actual feasible.

3) Work on Ruby 2 didn’t start now.

4) Ruby 1.9.0 was released instead of the planned Ruby 1.9.1, because the trunk was not as stable on 25.12. as everybody wants. It is not intended as a production version.

5) Ruby 1.9.0 is stable in respect to features, and is from this viewpoint a reference inplementation, which can be used by developers.

Matz本人认可这个描述是”complete and correct”的。他提到(比较隐晦滴)1.9.0是这个策略的一个例外,这个初始化版本并不是完全稳定的,坚持按照计划时间(尤其这个时间又是这么煽情的圣诞 >_< )发布它,主要是为了驱动开发进度,他甚至说:"We had tremendous improvements in last few weeks which cannot be achieved without the goal. Otherwise we had to wait a few more _years_ to get production stable 1.9 version." 1.9的强大和令人振奋是不用说了,但是这个另类的1.9.0版本除了本身文档不全,尤其是缺乏对于新特性的准确描述(Mauricio Fernandez维护的一个漂亮但是非官方列表值得一看),以及少量bug以外还有很多其他问题,主要问题之一是大量gems需要升级才能在1.9环境下使用,其中——不用想也知道——Rails是最让人头痛的,毕竟大部分Ruby用户是冲着Rails来的。还有个奇怪的问题(也在上面那个thread里被提到)是TextMate的Ruby bundle还是使用Leopard内置的Ruby 1.8的,结果导致古怪的行为。。。看来Mac OS Forge的人要抓紧时间了。

1.9.0,或者干脆说1.9,到底是干啥的?这个问题真的被问的很多,Dave Thomas贡献了一篇:Ruby 1.9—Right for You?,里面有很简明中肯的建议,还附赠在Mac OS X上安装和运行Ruby 1.9 sandbox的方案。

附上我用最傻瓜的算法解Project Euler No. 97的运行比较,基于YARV的1.9.0比1.8.6快了一倍:

oasis:~ neo$ ruby19 Code/Euler/097/prime_s8a.rb
ruby 1.9.0 (2007-12-25 revision 14709) [i686-darwin9.1.0]
Code/Euler/097/prime_s8a.rb:2: warning: shadowing outer local variable - power
Answer: 8739992577
Time: 7.50691s

oasis:~ neo$ ruby -v Code/Euler/097/prime_s8a.rb
ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
Answer: 8739992577
Time: 14.023543s