DLR プロジェクトの状況 2010年1月時点
久し振りにDLRの状況を記述したいと思います。2010.1時点では、以下のようなものがリリースされています。
- IronPython 2.6 (2009.12.11)
- IronPython 2.6 CTP .NET 4.0 Beta2 (2009.10.21)
- IronRuby 1.0 RC1 (2009.11.20)
- IronRuby 1.0 CTP for .NET 4.0 Beta2 (2009.10.21)
- DLR 0.92 (2009.10.22)
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.