yarv-dev:170
From: Hiroki Asakawa <ml asakawa.net>
Date: Sun, 5 Sep 2004 22:34:46 +0900
Subject: [yarv-dev:170] Ruby.NET コンパイラについて
こんにちは淺川です。
過去ログを読んで Ruby.NET コンパイラに対しての
質問に答えたいと思います。
なぜ作るか?
コンパイラを作るのが楽しいから。
今後 .NET の時代になるから。
何を作るか?
Ruby でかかれたプログラムを .NET CLR (.NETのVM)で動く
CIL(.NETの中間言語、MSIL)にコンパイルするコンパイラ
どうやって作るか?
C++.NET で、一からつくります。Ruby.NET コンパイラ自体が
単体で .NET CLR で動くようにするためです。
Parser の yacc 定義は ruby の物を頂いています。
既存のライブラリとの互換性
Cで書かれた拡張ライブラリはすべて使えません。
その代わりに 豊富な.NET Framework ライブラリが使える。
Ruby.NET では、ほかの.NET言語との連携を重視します。
たとえばC#からRuby.NETのクラスを継承したり、
Ruby.NETで発生した例外をC#でキャッチしたりできるようにします。
そのため.NETの共通言語仕様に従うCILを生成します。
GCや例外処理等、.NETのものを使用します。
このためにRubyと完全には同じではない動作をするのは
やむなしと考えます。それよりは、コンパイラ型のよさ、
.NET言語のよさを生かせるような設計をします。
.NETのJITコンパイラに期待して、本格的な最適化はしません。
eval を実装しようとは考えていません。
evalしたいんだったらスクリプト言語を使えばいいと考えます。
Ruby.NETはRubyではないと怒られてしまいそうですが。。
今のところの問題は、
require filename
で filename が実行時に変わる場合に対応する方法がどうしても
思いつきません。
class Child < Parent
end
ここで Parent の型が完全に特定できないと.NET言語使用に基づくクラスを
作成することができません。
現在の完成具合はパーサが8割ほどできている程度です。
まだCILコードの生成には手を付けていません。
w
Σ+ )_ Hiroki Asakawa
〜〜( __/〜 mailto:hiroki asakawa.net
〜〜〜〜〜 http://www.asakawa.net
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
-> 170 2004-09-05 22:34 [ml asakawa.net ] Ruby.NET コンパイラについて 173 2004-09-08 17:35 ┗[ko1 atdot.net ]