
2026/05/20 21:01
Asm.jsとの決別について
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Firefox 148 は、Web 開発において重要な転換点を示すもので、デフォルトで asm.js の最適化を無効化することにより、13 年間にわたる OdinMonkey の終わりを宣言します。この決定的な動きは、現代的な WebAssembly 標準を優先し、ブラウザエンジンを簡素化させ、複数の実行パスを維持することに関連するセキュリティリスクを減らすことを目的としています。既存の asm.js サイトについては、当初バックアップコンパイラを通じて通常通り動作しますが、该技术は将来のリリースで完全に削除される予定です。開発者は、長期的な互換性と優れたパフォーマンスを確保するため、旧プロジェクトを WebAssembly に再コンパイルすることを強く推奨されます。2013 年(Firefox 22)に導入され、ネイティブ速度でのコード実行を可能にするための前段階として位置づけられた asm.js は、その後より小さいバイナリサイズと堅牢なコンパイル機能を備えた WebAssembly の導入の道を開きました。この移行は、OdinMonkey の時代に対する自然な「ラグナロク(Ragnarök)」を表しており、ウェブパフォーマンスを 1 つでありながらもより安全な標準の下に統合するとともに、完全な廃止が行われる前に開発者にビルドパイプラインのアップグレードを促しています。
本文
アックスの時代、剣の時代、盾の時代は既に過ぎ去り、風の時代、狼の時代も世界が滅びる前に訪れるでしょう。
——『ヴォルスプージ』、『詩篇エッダ』より
Firefox 148 より、SpiderMonkey の asm.js 最適化はデフォルトで無効化され、今後あるリリースでこの機能を完全に廃止する予定です。
asm.js を使用しているサイトの管理者様におかれましてはご安心ください。何ら不具合が生じることはございません。asm.js は単なる JavaScript のサブセットに過ぎませんから、従来の JIT コンパイラを通じて他のスクリプト同様正常に実行されます。ただし、WebAssembly へコンパイルし直すと、より高速な実行と小さいバイナリサイズを実現できます。
歴史的背景
asm.js は Mozilla が「ウェブ上でネイティブ並みの速度でコードを実行する方法は?」という NaCl および PNaCl が提起した問いに対する答えでした。
その着想は巧妙でした。エンジンがリアルタイムに認識し、ネイティブコードへコンパイルできる厳格な静的型付け付きの JavaScript サブセットを選定すればよいと考えたのです。これにより、NaCl/PNaCl と同等のパフォーマンスを維持しつつ、別途サンドボックスや IPC、代替 API を必要とせず、コードがウェブコンテンツ内に存続し、ウェブ API も利用可能となりました。
asm.js は 2013 年に Firefox 22 にて導入され、大成功を収めました。Unity や Unreal のようなプロジェクトが、標準的なウェブ技術のみを用いて C/C++ コードベースを初めてウェブへ配信することを可能にしました。Epic Citadel デモもわずか 4 日間でウェブ向けに移植されました。これは画期的な達成であり、元の asm.js チームにとっては懐かしい思い出となっています。
asm.js は、ウェブ技術をただ用いることで、ほぼネイティブ同等の速度でのコード実行が可能であることを実証しました。それは数年後に Firefox 52 にて導入された WebAssembly の扉を開きました。もし asm.js が存在していなければ、WebAssembly も誕生しなかったでしょう。
なぜ今なのか?
ではなぜ今回のように廃止するのか? それは、WebAssembly が成功を収め、asm.js の利用も大半が移行されつつあるからです。WebAssembly 並行して asm.js のパスを維持することは、メンテナンスコストを増大させ、仮想マシン上の攻撃対象領域を広げるリスクとなります。
asm.js コンテンツをお送り中の皆様には、ぜひ WebAssembly へ再コンパイルを検討することを推奨します。当社の WebAssembly パイプラインは、かつての asm.js パイプラインよりも大幅に進化しています。より高速な実行と小型なバイナリサイズが得られるはずです。
ラグナロク
asm.js コンパイラの名前は「OdinMonkey(オディン・モング)」です。遥か昔から預言された通りに、オディン・モングは運命的な最期を迎えなければなりません。「オディン・モングの黄昏」を追跡するバグの名も「ラグナロク」とされています。
しかし希望を完全に捨てることはありません。なぜならオディン・モングからは BaldrMonkey(バルド・モング)———that is, our WebAssembly optimizing compiler —— が生まれ、再び蘇った世界では RabaldrMonkey(ラバルド・モング、「 commotion」=動乱の意)というウェブアセンブリのベースラインコンパイラと共に治めることになるからです。オディン・モングが狼フェンリルに丸ごと飲み込まれても、バルド・モングとラバルド・モングは再生した世界を共に支配するのです。
このオディンの日(水曜日)、 thirteen 年に亘りお世話になったオディン・モングの皆様に感謝申し上げます。「スカール!」
「未耕の田から成熟した実りが現れ、すべての悪も良くなり、バルドは再び帰還す。
バルドとホトはハロップの戦いの殿で共に住む。」
——『ヴォルスプージ』、『詩篇エッダ』より