인터프리터를 다룬 책, 글, 블로그 포스트, 튜토리얼 들은 엄청나게 많습니다. 이렇게 많음에도, 그것들은 대개 두 부류로 나뉩니다. 하나는 드래곤 북처럼 이론적으로 매우 방대하고 무거운 내용을 담고 있으며, 이미 일정정도 인터프리터를 알고 있는 사람을 대상 독자로 삼고 있습니다. 또 다른 부류는 그 반대편에서 매우 짧게 인터프리터를 소개하면서, 외부 툴을 블랙박스처럼 사용해 ‘장난감 수준의 인터프리터’를 만드는 데 머뭅니다. 《인터프리터 in Go》는 이 양 극단 사이에 놓인 책입니다. 저자는 이 책의 포지션을 다음과 같이 정의하고 있습니다.

내가 원한 것은 컴파일러에 대한 900쪽 분량의 책과 50행의 Ruby 코드로 Lisp 인터프리터 작성 방법을 다룬 블로그 포스트, 그 사이에 있는 무엇이었다.

이 책은 궁금함을 참지 못해 기계를 뜯어보는 사람들을 위한 책입니다. 내부가 어떻게 작동하는지 정말 알고 싶어 하는 그런 사람들 말입니다.

책에서 구현해볼 인터프리터는?

인터프리터의 종류가 매우 다양하고 공통점이 없어서 인터프리터를 일반화하는 것은 어려운 일입니다. 일부 인터프리터는 매우 간단하여 파싱 단계조차 없는 경우도 있는데, 이런 인터프리터는 입력하자마자 바로 번역합니다. 한편 스펙트럼의 다른 극단에는 매우 정교한 유형의 인터프리터가 있습니다. 고도로 최적화되어 있고 진일보한 파싱과 평가 기술을 사용합니다.

두 부류의 카테고리 사이 어디쯤, 소스코드를 파싱하고 나서 추상구문트리(AST, Abstract Syntax Tree)를 만들고, 이것을 평가하는 인터프리터가 있습니다. 이런 인터프리터를 ‘트리 탐색(tree-walking)’ 인터프리터라고 부르는데, 추상구문트리를 ‘탐색하면서 번역’하기 때문입니다.

이 책에서 여러분이 만들어볼 것이 바로 트리 탐색 인터프리터입니다.

책에서 다루는 내용

인터프리터는 다음과 같이 몇 개의 주요 부분으로 구성됩니다. 책을 읽는 동안 독자만의 프로그래밍 언어, 독자만의 인터프리터를 ‘밑바닥부터’ 작성하게 됩니다. 책에서는 그 어떤 서드파티 툴이나 라이브러리도 사용하지 않습니다.

  • 렉서(lexer)
  • 파서(parser)
  • 추상구문트리(AST, the Abstract Syntax Tree)
  • 내부 객체 시스템
  • 평가기(evaluator)

이 책은 정확하게 위의 순서대로 각각의 요소를 상향식으로 만들어 나갑니다. 이런 접근 방법의 단점은 첫 번째 장 이후에 바로 “Hello World”를 출력해볼 수 없다는 점입니다. 반면에 이 방법의 장점은 어떻게 각각의 조각이 하나로 맞추어지는지, 데이터가 프로그램 안에서 어떻게 흘러가는지 그 원리를 쉽게 이해하게 된다는 점입니다.

Go 언어를 깊이 있게 공부할 기회

저자는 크게 3가지 차원에서 Go 언어를 선택한 이유를 밝힙니다.

  • Go는 가독성이 뛰어나며, 따라서 이해하기 쉽다.
  • Go는 훌륭한 지원 툴을 제공한다.
  • Go 코드는 C, C++, Rust 같은 저수준 언어에 가깝게 매핑된다.

참고로 구글에서 만든 오픈소스 프로그래밍 언어인 Go 언어의 인기가 갈수록 뜨겁습니다. 2020년 스택오버플로 조사에서 Go는 개발자가 사랑하는 언어 5위를 기록하기도 했습니다.

스택오버플로 Developer Survey 2020

이 책은 Go 언어를 깊이 있게 다루어볼 좋은 기회를 제공합니다.

———————————————————————————————————————————-

《밑바닥부터 만드는 인터프리터 in Go》는 다음 서점에서 구입할 수 있습니다.

교보문고 | YES24 | 알라딘 | 인터파크