Steve Sanderson氏のBlazorは、WebAssemblyを使って.NETをブラウザに連れ戻す実験的なプロジェクトだ。FlashやSilverlightのような完全なプロダクションフレームワークではなく、何ができるのかを調べるためのものだ。
WebAssemblyは自らを「既存のJavaScript仮想マシン内で実装することもできる、メモリセーフでサンドボックス化された実行環境」のためのスタンダードだと説明する。WebAssemblyをネイティブサポートするブラウザではより性能が向上するが、コンバータとasm.jsを使うことで、古いブラウザでも解釈することができる。
今のところ、WebAssemblyはCとC++アプリケーションのサポートを第一として設計されており、clang/LLVMのコンパイラバックエンドとして動作する。CからC#にするため、Blazorは別のリサーチプロジェクトを利用することにした。Chris Bacon氏のDotNetAnywhereは、.NETのCLI(Common Intermediate Language、IL、MSIL)のためのCで書かれたインタプリタだ。DotNetAnywhereプロジェクトは約6年前に終了している。
Blazorでは、DotNetAnywhereに次のような変更を行っている。
- Emscriptenを使ったビルドをサポート
- .NETからJavaScriptへのp/invoke呼び出しをサポート
- GCHandleなどの相互運用プリミティブを追加
- JavaScriptから.NETへのインバウンド呼び出しを受信
- バグ修正
- .NET Coreスタイルのアセンブリのローディングをサポート
Blazorアプリケーションはサーバーではなくブラウザで実行されるRazorテンプレートを使って作られている。ドキュメントによると、シンプルな「Hello world」アプリケーションで、300KBのダウンロードが必要になる。これには「すべてのもの: 小さな.NETランタイム、コアライブラリ、アプリケーションコード、ブートストラップとWebAssemblyコードとの相互運用に必要なラッパーライブラリ」が含まれている。
実際に呼び出されていないコードの削除はしていないため、このサイズはさらに削減可能だ。
実際に見たければ、NDC Conferenceのビデオ(タイトル「Web Apps can’t really do *that*, can they? - Steve Sanderson」)を見てみよう。
Rate this Article
- Editor Review
- Chief Editor Action