-- Views
May 29, 26
スライド概要
超dotnet newの登壇資料です
C#で作るWebAssemblyランタイム > nuskey8/DotWasm 2026/05/29 @日本マイクロソフト品川オフィス 超dotnet new #超dotnet new 1
- @nuskey8 (a.k.a @annulusgames) - 大学生です - Unity・C#・RustのOSS開発やってます #超dotnet new # # 自己紹介 2
- 本来今日話そうとしてた内容の一部です - 標準のdotnet-formatより高速かつ いい感じのフォーマッタ - C#を書くときのQoLが数段上がります 使ってない方は是非 #超dotnet new # # CSharpierはいいぞ 3
# nuskey8/DotWasmの紹介 #超dotnet new 4
- C#実装のWebAssemblyランタイム - WebAssembly 3.0相当のProposalを ほぼ(Thread以外)全て実装! - Threadは実装を忘れてただけなので そのうちサポートします - インタプリタなのでパフォーマンスは そこそこ https://github.com/nuskey8/DotWasm - Unity対応はまだです! 正式リリースまでにはなんとか… #超dotnet new # # DotWasm 5
- JavaScriptに代わる次世代のブラウザ言語 - 中身はスタックマシンなバイトコード - 様々な言語がコンパイル先としてサポート - C/C 、Rust、Go、MoonBit、etc. - C#はBlazorやNativeAOT-LLVMあたりが頑張ってますが 今のところはまあ、はい + + #超dotnet new # # WebAssemblyとは? 6
- WebAssemblyはブラウザで色々な言語を動かすためのものだけではない! - そもそもWebAssmeblyにWebの部分は特にない (ただのちょっと高級なスタックマシンバイトコード) - ポータブルな実行可能バイナリとして運用ができる - ホスト環境に埋め込んでスクリプトやプラグインを実行する用途に使える - 現在はLuaやJS、MRubyなどが強い分野 - Wasmにはセキュアである、特定の言語に依存しないなどの強みがある - 実際にFlight SimulatorやZedなどはadd-on・拡張機能のSDKにWasmを採用 #超dotnet new # # なぜC#でWebAssemblyランタイムを? 7
- C#で同じ試みを行ったプロジェクトは既にある - ruccho/WaaS - WebAssembly 1.0 + Component Modelの実装 - Unityなどでスクリプトとして使う用途に特化 - kelnishi/WACS - C#向けのWasmランタイム・ツールチェーン - Component Model含めほぼ全てのProposalを実装 - CLIからWIT bindegen、Unity対応、WASI、 描画ライブラリなど盛りだくさんですごい #超dotnet new # # 先行研究 8
- Wasmtime(Rust実装のwasmランタイム、 実質的なリファレンス実装)との比較 - WasmtimeはJITなので当然勝てないが インタプリタでもWaaSより低速… - 最適化を頑張ってないわけではないものの、 128x128サイズの画像のグレイスケール変換 色々事情がありまして… - かなり大規模なパフォーマンス改善を 予定しているのでお楽しみに #超dotnet new # # パフォーマンス 9
- WasmGCのサポート - コア仕様ではi32/i64/f32/f64しか扱えず、それ以上は線形メモリの操作が必要 - コンパイラやホストの実装に依存するためポータビリティを損ねる - WasmGCではヒープに確保する構造体や配列の型が定義出来る - ホスト環境とデータのやりとりを容易に - DotWasmはC#実装なので.NETランタイムのGCを使ってかなり楽に実装が可能 - Pure C#な実装 & AOT対応 - FFIではないのでマルチプラットフォーム対応が楽ちん - 動的コード生成をしないのでAOTセーフ、特にUnityのIL2CPPで重要 #超dotnet new # # DotWasmの目指すところ 10
- WasmGC以前からある、リッチな型定義やモジュール同士のimportなどを定義するProposal - WaaSはこれを用いてホスト環境とのやりとりを行う - ただし、仕様があり得ないほど複雑怪奇で巨大 - バイナリの構造からコア仕様のモジュールと大きく異なる - 複数言語をWasm Componentを介して繋げることを目標としている(!) ので仕方ないと言えば仕方ないが… - 後発のWasmGCと噛み合ってない仕様が多い、そもそもなんで型定義の仕様が2つあるねん - 正直かなり厳しいが、WASIなどでComponent Model中心のエコシステムが既に 稼働しているため見直される可能性は低い… #超dotnet new # # vs Component Model 11
# まとめ #超dotnet new 12
- C#でWebAssemblyランタイム作りました! - スクリプトやプラグインなどの用途にもWasmは便利! - 使いどころが多いものではありませんが、是非遊んでみてください…! #超dotnet new # # まとめ 13
# Thank you for listening! #超dotnet new 14