프로그래밍 언어 인터프리터 만들기
(craftinginterpreters.com)- 프로그래밍 언어 설계와 구현을 직접 배우며, 완전한 스크립트 언어를 만드는 과정을 다루는 책
- 파싱, 의미론, 바이트코드, 가비지 컬렉션 등 고수준 개념부터 저수준 구현까지 단계별로 설명
-
main()함수에서 시작해 동적 타이핑, 렉시컬 스코프, 일급 함수, 클래스, 상속을 포함한 언어를 직접 작성 - 인쇄본, eBook, PDF, 웹 버전 등 4가지 형식으로 제공되며, 웹에서는 전체 내용을 무료로 열람 가능
- Google의 Dart 언어 개발자 Robert Nystrom이 저술, 언어 제작에 관심 있는 개발자에게 실용적 학습 자료로 중요
책 개요
- _Crafting Interpreters_는 완전한 기능의 효율적인 스크립트 언어를 직접 구현하는 방법을 다루는 책
- 파싱과 의미론 같은 고수준 개념과 바이트코드 표현, 가비지 컬렉션 같은 저수준 세부 구현을 모두 포함
- 독자가 직접 코드를 작성하며 언어의 구조를 완전히 이해하도록 구성
- 완성되는 언어는 풍부한 문법, 동적 타이핑, 가비지 컬렉션, 렉시컬 스코프, 일급 함수, 클로저, 클래스, 상속을 지원
- 수천 줄의 간결하고 빠른 코드로 구성되어 있으며, 모든 코드를 독자가 직접 작성
제공 형식
- 책은 Print, eBook, PDF, Web의 네 가지 형식으로 제공
- Print: 640쪽 분량, 고해상도 손그림 삽화와 정교한 타이포그래피 포함
- eBook: CSS가 기기 화면 크기에 맞게 조정되며, 컬러 구문 강조와 하이퍼링크 지원
- PDF: 인쇄본의 조판과 삽화를 그대로 재현하면서 휴대성 강화
- Web: 반응형 디자인으로 모든 장과 삽화를 포함, 전체 무료 열람 가능
저자 소개
- 저자 Robert Nystrom은 Google에서 Dart 언어 개발에 참여 중
- 과거 Electronic Arts에서 8년간 게임 개발을 담당
- 베스트셀러 _Game Programming Patterns_의 저자이며, 해당 책도 무료로 공개
- 언어 제작에 매료되어 여러 취미 언어 프로젝트(Wren, Magpie, Finch, Vigil) 를 개발
- 개인 블로그와 트위터(
@munificentbob)를 통해 활동하며, 저서와 관련된 메일링 리스트 운영
접근 및 구매 경로
- 인쇄본은 Amazon, Barnes & Noble, Book Depository 등 주요 서점에서 구매 가능
- eBook은 Kindle, Apple Books, Google Play Books, Smashwords 등에서 제공
- PDF 버전은 Payhip에서 구매 가능하며, 무료 샘플 PDF 다운로드 제공
- 웹 버전은 공식 사이트에서 무료로 전체 열람 가능
Hacker News 의견들
- 이 책을 읽으며 expression problem과 그 해결책으로서의 visitor 패턴을 더 잘 이해하게 되었음
덕분에 visitor가 필요 없는 클래스 계층 상속(Class Hierarchy Inheritance) 개념도 완전히 깨달았음
Newspeak 언어에서는 클래스 안에 중첩 클래스를 둘 수 있어서, 상속 시 그 중첩 클래스들도 함께 상속됨
이 기능이 Free Object Algebras를 가능하게 한다는 점을 이 블로그 글에서 다루고 있음
참고: Expression Problem 글, Newspeak 공식 사이트 - 이 훌륭한 책에 대한 두 번의 인기 토론이 있었음
2020년에는 777포인트, 2024년에는 607포인트를 기록했음 - 이 책은 새로운 언어를 배울 때 정말 좋은 자료였음
다양한 언어 기능과 패턴을 직접 구현해보며 학습하게 되기 때문임
Java에 없는 기능이 있는 언어에서는 비슷한 패턴을 적용하기가 어렵지만, 그 도전 자체가 재미였음 - 겨울 휴가 동안 이 책을 완독했음
작가의 캐주얼한 문체와 곳곳의 유머가 정말 마음에 들었음
“Lox에 타입 체커 추가하기” 같은 후속편이 나오길 바람 - 정말 좋은 책임
처음엔 종이책을 샀는데 너무 크고 무거워서 결국 전자책으로 다시 구입했음
메모와 검색이 훨씬 편리함
그래도 읽다 보면 산속에서 길을 잃은 기분이 들기도 함 :)
저자의 또 다른 저서인 Game Programming Patterns도 추천함- 나는 책의 제본을 링 바인딩으로 바꿔서 쓰기도 함
인쇄소에서 쉽게 해줄 수 있고, 책상 위에서 다루기 훨씬 편함
다만 Crafting Interpreters는 절대 버릴 수 없는 책이라 그대로 두고 있음
- 나는 책의 제본을 링 바인딩으로 바꿔서 쓰기도 함
- 이 책을 세 번이나 선물용으로 인쇄본을 구입했음
그만큼 훌륭한 책임- 복사본을 사줘서 고맙다는 인사 :)
- 컴파일러 설계를 배우기에 최고의 자료 중 하나임
게다가 웹 버전이 무료라는 점이 정말 관대함- 다만 책 제목에는 ‘compiler’라는 단어가 직접적으로 들어가 있지는 않음
- 이 책을 정말 좋아함
다만 Java 버전이 오래된 점이 아쉬움
최근 추가된 sealed classes나 exhaustive switch 같은 기능을 반영한 개정판이 있었으면 함- 최신 Java로 직접 업그레이드해보는 것도 좋은 연습 과제임
그렇게 하면 저자가 만든 임시 코드 생성 도구가 필요 없어짐
- 최신 Java로 직접 업그레이드해보는 것도 좋은 연습 과제임
- C++의 typedef처럼 문맥 의존적 구문을 파싱하는 방법이 궁금했음
PEG 기반 파서에서 context stack을 추가하는 해킹성 접근도 있지만, 구문 전환 문제는 여전히 어려움
persistent data structure나 transactional data structure가 도움이 될 것 같지만, 아직 명확한 형식화를 찾지 못했음-
Lexer hack을 참고하면 됨
파서가 lexer에 상태를 전달하도록 만들어, 타입 이름 집합을 lexer가 알 수 있게 하는 방식임 - 또 다른 방법으로는 functional parser를 사용하는 것임
예를 들어 Parsec 같은 라이브러리에서 ‘do’ 표기법을 활용하면 각 단계의 결과를 다음 파서들이 공유할 수 있음 - C/C++의 문법 설계가 최악 수준이라 이런 문제가 생김
다행히 Rust나 Go는 이런 문제를 피했으며, 신중한 설계로 충분히 방지 가능함
-
Lexer hack을 참고하면 됨
- 인터프리터를 시작하려는 사람들을 위해 몇 가지 자료를 공유함
shi 프로젝트와, C 언어 쪽에 관심 있다면 hacktical-c를 참고하면 좋음