WebAssemblyはスタックマシンではない

WebAssemblyの仮想マシン設計に関する記事で、WebAssemblyが従来の意味での純粋なスタックマシンとは異なる特性を持つことについて論じています。WebAssemblyは確かにスタックベースの命令セットを採用していますが、CPU命令セットアーキテクチャの観点からは、レ...

WebAssemblyの仮想マシン設計に関する記事で、WebAssemblyが従来の意味での純粋なスタックマシンとは異なる特性を持つことについて論じています。WebAssemblyは確かにスタックベースの命令セットを採用していますが、CPU命令セットアーキテクチャの観点からは、レジスタベース設計との根本的な違いがあります。

特に注目される点は、WebAssemblyが従来のスタック操作命令(dupやrot)を完全には備えていないという設計選択です。一見すると欠陥に思えるかもしれませんが、実装の観点からはむしろ利点として機能します。

WASM to Cコンパイラの実装経験によれば、WebAssemblyのスタック動作の予測可能性により、式の構築を常に保証でき、スタック値の破棄やリセットが不要になります。これにより、すべての値が関数内に整理された形で留まり、非常にクリーンな実装が実現されます。

さらに、このスタック設計はテキスト形式(WAT)での表現を優れたものにしており、S-Expression形式での直感的な表現を可能にします。つまり、WebAssemblyの設計は従来のスタックマシンとは異なるものの、実装効率とテキスト表現性の観点から優れた特性を持つという重要な指摘です。

HNの反応

コミュニティからは、WebAssemblyの設計に関する指摘が実装経験に基づいた深い洞察として受け取られており、むしろこの非標準的な設計がコンパイラ実装やテキスト形式での表現に実用的な利点をもたらすことが強調されています。

注目コメント

「WASM to Cコンパイラを実装しようとしているのですが、このスタック動作の特性があるおかげで、常に式をビルドすることが保証でき、スタック値を破棄またはリセットする必要がありません。すべてがその関数内に留まるため、非常にクリーンです。これはWAT(テキスト形式)がとても素晴らしい理由の一つだと思います。S-Expressionで表現できるからです。」— @stevefan1999

元記事を読むHN討議を見る