2012-03-25 9 views
3

私は2つのデザインの背後にある技術的な概念を理解していますが、バイトコードインタープリタを一般的にはるかに速くするものは何ですか?良い本がある、誰かが私を指すことができますか?バイトコードインタープリタをast歩きインタープリタより速くするには?

+1

なぜなら、ASTを歩くには、再帰的な関数呼び出しが多少高価になることがあります。バイトコードインタープリタは、通常、単なるループであり、ある種のジャンプテーブルです。 –

答えて

5

最も明白な理由は、ASTは通常高すぎるレベルですが、バイトコードのセマンティクスは実行するのが簡単ではないということです。 ASTウォーキングインタプリタで最も遅いのは通常、コンテキストルックアップです。すべての変数、引数などは名前で参照されますが、バイトコードでは通常は取り除かれ、レジスタ番号やスタック操作が代わりに使用されます。

もちろん、バイトコードは、フラットでシンプルな「AST」と、場合によっては最適化された「ウォーカー」(スレッドコード変換など)を使用したASTウォーキングの特別なケースと考えることができます。アドホックASTと高度に特殊化されたバイトコードとの間には、例えば、機能的言語を解釈するためにAST構造を保持するが、変数名をDe Bruijnインデックスに置き換えるなど、多くの可能な状態が存在する。

関連する問題