3
私は2つのデザインの背後にある技術的な概念を理解していますが、バイトコードインタープリタを一般的にはるかに速くするものは何ですか?良い本がある、誰かが私を指すことができますか?バイトコードインタープリタをast歩きインタープリタより速くするには?
私は2つのデザインの背後にある技術的な概念を理解していますが、バイトコードインタープリタを一般的にはるかに速くするものは何ですか?良い本がある、誰かが私を指すことができますか?バイトコードインタープリタをast歩きインタープリタより速くするには?
最も明白な理由は、ASTは通常高すぎるレベルですが、バイトコードのセマンティクスは実行するのが簡単ではないということです。 ASTウォーキングインタプリタで最も遅いのは通常、コンテキストルックアップです。すべての変数、引数などは名前で参照されますが、バイトコードでは通常は取り除かれ、レジスタ番号やスタック操作が代わりに使用されます。
もちろん、バイトコードは、フラットでシンプルな「AST」と、場合によっては最適化された「ウォーカー」(スレッドコード変換など)を使用したASTウォーキングの特別なケースと考えることができます。アドホックASTと高度に特殊化されたバイトコードとの間には、例えば、機能的言語を解釈するためにAST構造を保持するが、変数名をDe Bruijnインデックスに置き換えるなど、多くの可能な状態が存在する。
なぜなら、ASTを歩くには、再帰的な関数呼び出しが多少高価になることがあります。バイトコードインタープリタは、通常、単なるループであり、ある種のジャンプテーブルです。 –