Silverlight 2.0 Beta1 におけるDLR

やっとSilverlight 2.0 Beta1が公開されました。そしてラスベガスで行われたMIX08のセッションもストリーミングが公開されています。そしてサンプルの公開も始まっています。まだDLR Consoleのサンプルは公開されていないようですが、個人的には1.1アルファのものを移植して使っています。この移植したサンプルを動かしているのが、以下です。
DlrConsole

Silverlight 2.0で追加されたコントロールを使って作成した電卓になります。上記の中で行っているコードは、以下のようなものです。

 py> import calc2 as x  #モジュールのインポート
js> c = x.Calc(canvas) #Pythonのクラスインスタンスを作成
js> c.setlight()       #メソッド呼び出し
py> x.enliven(canvas)  #イベントハンドラの登録

Pythonで記述されたcalc2モジュールをpythonでインポートして、JScriptでインスタンスを作成し、pythonでイベントハンドラを登録して電卓を作成しました。

言語欄に表示されているものには、Python、JScript以外にRubyもあります。IronRubyの現在の実装では、変数定義はローカルスコープになります。つまり有効なスコープ内で変数定義を使用するのであれば、beginとendで囲む必要があります。そうでなければ、グローバル変数($変数名)として宣言する必要があります。

ベータ1に含まれているDLRは、IronPython 2.0 A8相当と思われます。色々と内容を調べた結果から、このように私は判断しています。まだIronPython 2.0 ベータ1は公開されていませんが、codeplexの状況をみるとA8からベータ1へと続く中間のバージョンのDLRからも知れませんが、機能的には2.0 A8相当だと私は判断しています。
Silverlight 2.0 ベータ1でアプリケーションを作成するには、XAP形式というパッケージを作成します。XAPとは、XAML Application Packageの略で、実態はZIPアーカイブになっています。そしてSDKで提供されるChiron.exeユーティリティでパッケージ化します。このパッケージには、以下のものが含まれています。

  • AppManifest.xaml
  • コードファイル(PythonやRubyなどのコード)
    App.py、App.rb、App.jsなど
  • XAMLファイル
  • DLRなどのアセンブリファイル
  • 各種のリソース

AppManifest.xamlに記述するのは、アプリケーションのエントリポイントと必要とするアセンブリファイル(AssemblyPart)になります。アセンブリファイルは、XAPパッケージに含めても良いですし、URLを記述して含めない方法もとることができます。この辺りは、実際のサンプルを見たほうが、具体的に理解しやすいかと思います。

#余談ですが、DLR Consoleのソースコードを読むとDLRのホスティングの方法を理解することができます。何故なら、複数の言語を実際にホスティングしているからです。