IronPython 2.0では内部構造の総入れ替えが行われていることは分かった。またそれが、DLRという言語エンジンの上に構築されていることも分かった。では、具体的にどんなことが可能になっているのだろうか?
その一端を、Silverlight 1.1αを使って検証してみよう。早速、Silverlight 1.1 Alpha for Windows、Microsoft .NET Framework 3.0 再頒布可能パッケージのインストールを行ってほしい。
また、後述するC#コンパイラ(csc.exe)を利用するには、「Microsoft .NET Framework 2.0 SDK 日本語版(x86)」、「Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components」のどちらかをあらかじめ導入しておく必要がある。
SilverlightとDLRの初歩
ここでは、Silverlightを動かす簡単な画面を作成する。画面作成には、Expression Blend 2 May Preview(英語版)をインストールして使うと良い。
以下の画面は、Expression Blend 2上で、新規にSilverlight Application(JavaScript)プロジェクトを作成し、単純なテキストボックスを貼り付けた様子である。
これを保存すると、以下のファイル群が作成される。
生成されるファイル群 |
このテキストボックスをクリックするたびに、メッセージを変化させるプログラムをIronPythonで作成してみよう。
まず、Scene.xamlを以下のように修正する(太字の修正部分に注目)。
修正前
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640" Height="480"
Background="White"
>
<TextBlock Width="320" Height="408" Canvas.Left="152" Canvas.Top="24" Text="TextBlock" TextWrapping="Wrap"/>
</Canvas>
修正後
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640" Height="480"
Background="White"
>
<x:Code Source="Default.xaml.py" Type="text/ironpython" />
<TextBlock Width="320" Height="408" Canvas.Left="152" Canvas.Top="24" Text="TextBlock" TextWrapping="Wrap" x:Name="text1" MouseLeftButtonDown="OnClick"/>
</Canvas>
次に、Default.xaml.pyという名前のIronPythonプログラムを記述する。
from datetime import *
def OnClick(sender, e):
text1.Text = "%s\n%s: %s" % (text1.Text, datetime.now().strftime("%H:%M:%S"), "Hello MYCOM")
上記のプログラムを実行した例を、以下に示す。
先のプログラムの動作を簡単に解説する。
- Scene.xamlがロードされる時、
タグ内に記述された、Default.xaml.pyがIronPythonの制御プログラムとして読み込まれる - Scene.xamlのテキストボックス(
text1
という名前)の上でマウスを左クリックすると、IronPythonで記述されたOnClick関数が呼ばれる - OnClick関数内で、テキストボックスの値(
text1.Text
)を操作し、”Hello MYCOM”とクリックした時間を出力する
ここまでの流れを見ると、WebブラウザおよびJavaScriptで記述するクライアントスクリプトのソースコードとそう大して変わらないことが分かる(HTMLがXAMLになり、JavaScriptがIronPythonになったと思えばよい)。