■
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を聴きながら開発。