WebAssembly のWikipediaページを読んでいたところ、「WebAssemblyは…JavaScriptよりも高速に解析できるように設計されています 」、私は考えさせられました、特定の言語またはデータ形式が他のものよりも速く解析するのはなぜですか、そしてどの解析アルゴリズムが使用されていますか?
このトピックは非常に複雑です。パーサーアルゴリズムをググると、詳細な資料がたくさん得られます。
一般に:
例えば:
JSパーサーがこのコードでfunction
キーワードを見つけた場合、function xyz(a, b) {}
の場合、関数キーワードがあいまいです。それは最初に次のトークンxyz
を処理して、それが関数宣言であると判断する前に識別子であることを確認する必要があります。
ただし、次のトークンが_(
_の場合は、関数リテラルfunction(a, b) {}
を処理しています。そのため、パーサーの動作が大きく異なるため、パーサー内のコードが多くなり、実行が遅くなります。
これら2つの目的に異なるキーワードがあった場合でも、あいまいさはありません。
function_decl xyz(a, b, c) {}
およびfunction_lit(a, b, c) {}
しかし、誰もそのような言語で書きたくないでしょう。ただし、WebAssemblyは手動で作成することを想定していません。これにより、言語を人間ではなく機械に合わせて調整できます。