이 책은 전편인 《밑바닥부터 만드는 인터프리터 in Go》의 후속 편입니다.

여기서 후속 편이라는 게 정확히 무슨 뜻일까요? 이 책이 전편과 매끄럽게 이어진다는 뜻입니다. 같은 방식, 같은 프로그래밍 언어, 같은 도구 함수, 전편에서 끝마친 코드베이스까지 그대로 사용합니다.

방법은 간단합니다. 전편의 끝마친 곳부터 시작해 컴파일러를 만들면 됩니다. 이제 컴파일러 구현을 통해 인터프리터 언어는 또 한 단계 진화하게 됩니다.

이 책에서 구현해볼 컴파일러와 가상머신은?

이 책에서는 전편에서 작성한 트리 순회/즉시 평가 인터프리터를, 바이트코드 컴파일러와 바이트코드를 실행하는 가상 머신으로 바꿉니다.

Ruby, Lua, Python, Perl, Guile, 그리고 JavaScript 구현체 중 몇몇과 그 밖에 여러 프로그래밍 언어가 바이트코드를 사용하는 아키텍처로 만들어져 있습니다. 심지어 그 유명한 자바 가상 머신(Java Virtual Machine)도 바이트코드를 평가하도록 만들어져 있습니다.

컴파일러에서 바이트코드를 만들어서 가상 머신에게 전달하는, 즉 새로운 추상화 계층을 도입함으로써 시스템을 더욱 모듈화하는 장점은 물론, 바이트코드 아키텍처가 핵심적으로 지향하는 바는 성능입니다. 저자는 이런 변경을 통해 전편의 인터프리터가 어떻게 3배 이상의 성능 향상을 보일 수 있는지를 설명합니다.

이 책에서 다루는 내용

소스코드를 목적코드로 변환하고 가상 머신을 통해 이를 실행하는 초기 세팅 과정을 마치고 나면, 전편의 인터프리터와 마찬가지로 아주 작은 모듈 단위로 구현을 시작합니다. 컴파일러와 가상 머신은 다음과 같이 순차적으로 확장됩니다.

• 바이트코드와 스택 기반의 아키텍처 결정

• Monkey 언어의 내부 표현 컴파일과 실행

• 점프 명령어(분기 명령어)를 컴파일하고 실행

• 심벌 테이블을 활용해 바인딩을 컴파일하고 실행

• 문자열, 배열, 해시를 컴파일하고 실행

• 함수의 반환 주소 문제 해결을 위한 스택 머신 아키텍처 활용

• 내장 함수 리팩터링

• 함수가 환경을 담도록 자유 변수 도입

• 재귀적 클로저 구현

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

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

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

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

스택오버플로 Developer Survey 2020

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

———————————————————————————————————————————–

《밑바닥부터 만드는 컴파일러 in Go》 는 다음 서점에서 구입할 수 있습니다.

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