1

bisonのJSポートであるjisonを使用して、JavaScriptで小さな言語のインタープリターを作成しました。この言語は、式と条件を評価するために使用されます。現在、評価は構文解析と混合されています。

私はそれを最適化しようとしていますが、ボトルネックはレクサーとパーサーです。そこで、事前に解析して、実行時にのみ評価することにしました。

問題は、どちらがより高速またはよりクリーンであるか、前にJSコードを生成してそれを実行するか、それともASTを生成して実行時に反復するかということです。

4

1 に答える 1

1

一般的に*、マシンコードに最も近いものを生成する方が常に高速です。あなたの場合、javascriptの生成はより速くなります。

生成されたjavascriptコードは、基盤となるC / C ++インタープリターによって直接実行されます(場合によっては、JITをマシンコードにコンパイルします)。対照的に、ASTを実行するためにjavascriptで独自のVMを作成すると、VMの追加レイヤーであるjavascriptで実行されます。

*注:インタープリターがネイティブコードと同じくらい速く実行できる場合があります。インタプリタは非常に単純なので、4番目は例です。これは、関数ポインタのテーブルにすぎません。

于 2012-11-27T03:03:15.150 に答える