[MD3]動的言語のオブジェクト共有(4)
DLRを使って複数の言語間でオブジェクトを共有できると既に説明しました。今回は、実際にどのように確認するかを説明したいと思います。現時点では、共有オブジェクトを試すことのできる環境は、ASP.NET FuturesかSilverLight1.1アルファとなります。SilverLight1.1アルファで簡単に試せるのがDLRConsoleのサンプルです。このサンプルは、以下から入手できます。
どちらでダウンロードしてもDLRConsoleのサンプルを入手することができます。このサンプルにキーボード対応を日本語にしたファイルを入れ替えて起動すると以下のようになります。
使用する言語を切り替える毎にコンソールのプロンプトが「py」と「js」で切り替わります。MD3でお見せした内容は以下のようなものです。
・Pythonのクラスを定義する
class pc:
def __init__(self): self.x = "IPY" #コンストラクタ
def pm(self): return self.x #メソッド
次にJScriptに切り替えて、JScriptでクラスを定義します。
・JScriptでクラスを定義する
function jc()
{ this.x = "JScript"; }
jc.prototype.jm = function () { return this.x; }
次にJScriptでPythonオブジェクトとJScriptのオブジェクトを作成します。
・JScriptでオブジェクトを作成する
jo = new jc(); // JScriptオブジェクトのインスタンスの作成
jpo = new pc(); // Pythonオブジェクトのインスタンスの作成
次にPythonに切り替えて、オブジェクトを作成します。
・Pythonでオブジェクトを作成します。
po = pc() #Pythonオブジェクトのインスタンスを作成
pjo = (type(jc)).construct(jc) #Jscriptオブジェクトのインスタンスを作成
PythonでJScriptのオブジェクトインスタンスを作成するのに使用したconstructメソッドは、現状のIronPython実装に依存しています。これは、言語実装者が他の言語との連携をどのようにマッピングするかに依存しています。最終的にIronPythonでの実装がどうなるかは不明ですが、「jc.new」と実装したいのかも知れません。
・SilverLightのXAMLで複数の言語を連携する
SilverLight1.1で複数の言語を利用するには、「code」タグを利用します。具体的には、以下のように記述します。
<x:code source="hello.py" type="text/python">
<x:code source="hello.jsx" type="text/jscript">
これでそれぞれのコードから、自由に呼び出すことができます。
ASP.NET Futuresに関しては、clr.UseとLoadModuleを使用しますので、こちらをご参照ください。