아무리 험한 길이라도 지도는 꼭 필요하다. 안 그러면 사방팔방 헤맬 것이다. 나는 ‘반지의 제왕’에서 어느 누구도 그날 갈 수 있는 것보다 더 멀리 나아가게 한 적이 없다.
J. R. R. 톨킨(Tolkien)
정처 없이 떠돌아다니는 건 내 취향이 아니니 여행을 떠나기 전에 선배 언어 개발자들이 개척한 영역을 둘러보자. 다른 사람들이 어떤 길을 택했는지 참고하면 우리가 어디로 가고 있는지 이해하는 데 도움이 될 것이다.
먼저 한 가지 밝혀두겠다. 이 책의 내용은 대부분 언어 구현체에 관한 것으로, 관념적인 주제를 지향하며 언어 자체를 기술한 책들과는 성격이 다르다. ‘스택(stack)’, ‘바이트코드(bytecode)’, ‘재귀 하향(recursive descent)’ 등은 특정한 구현체에서 사용할 법한 너트와 볼트에 해당한다. 사용자 관점에서는 결과물이 언어 스펙을 충실하게 따르는 한 모든 것이 구현 상세(implementation detail)다.
나는 이 구현 상세에 많은 시간을 바칠 생각이므로, 구현 상세를 언급할 때마다 ‘언어 구현체’라고 타이핑해야 한다면 내 손가락이 다 닳아 없어질 것이다.1 그래서 나는 언어 또는 그 구현체를, 또는 둘 다를 특별히 구분할 필요가 없다면 간략히 ‘언어’라고 지칭하겠다.