2008年11月2日日曜日

Silverlight 2 for MobileはDLRをサポートしない?

SharpLab.さんの「Windows MobileとSilverlight 2絡みの話題について訂正・追補と落穂拾い」に、
Silverlight2 for MobileではIronPythonやIronRubyを動かすための基盤であるDLRがサポートされないとのこと。MSはSilverlight2が バラバラになるのを避けたいと考えているから、と説明されていますが、よくわかりません。
との記述があったので調べてみたのですが、Jimmy Schementi氏(MSのDLRチームのPM)の元記事へのコメント
Clarifying DLR support
By Jimmy Schementi Posted Friday 31st October 2008 23:44 GMT
Is correct that Silverlight for Mobile does not support the DLR today, since the Reflection.Emit namespace is not in the .NET Compact Framework. However, I'm making changes to the Silverlight integration for IronRuby and IronPython to let them run in interpreted-mode, which will not depend on Reflection.Emit. Once that happens then applications that run in interpreted mode can run on Silverlight Mobile. This will be in the next release on http://codeplex.com/sdlsdk.

と、Twitterでのつぶやき
@toddogasawara so it *should* work when/if the DLR interpreter doesn't depend on ref.emit

@toddogasawara cf doesn't have ref.emit, which the DLR compiler depends on. However, the DLR interpreter *could* run on it

を読んだ限りでは、
  • .NET Compact Frameworkには Reflection.Emit名前空間がないので、Silverlight for MobileではDLRのフルサポートはできない。
  • ただし、DLRでRefrection.Emitが必須なのはCompilerなので、Interpreterは依存しないようにする事もできる。
  • これについては、Silverlight Dynamic Languages SDKの次のリリース(0.5.0?)で対応するつもりだ。
という話のようです。ちょっと気になるのは、
  • Silverlight 2のCoreCLRは .NET FrameworkのCLRとは独立しているので、Silverlight 2の実行環境は .NET Frameworkのインストールを必要としないが、Silverlight 2 for Mobileは .NET Compact Frameworkのインストールを必要とするのか?
  • Compilerを使えるDLRと使えないDLRでアセンブリが変わるのか? シナリオとしては、
    1. Silverlight 2用のDLRとSilverlight 2 for Mobile用のDLRとして同一のアセンブリを利用できる
    2. DLRのCompilerが別のアセンブリに分離される
    3. Silverlight 2用のDLRとSilverlight 2 for Mobile用のDLRが別のバイナリになる
    の3択のはず。
の2点でしょうか。

.NET Frameworkは、DLL Hell問題を解決したのが長所らしいのですが、ExtensionAttribute Hellの件といい、今回の件といい、実行環境に依存した問題が続くとちょっと不安になりますね。

(追記 2008/11/03)
SharpLab.さんから、「Silverlight 2 for Mobileは .NET Compact Frameworkのインストールが必須要件のようです。」とのフォローがありました。
カメラ入力やスタンドアロンアプリケーションとしての実行等、将来のSilverlightで追加が予想されている機能をある意味先取りしているSilverlight 2 for Mobileが、独自のCoreCLRではなく、.NET Compact Framework CLRを採用するというのは、Silverlightの今後を予想する上で興味深いですし、採用を決定したのはSilverlight for Mobileのリリーススケジュールの遅延の原因なのか、結果なのか、それとも関係ないのか?という点でも考えさせられます。