Evaluator
それをやるのがEvaluator、評価器。
ASTそのものを辿り、数値の計算や関数の実行をする 前処理やコンパイルは一切しない
処理速度は出ない
構築しやすく、拡張しやすい
理解しやすい
実装によってはASTを書き換える最適化を施すものもある 他の種類のインタプリタの評価戦略の例
インタプリタの一部である仮想マシンで解釈される
Ruby v1.9以降とか
ASTを構築せずに、直接バイトコードを出力するもの
JIT
ASTをバイトコードへ変換する
実行の直前に仮想マシンがJust In Timeでバイトコードを機械語に変換する
コンパイラ+ランタイム
ASTを再帰的に評価し、ASTの特定の枝を複数回評価した場合だけ、その枝を機械語に変換するもの
ASTを機械語に変換するもの
ASTを再帰的にたどるが、その特定の枝を実行する前にノードをネイティブの機械語にコンパイルする
コンパイラ型のもの
ランタイムは極限まで薄い
コンパイラの出力のプログラムは直接実行できるソフトウェア
実行を担当する「ランタイム」は不要
メモリ管理など一部のランタイムはライブラリや、OSのシステムコールが担当する
外から見るとコンパイラ型だが、中はインタプリタが動作してるもの
プログラムを仮想的なコンピュータの機械語に変換し、実行時に仮想的なコンピュータが実行を行う
Javaでは↑この機械語をJVMバイトコード、仮想的なコンピュータをJVMと呼ぶ 参考