DLR プロジェクトの状況 2010年1月時点

久し振りにDLRの状況を記述したいと思います。2010.1時点では、以下のようなものがリリースされています。

Visual Studio 2010 ベータ2と合わせて試すのなら、IronRuby 1.0 CTP for .NET 4.0 Beta2 がお勧めです。その理由は、.NET Framework 4.0 ベータ2に同期した IronRuby と IronPython のバイナリが含まれているからです。

また、結構前からになります DLR を使った言語サンプルとして SymPL が以前に提供されていたToyLanguage に替わって提供されています。SymPLには、2種類の実装が提供されています。

  • charp:ExpandoObjectなどを使った言語実装です。
  • charp-cponly:DLR対応のホスティングサンプルです。

SymPLの実装方法自体は同じなのですが、ホスティング方法の違いで2種類が提供されています。DLR 対応として DLRホスティング可能なサンプルとしては、charp-cponlyをお勧めします。DLRホスティングの方法としては、以前に私が公開した MyCalc基本的な考え方は同じです。.NET Framework 4.0 ベータ2 対応の環境で異なるのは、以下の点です。

  • ネームスペースの変更:System.Dynamicなどへの対応
  • ScriptCode クラスが抽象クラスになった

特にScriptCode クラスが抽象クラスに変更されたことは重要で、LanguageContext クラスの CompileSourceCode メソッドの実装に影響します。CompileSourceCode メソッドの戻り値は、 ScriptCode のインスタンスとなります。よって、ScriptCode クラスを継承した実装クラスを記述する必要があります。実装する上で注意点は、以下のような点だと考えます。

  • コンストラクタ:Ast などのインスタンスを保持するようにする。
  • Run メソッド:オーバーライドするメソッドですが、このメソッドがスクリプトの実行時に呼び出されます。したがって、コンストラクタで保持した Astなどを 実行して、実行結果を戻すように実装する必要があります。

上記の変更を加えれば、以前に私が公開した MyCalcを .NET Framework 4.0 ベータ2で動作させられるようになります。

PS. IronRuby プロジェクトをリードしていた John Lamですが、リードを Jimmy Schementiと交代しました。彼は、このエントリの中で IronRuby チームを離れるのは簡単じゃなかったと述べると同時に、IronRuby プロジェクトは 1.0 リリースに向けて前進していると述べています。私自身も何回か John に会って話をしたり質問をしたりしていましたので、彼が離れることは残念でなりません。が、新しい役割で Johnが頑張ってくれることを期待もしています。Congratulations , John. Thank you very much.