Iron何とかはもう無視すると決めたので、
昔、開発したインタープリンタをC#で書き直してみた。
CLR仮想マシン上にさらに仮想マシンを構築する形に。C#で作成すれば、こうなるしかない。
しかし、問題が。
イベントハンドラー周りがうまくまとまらない。
Silverlight上のButtonのクリックイベントをスクリプト側でキャッチできない。
で、仕方なく仮想上仮想マシンをやはりCLR仮想マシンで動作するように作り直し。

つまり、できれば誰もが避けたいEmitの世界です。


MethodBuilder mtb = ...
ILGenerator il = mtb.GetILGenerator();
...
il.Emit( Opcodes.Box, typeof(Int32));
il.Emit( Opcodes.Return );

情報は少ないし、難解な分野、、。

作成したスクリプト言語DLLはやはり30kbyteほどにしかならなかった。

また、画面生成のXAMLと画面制御のスクリプトを合成したXMLをサーバからキャッチし、Silverlight上でsplit。分別。
そこで、軽い感じでXml Linqを使用したが、SilverlightのSystem.Xml.Linqは120KByteもあり、_| ̄|◯ < '4倍もある。'
怒り狂いLinqは抹消。

SplitはXmlReaderで地味に処理することに。XAPのサイズは小さくなければ。

この状態で作成されるXAPは30Kbyteもないので、あのDownload中の丸いProgressBarを見ることはないだろう。
スクリプト言語DLLを高機能に振りすぎないように、足りない部分はSilverlight上でstaticな実装をすることで、使えるものができるはず。


連休中にKylie Minogueを聴きながら開発。