[MD3] 動的言語について1

MD3でご説明したDynamic Languageですが、論点は大きく2種類に分類できます。

  1. リリース済みの言語
  2. Dynamic Language Runtime対応の言語

・リリース済みの言語
  IronPython(1.0、1.0.1、1.1)とWindows PowerShell 1.0がリリースされている動的言語(スクリプト言語)として説明しました。それぞれのl特徴として言語レベルのリフレクションを持ち、実行時にオブジェクトを拡張できるという特徴を持っています。Pythonでは、setattr()、getattr()、hasattr()関数などを持ち、関数デコレータによる関数(或いは、メソッド)の拡張とメタクラスによるクラス拡張をサポートしています。
 PowerShellでは、PowerShellオブジェクト(PSObject)を使うことで実行時にプロパティ・メソッドを拡張できます。またGet-Memberコマンドレットなどによるリフレクション機能をサポートしています。トリッキー(?)な特徴として、関数呼び出しに丸カッコが不要な点があります。たとえばnewという関数を定義して、「$a = new 引数」というオペレータのような記述ができます。これは関数なのですが、独自のオペレータを定義したように見せられるという特徴にも繋がっています。

・Dynamic Language Runtime(DLR)対応の言語
 4月に行われたMIXというイベントでSilverLightとともに発表された.NET Frameworkに対する動的言語向けの拡張フレームワークです。このDLR対応で試すことができるCTPが公開されています。

上記の3種類がDLR対応の言語として、Python、Managed JScript(JSX)を試すことができます。MIXで発表された言語としては、Managed VisualBasic(VBX)、IronRubyがあります。そしてDLRそのもののソースコードがIronPython 2.0アルファ1に含まれていますので、自分で色々と試すことができます。

・ASP.NET Future
 MD3でお見せしたデモですが...済みません。勘違いしていて、しょうもないエラーが多発してしまいました。原因は「 <% Title %> 」にありました。インラインコードを「 <%=Title %> 」とすべきなのですがイコールを忘れていたために、正常に動作しませんでした(緊張していました。多分...)。言語をIronPythonで作成した場合のコードビハインドファイルですが、デフォルトでは日本語を記述できません(例えば、u'日本語')。このためunicodeの16進数表記を使用します。コードビハインド ファイルのエンコードをUTF-8などに変更すれば、u'日本語'の表記を使うことができるようになります。
 他の言語との連携ですが、PythonでJScriptを使用するには以下のようなコードを記述します。
import clr
j = clr.Use('JScriptファイルへのフルパス', 'js')
これで変数「j」を経由して、JScriptの関数などを呼び出すことができます。JScriptからPythonのコードを利用するには以下のようなコードを記述します。
p = LoadModule('Pythonファイルへのフルパス(拡張子除き)', 'py')
これで変数「p」を経由して、Pythinで定義された関数やクラスを呼び出すことができます。UseメソッドやLoadModule関数の第2引数が、言語の識別子です。現状でサポートしている識別子は、「py」「js」「vbx」「rb」のようです。 

今回は、ここまでとします。次回は、シェアードObjectの話を含めてまとめたいと思います。