[前][次][番号順一覧][スレッド一覧][生データ]

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       ]