コルーチン(co-routine)

Microsoft.Netのアプリケーションにスクリプト機能を埋め込みたくなった。

ぐぐるとDLRとかIronPythonとかSilverLightとかキーワードが出てきた。SilverLightはアプリケーションに埋め込むにはライセンスの問題があるようだし、IronRubyはリリースがまだないし実用にはまだムリだろうな…。今だとIronPythonの2.0alphaあたりを使うことになるんだろうか。しかしMicrosoft.Scripting.dll のソースを見るとyieldはまだ入ってない感じだった。

そう、状態を扱うアプリケーションなのでそのスクリプト機能にはコルーチン(co-routine)が欲しい。yieldすると関数の実行状態を保存して呼び出し元に返る機能だ。 http://developer.mozilla.org/ja/docs/New_in_JavaScript_1.7#.E3.82.B8.E3.82.A7.E3.83.8D.E3.83.AC.E3.83.BC.E3.82.BF.E3.81.A8.E3.82.A4.E3.83.86.E3.83.AC.E3.83.BC.E3.82.BF

PythonJavaScript 1.7 の generator がかなりそれに近いんだけど、ちょっと不便な点がある。yieldが中断するのはそれが書かれた関数と決まっているのでコルーチンAが別の関数Bを呼び出してその中でコルーチンAをyieldすることができない。うーん、コールスタックの中からyieldしたい対象を選べたら便利なんだけどな。

というか、Microsoft.Scripting.dll に構文ツリーをステップ実行する機能があれば全部解決するんだけどどうもないみたいだ。ちぇ。