Rubinius正在赢得越来越多的支持,许多Ruby VM的开发者都坚信它前途不可限量。
理由之一是它的模块化设计及其展现内部结构的方式。对于新上手的开发人员而言,Rubinius的内省机制(introspection)是一项很体贴的设计。在Ruby中,我们已经可以很方便得通过诸如obj.methods
(返回obj
的方法列表)的方式观察Ruby类。而Rubinius则做得更上一层楼,你甚至可以访问代表代码数据结构的抽象语法树(Abstract Syntax Tree,AST)。Rubinius使用ParseTree,通过标记和嵌套列表展现其结构。例如,下列代码:
puts "Hello, Rubinius. You rock my world!"
将被解释成:
[:fcall, :puts, [:array, [:str, "Hello, Rubinius. You rock my world!", 0]]]
如果你觉得这看上去象LISP或者Scheme的代码,没错,这不是巧合。这种称为s-表达式(s-expressions,即symbolic expressions)的表现形式也被这些语言用来展现代码。
这种语法树形式的好处在于其可读性要高于另外一种由在内存中一堆链接在一起的对象组成的数据结构。在创建AST的时候这种优势则更为明显,例如,用于使用AST的测试用例。
研究ParseTree有助于Rubinius的开发。现在已经有一些工具基于ParseTree了。Ruby2Ruby将一个ParseTree AST转成Ruby源代码,这样就可以看到运行时生成的Ruby代码,这一点很有用。Flog是一个新工具,它可以分析代码并评估其质量。其它的一些基于ParseTree的工具像Ruby2C或Heckle,可以提供类似的检查功能。在Ambition中可以看到另外一种使用ParseTree的方式,它通过利用Ruby代码的ParseTree表现形式创建数据库以及其它数据源的查询语句。
Brian Ford深入探讨了Rubinius,例如得到ParseTree输出。文章的话题中包括用于审视Rubinius代码和相应底层字节码的ParseTree AST的工具。有了这些,Rubinius的开发新手可以迅速了解外表下发生的一切,以及Ruby源代码在用于执行时被转换成什么样子。有关更多最新的细节以及命令行选项介绍可以参考Rubinius的Wiki:命令行选项。
对于所有对Rubinius源代码感兴趣的人,Sam Aaron有一篇有关如何在Mac OS X下查看Rubinius源码的文章值得参考一下,文章里收集了一系列相关链接和操作指南。一方面,对于新手而言,Rubinius的源代码管理系统可能会有些令人困惑。在体验了一段时间Subversion之后,该团队目前已经改用了Git。Git是一个分布式代码管理系统,由Linus Torvalds开发,原本是用于Linux内核开发的,但是现在采用这个系统的项目也在不断增加。分布式代码管理系统人气越来越旺了,因为它们让代码分支变得更容易,而代码分支可以让实验变得很简单。
要想了解如何使用Rubinius入手,请参考Rubinius网站上的“使用Git”页。正如Sam Aaron所指出的,一旦Rubinius被检出之后,使用Git来保持和Rubinius最新开发进度的同步,是非常容易的:
进入你的Rubinius所在目录,并敲入以下指令:
git pull ; rake build