動的言語ランタイム(どうてきげんごランタイム、、略称 : DLR)は、共通言語ランタイムの上で動作する、様々な異なる動的言語のために次のような言語機能を提供するためのマイクロソフトによる技術である。 動的型システム 動的メソッドディスパッチ 動的コード生成 ホスティングAPI PythonやRubyのような動的言語を.NET Framework上に実装することを意図したものである。例えば、具体的な処理系としてはIronRuby、IronPython 2.0、動的Visual Basic .NET(VBx)、マネージJScriptなどで使われている。

複数の動的言語の実装が共通の基盤となるシステムを持つことにより、異なる言語の実装同士の相互作用が簡単になる。たとえば、任意の動的な言語のライブラリを他の言語から使用可能になる。さらに、ホスティングAPIによりC#およびVisual Basic .NETといった静的に型付けされたCLI言語との相互運用が可能になる。

DLRの歴史 マイクロソフトの動的言語ランタイムプロジェクトは、MIX 2007 の際マイクロソフトによって発表された。 マイクロソフトは.NET DLR 0.9ベータ版を2008年11月26日に発表しhttp://www.codeplex.com/dlr、2008年12月10日に最終版0.9を発表した。バージョン1.0は2010年4月16日に発表された。2010年7月16日に、マイクロソフトはDLRのライセンスをMicrosoft Public LicenseからApache License v2.0に変更した。http://dlr.codeplex.com/licenseさらに.NET 4のリリースに伴い、2010年4月にも、DLRは.NET Framework自体に編入された。https://learn.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview?redirectedfrom=MSDN

CodePlexの主催によるオープンソースDLRプロジェクトは、言語実装のために追加された機能がいくつかあるが、2010年リリース以来プロジェクトは活動していない。そのプロジェクトでは、IronRuby用のマイクロソフト開発者を含む、.NET Frameworkの動的言語に対するマイクロソフトからの参加の不足を補う物へのリンクも利用できた。

サポートされる言語 DLRサービスは現在IronRubyの開発バージョン、Ruby言語の.NET実装、そしてIronPythonで使用されている 2007年に、マイクロソフトは来るVisual Basic 2010 (VB 10.0)およびマネージJScript (ECMAScript 3.0) 向けにDLRを使用することを計画した。 しかしながら、2009年の8月現在、マイクロソフトはDLR上のマネージJScript (ECMAScript 3.0) を実装するためのプランを何も発表しておらず、

C#のように、Visual Basicは、IronPythonおよびIronRubyといったDLR上でビルドされた動的言語からオブジェクトにアクセスすることが可能である。https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/interop/walkthrough-creating-and-using-dynamic-objects?redirectedfrom=MSDN#Y480

Windows 8にリリースされたPowerShell 3.0は、DLRを使用するためにアップデートされた。

来るScheme実装であるIronSchemehttp://www.codeplex.com/IronSchemeは、DLR上でビルドされることが計画されていた。使用されるDLRブランチプロジェクトがトランクと共に同期から外さるようになり、さらにその当時におけるDLRのカレントバージョンがSchemeの要求の大半をサポートしていなかったため、このアイデアは棄却された。

アーキテクチャ 動的言語ランタイムは、言語から独立した汎用の抽象構文木上に、言語固有の部分を実装可能であるという考え方に基づいている。構文木上の各ノードは大半の動的言語で共通の機能に対応している。

このアーキテクチャは、汎用のスタック上に実装される基本的な言語の構造は少ない数であるべきという考え方に基づいている。

DLR はこれらのノードで表現されたコードを動的に生成する。 DLR 上に実装された任意の動的言語向けのコンパイラは DLR の抽象木を生成し、これを DLR のライブラリに引き渡す必要がある。

DLR はメソッドをオブジェクトにバインドし、動的に更新される DynamicSite オブジェクトを提供する。動的言語とオブジェクトの型は、プログラムの寿命の内に変化できるため、メソッドの呼び出しにはメソッドの一覧をチェックし、呼び出しが正しいかを確認しなければならない。DynamicSite オブジェクトはオブジェクトとメソッドの状態をキャッシュし、オブジェクトに対する更新動作はDynamicSite オブジェクトにも反映される。DLR はすべてのメソッドの呼び出しをDynamicSite オブジェクトに回送し、DynamicSite オブジェクトは次に現実の実装におけるメソッドの検索とバインドを行う 。

Java仮想マシンの中核部分に動的プログラミング言語のサポートを追加しようとするDa Vinci マシンなどの試みとは対照的にDLR は既存の共通言語ランタイムと.NET Framework仮想マシン上に構築されている.

脚注

関連項目 Da Vinci Machine、サン・マイクロシステムズ(現在のオラクル)がJava仮想マシン (JVM) 上にJavaプラットフォームの動的言語としてサポートしていたプロジェクト。