NetWasm は、C# と .NET CIL を WebAssembly に直接コンパイルする、独立した .NET コンパイラ、コアライブラリ、ランタイム、SDK です。他の方式とは異なり、デスクトップ版 CLR、Mono、dotnet.js、アプリケーションの DLL を本番環境に持ち込まないため、生成されるモジュールは小型で単独で動作します。
同一の print-42 ワークロードでの計測比較では、精密な Compact ガベージコレクタを使用した NetWasm が 47,895 バイトの WASI Preview 2 コンポーネントを生成しました。サイズを重視して調整した Rust 1.95.0 のビルドは 53,635 バイトでした。圧縮前の時点で 10.7% 小さく、Brotli-11 で圧縮すると 19.5% 小さくなります。NetWasm の数値は既定の Release 発行によるもので、Rust のビルドには Cargo に文書化されたサイズ設定を追加しています。Binaryen の wasm-opt は、追加のインストールなしで NetWasm のパイプライン内で実行されます。
割り当てとガベージコレクションのベンチマークでは、同じ C# ソースから Mono AOT でコンパイルし、Wasmtime で実行した場合よりも NetWasm の方が高速でした。トランザクション全体の時間は 26%、保持されたオブジェクトグラフの処理時間は 38%、UI の頻繁な生成と破棄にかかる時間は 40% 短縮されました。数値は Apple M1 Max 上での 15 回の実行の中央値であり、各実行はデスクトップ版 .NET の結果と照合されています。
46.7 KiB というベースラインは上限ではありません。NetWasm は C# 15、JavaScript モジュール、Web Workers、静的な .a ファイルとの相互運用、WIT と WASI P2 コンポーネント、式ツリー、HTTP、JSON、XML、Regex ライブラリ、wasm64 に対応しています。通常の dotnet CLI を通じて、プロジェクトのビルド、実行、発行、テストができます。
出典: Hacker News · 要約:HeadlinesBriefing