Welcome to MSDN Blogs Sign in | Join | Help
[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の話を含めてまとめたいと思います。

Posted: Wednesday, June 20, 2007 12:56 PM by shozoa
Filed under: ,

Comments

荒井省三のBlog said:

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

# June 27, 2007 1:41 AM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker