マイクロソフトのSilverlight 2では、一般的なVisual BasicやC#のほかに、RubyやPythonなどのLightweight Languageを使うことができる。Dynamic Language Runtime(DLR)が組み込まれているからだ。
.NET Framework上のプログラミング言語といえばVisualBasicやC#が一般的だが、Lightweight Language(LL:軽量言語)と呼ばれるスクリプト系の言語も使用できる。現在、IronPython、IronRuby、PowerShellが.NET Framework上のプログラミングに対応しており、このほかにもIronSchema(LISP)、Phalanger(PHP)などのプロジェクトが進行中だ。
PowerShellとIronPythonの1.x系は.NET Framework 2.0以上で、IronPythonの2.x系とIronRubyは.NET Framework 2.0 SP1以上で動作する。
こうしたスクリプト系言語を.NET Frameworkで使用する際に、中心的役割を担うのがDynamic Language Runtime(DLR)だ。
DLRは、.NET Framework実行環境であるCLR(Common Language Runtime)と言語の間に位置し、通訳するような役割を持つ。つまり、DLRはいわゆる言語エンジンのようなもので、抽象的なレベルで言語に必要な機能を用意し、.NET Frameworkに対応付けている。そのため、言語実装者は単純に独自言語の機能とDLRの機能を対応付けるだけでよい。
DLRは.NET Frameworkの中間言語に対応するAbstract Syntax Tree(AST:抽象構文木)を持っているので、構文解釈などは言語実装者が記述する必要があるものの、独自言語のASTとDLRのASTを対応付けるだけで、独自言語を.NET Framework対応にできるようにしている。
また、DLRは変数やインスタンスを管理するためのシンボル辞書も持っている。言語エンジンとなるDLRのレベルでシンボル辞書を持つ意義は大きい。言語非依存のオブジェクトインスタンスを保持できるようになるからだ。つまり、言語をまたがってオブジェクトを共有できるようになるのだ。
ほかにも、DLRはCOM相互運用に対応しているため、独自言語からCOMを呼び出すなどの処理を実行できるようになる。もちろん言語実装者がこの機能を言語に実装するかどうかにかかっているが、例えばExcelを独自言語でコントロールするようなことも可能になる。
Copyright © ITmedia, Inc. All Rights Reserved.