[MD3]動的言語のオブジェクト共有(4)

DLRを使って複数の言語間でオブジェクトを共有できると既に説明しました。今回は、実際にどのように確認するかを説明したいと思います。現時点では、共有オブジェクトを試すことのできる環境は、ASP.NET FuturesかSilverLight1.1アルファとなります。SilverLight1.1アルファで簡単に試せるのがDLRConsoleのサンプルです。このサンプルは、以下から入手できます。

  1. SilverLight1.1アルファSDK
  2. Dynamic SilverLight Sample

どちらでダウンロードしても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を使用しますので、こちらをご参照ください。