INTERPRETER 1.4 두 번째 인터프리터
3부에서는 다시 처음으로 돌아가 C 언어로 인터프리터를 구현한다. C는 메모리의 바이트부터 CPU로 흘러가는 코드에 이르기까지, 어떤 구현체가 실제로 어떻게 작동되는지 완벽하게 이해할 수 있는 언어다.
C를 선택한 이유는 C가 특별히 잘하는 것을 십분 활용하고 싶었기 때문이다. 이 말은 곧 여러분이 어느 정도 C에 익숙해야 한다는 뜻이다. C를 창시한 데니스 리치(Dennis Ritchie)가 환생할 정도까지는 아니더라도 포인터를 두려워해서는 곤란하다.
C가 생소한 독자는 먼저 C 개론서를 찾아 정독한 후 다시 3부로 돌아오길 권한다. 그러면 여러분은 길을 돌아가긴 했으나 이 책을 읽고 나서 훨씬 유능한 C 프로그래머로 발전할 것이다. 루아(Lua), C파이썬(CPython), 루비(Ruby)의 MRI... 얼마나 많은 언어 구현체가 C로 작성됐는지 생각하면 정말 도움이 된다.
이 책의 C 인터프리터인 씨록스(clox)는 자바가 공짜로 제공한 모든 것을 스스로 구현해야 한다. 동적 배열과 해시 테이블도 알아서 해결해야 하고 객체를 어떻게 메모리에 나타내야 할지 결정해야 한다. 안 쓰는 객체를 회수하는 가비지 수집기(garbage collector)도 만들 것이다.
나는 clox를 'sea-locks(씨록스)'로 발음하지만, 'x'를 그리스어처럼 발음하는 게 편한 사람들은 'clocks(클락스)'나 'cloch(클록)'으로 불러도 좋다.