2.2.2 트리 탐색 인터프리터
어떤 프로그래밍 언어는 코드를 AST로 파싱한 후 (약간의 정적 분석이 적용될 수도 있다) 바로 실행을 시작한다. 프로그램을 실행하기 위해 인터프리터는 구문 트리를 한 번에 하나의 분기(branch)와 리프(leaf)씩 순회하면서 각 노드를 평가한다.
이런 구현 스타일은 주로 학교 프로젝트와 미니 언어에 사용되지만 속도가 너무 느려서 범용 언어에서는 거의 쓰이지 않는다. 어떤 사람들은 ‘인터프리터’를 이런 부류의 구현체만 의미하는 용도로 사용하기도 하지만, 이 용어의 의미를 더 일반화하여 정의하는 사람들도 있다. 나는 논란의 여지를 없애고자 트리 탐색 인터프리터(tree-walk interpreter)라는 용어를 사용하겠다. 이 책의 첫 번째 인터프리터인 제이록스가 바로 트리 탐색 인터프리터다.
한 가지 유명한 예외가 바로 루비(Ruby)다. 루비 초기 버전은 트리 탐색 인터프리터였지만, 1.9 버전부터 루비 공식 구현체는 당초 MRI(Matz's Ruby Interpreter, 마츠의 루비 인터프리터)에서 코이치 사사다(Koichi Sasada)의 YARV(Yet Another Ruby VM, 또 다른 루비 VM)로 전환되었다. YARV는 바이트코드 가상 머신이다.