これに賛成。ツールは10年経ってもまだ整ってない。 - 既存のCコードベースをWebAssemblyにコンパイルするための主なツールチェーンはEmscripten。まだ技術デモの起源から抜け出せてなくて、コンパイラフラグやジャンクなポリフィルの巣窟になってる。全ての実装が半分完成した状態で少なくとも3つある。セマンティックバージョニングに従ってないから、ポイントリリースごとに壊れる変更が出やすい。 - 「モダン」なツールチェーンであるwasi-sdkは、もっとベアボーンな状態。使えるレベルにはなってきてるけど、プリコンパイルされたlibcとlibc++が-O3を使っているから、自分では使えない。Emscriptenはsysrootを再コンパイルしてキャッシュして、-Ozを使うように指示できるから。これでコードサイズが増えてしまう。すでにかなり大きいのに。 - LLVMは最適化されたWebAssemblyバイトコードを出力するのがまだまだ苦手。 - エンジンもWebAssemblyバイトコードを最適化された機械コードにコンパイルするのがあまり得意じゃない。 - デバッグ情報は、あなたが言ったように、完全に混乱してる。 - RustのWebAssemblyツールは今や生死の境をさまよってる。rustwasmのGitHub組織は、数年間の活動停止の後、2025年中頃に「日没」される予定。 - 2026年の今、JavaScriptからWebAssemblyモジュールをクロスプラットフォームでインポートする公式な方法はまだない。ブラウザにデプロイしてViteや生のESモジュールを使う場合、WebAssembly.instantiateStreaming(fetch(new URL('./foo.wasm', import.meta.url)))を使ってトップレベルのawaitを食べることができる。Viteはnew URL('...', import.meta.url)パターンを認識して、ビルド出力にアセットを含めるけど、他のバンドラー(例えばRollupやesbuild)はそうじゃない。Node上ではこれができない。なぜなら、fetchがローカルファイルには使えないから。ほとんどの人は諦めて、WebAssemblyバイナリを巨大なBase64文字列として埋め込むことになる。これでファイルサイズが33%増えて、圧縮率も大幅に下がる。 - マルチスレッドのWebAssemblyが欲しいなら、SharedArrayBufferにアクセスするためにCOOP/COEPヘッダーを設定する必要がある。GitHub Pagesはこれを許可していないけど、これは3番目に多くのアップボートを受けている機能リクエストだ。サービスワーカーをインストールするジャンクな回避策があるけど、その回避策がPWAとどう絡むかは全く不明。WebAssemblyが初めて出荷されてからの8年間で、ツールの状況が「技術デモ」を超えて進化していれば、もっと多くの人が使っていただろう。