ParseTree前路茫茫

ParseTree是一个用来访问Ruby代码解析树的程序库,这个Ruby代码可以是源代码,也可以是已经加载到解释器的代码(即实时访问)。
ParseTree的开发者之一,Ryan Davis,在最近的一篇博客中宣布了ParseTree的去留:

ParseTree在ruby 1.9上已经玩完了,我们也没打算让它在ruby 1.9上再运行起来。

主要原因在于ruby 1.9内部实现的改变,我们也试图获取一些钩子或者能让ParseTree工作的其它方法,但迟迟没有得到回复。

如果你想用ParseTree来获取一个运行时方法/块/过程的抽象语法树,那么我们只好说抱歉了。如果你只是想用ParseTree来做静态分析,那么你可以在一分钟内切换到ruby_parser,它是ParseTree的一个最佳替代者。


所以我们看到,ParseTree在Ruby 1.8.x上能很好地工作,但它不再提供对Ruby 1.9.1的支持。尽管我们也能通过一些办法,让ParseTree的部分功能工作起来。幸运的是,Ruby 1.9.x带来了Ripper,一个用来解析Ruby代码和分析语法树的工具。

ruby_parser是Ryan Davis编写的另一个Ruby语法分析器,它是纯Ruby实现的,并且在输出上和ParseTree保持一致。如果只是对源代码进行静态分析,那么最好的选择就是切换到ruby_parser,因为你不需要更改任何代码。Ruby_parser还能提供抽象语法树节点的源码位置,这是Ruby代码分析或者代码转换工具的必需信息。使用ruby_parser可以让这些工具得以在大多数Ruby实现上工作,而ParseTree只能在MRI上工作(虽然在一个接近完成版本的JRuby上也可以,但还是缺少一些运行时特性)。

但跟ruby_parser相比,ParseTree有一个重要特性,就是能实时访问解析树。有些库利用这个特性来对运行时Ruby代码进行分析。比如Merb的action arguments,一个用来分析方法形参的工具。这个功能已经被移植到JRuby上(无需ParseTree),往Ruby 1.9.1上的移植也已经通过methopara项目完成。Methopara是YARV创建者Sasada Koichi和asakusa.rb(一个东京的Ruby用户组)的成员们共同完成的。Methopara项目给Ruby 1.9.1带来了新的API:

这个gem只提供给Ruby-1.9.1。因为Ruby18x已经拥有merb-action-args,而Ruby-1.9.2和它的后续者将会内置Method#parameters。

那么,你是否在使用ParseTree呢?如果是,你可以用ruby_parser来做替代么?如果不行,ParseTree在Ruby-1.9.x上的不可再用是否给你带来了很大的困扰呢?

查看英文原文:The Future of ParseTree

你可能感兴趣的:(ParseTree前路茫茫)