Typing Rubyは,オブジェクト指向スクリプト言語Rubyで記述されたプログラムの型検査を行うためのプログラムです.Rubyプログラムのソースコードを静的に解析し,型エラーが存在しないか検査します.完全な型検査は行えませんが,ある程度でもできればデバッグ・テストの省力化に貢献できるはずです.
Typing Rubyで採用している検証アルゴリズムは,Duck Typingに基づく,Rubyの型システムと互換性が高いものです.また,純粋な(変な拡張のない)Rubyを対象としており,既存のRubyプログラムをそのまま解析できます.
現在のところ,Typing Rubyはアルファ版段階以前です. 非常に自明なプログラムしか検査できないため,実用はできません.
# | ||||
---|---|---|---|---|
01 |
123.hoge() |
ERROR | NO_METHOD_ERROR | Fixnum#hogeというメソッドは定義されていません. |
02 |
x = 123 x.foo() |
ERROR | NO_METHOD_ERROR | 変数への代入がサポートされています. |
03 |
def foo(x) x.hoge() end foo(123) |
ERROR | NO_METHOD_ERROR | ユーザー定義メソッドも処理できます. |
04 |
def foo(x) x.to_s() end foo(123).bar() |
ERROR | NO_METHOD_ERROR | fooはStringのオブジェクトを返します.String#barは定義されていないため,エラーになります. |
現段階では,IfやWhileなどのRubyの構文はサポートされていません.また,インスタンス変数やグローバル変数などもサポートされていません.他のクラスを継承するクラス定義が含まれたプログラムも検証できません.
メソッド定義,クラス定義,メソッド呼び出しなどのみが,サポートされています.
Typing Rubyは無保証のフリーソフトウェアであり,GNU GPL2でライセンスされます.
2005年1月7日現在,まだダウンロードできるファイルはありません. 近いうちにリリースしますので,しばらくおまちください.
開発に利用しているSubversionリポジトリを公開しています. 匿名で最新版のソースコードをチェックアウトすることができます. 開発途中のソースコードですので,コンパイルすらできないことがあると思いますが,ご了承ください.
上記したソフトウェアは,開発環境で用いているものであり,他のバージョンでも正常に動作する可能性があります.
NodeDumpは,Rubyの構文木を出力する,拡張ライブラリです. Typing Rubyでは,Rubyのソースコードを直接解析するパーサを開発することは諦め,NodeDumpの出力をパースしています. NodeDumpの出力は,そのままではocamlyaccでパースしにくいため,松本のハックが加わっています.
以下のコマンドを実行してください.
$ tar xfz nodedump-truby-xyz.tgz $ cd nodedump-truby-xyz $ ruby ./extconf.rb $ make $ su # make install
以下のコマンドを実行して,Typing Rubyをコンパイルしてください.
$ tar xfz truby-xyz.tgz $ cd truby-xyz $ make release
システムにインストールすることはできません.コンパイルしたディレクトリで実行してください.
truby-runコマンドを利用して,実行します.
$ ./truby-run foo.rb
以下のコマンド群を手でタイプしても同じことです.
$ ruby -r NodeDumpT foo.rb | ./truby
松本宗太郎 < soutaro@score.cs.tsukuba.ac.jp >
$Date: 2005-01-22 03:58:54 +0900 (Sat, 22 Jan 2005) $