BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ParseTreeの未来

ParseTreeの未来

原文(投稿日:2009/4/22)へのリンク

ParseTree(参考記事リンク)は、RubyソースコードまたはインタープリタにすでにロードされているRubyコードの、Rubyコードのパースツリーにアクセスすることを可能にするライブラリである。
ParseTreeの陰のデベロッパであるRyan Davis氏は、ParseTreeの未来について記事の中で明らかにしている(リンク)

ParseTreeはruby 1.9で終わり、それを動作させる計画はない。

1.9の内部の変更により、ParseTreeは、動作できない。フック/オプションにより、情報を得られるようにしたが、できなかった。

具体的には、ParseTreeを使用して、ライブメソッド/ブロック/プロセスのASTにアクセスする場合、SOLである。ParseTreeを使用して、静的分析をする場合、 およそ1分の作業でruby_parserに変換することができる。


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のアウトプットはParseTreeの アウトプットと同様である)。またRuby_parserはASTノードのソースロケーションを提供している。それは明らかにRubyでのコード分析また はコード変換ツール(参考記事)にとって必要なものである。ruby_parserを使用することで、またこうしたツールがすべてのRuby実装全体で使用できるよう になる。ParseTreeは、MRIでのみ利用可能である(ほぼ完成したJRubyバージョンがあるが、ランタイム機能が多少欠如している)。

しかしながら、ruby_parserが提供できない機能が1つある。インタープリタにロードされたRubyコードのパースツリーを返すことである。この 機能を利用して、実行時にRubyコードを分析するライブラリがある。それらの1つは、Merbのアクション引数であり、メソッドの正式な引数を検討す る。ParseTreeを 使用することなく、その機能はすでにJRubyに移植された(参考記事)。現在、Ruby 1.9.1へのポートは、methoparaプロジェクト(リンク)で利用可能である。Methoparaは、YARV作成者のSasada Koichi氏およびTokyoのRubyユーザグループの1つであるasakusa.rb(リンク)のメンバーによる取り組みで誕生した。methoparaプロ ジェクトは、Ruby 1.9.1に新たなAPIを実現する(リンク)

このgemは、Ruby-1.9.1専用である。Ruby18xにはmerb-action-argsがあるので、Ruby-1.9.2およびその継承者には、内蔵Method#parameterが組み込まれる予定である。

ParseTreeを使用するか?ruby_parserに切り替えることができるか?または、1.9xでParseTreeがないのは問題であるか?

この記事に星をつける

おすすめ度
スタイル

BT