이 책을 읽으며 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로 직접 업그레이드해보는 것도 좋은 연습 과제임
그렇게 하면 저자가 만든 임시 코드 생성 도구가 필요 없어짐
C++의 typedef처럼 문맥 의존적 구문을 파싱하는 방법이 궁금했음
PEG 기반 파서에서 context stack을 추가하는 해킹성 접근도 있지만, 구문 전환 문제는 여전히 어려움 persistent data structure나 transactional data structure가 도움이 될 것 같지만, 아직 명확한 형식화를 찾지 못했음
Lexer hack을 참고하면 됨
파서가 lexer에 상태를 전달하도록 만들어, 타입 이름 집합을 lexer가 알 수 있게 하는 방식임
또 다른 방법으로는 functional parser를 사용하는 것임
예를 들어 Parsec 같은 라이브러리에서 ‘do’ 표기법을 활용하면 각 단계의 결과를 다음 파서들이 공유할 수 있음
C/C++의 문법 설계가 최악 수준이라 이런 문제가 생김
다행히 Rust나 Go는 이런 문제를 피했으며, 신중한 설계로 충분히 방지 가능함
인터프리터를 시작하려는 사람들을 위해 몇 가지 자료를 공유함 shi 프로젝트와, C 언어 쪽에 관심 있다면 hacktical-c를 참고하면 좋음
Hacker News 의견들
덕분에 visitor가 필요 없는 클래스 계층 상속(Class Hierarchy Inheritance) 개념도 완전히 깨달았음
Newspeak 언어에서는 클래스 안에 중첩 클래스를 둘 수 있어서, 상속 시 그 중첩 클래스들도 함께 상속됨
이 기능이 Free Object Algebras를 가능하게 한다는 점을 이 블로그 글에서 다루고 있음
참고: Expression Problem 글, Newspeak 공식 사이트
2020년에는 777포인트, 2024년에는 607포인트를 기록했음
다양한 언어 기능과 패턴을 직접 구현해보며 학습하게 되기 때문임
Java에 없는 기능이 있는 언어에서는 비슷한 패턴을 적용하기가 어렵지만, 그 도전 자체가 재미였음
작가의 캐주얼한 문체와 곳곳의 유머가 정말 마음에 들었음
“Lox에 타입 체커 추가하기” 같은 후속편이 나오길 바람
처음엔 종이책을 샀는데 너무 크고 무거워서 결국 전자책으로 다시 구입했음
메모와 검색이 훨씬 편리함
그래도 읽다 보면 산속에서 길을 잃은 기분이 들기도 함 :)
저자의 또 다른 저서인 Game Programming Patterns도 추천함
인쇄소에서 쉽게 해줄 수 있고, 책상 위에서 다루기 훨씬 편함
다만 Crafting Interpreters는 절대 버릴 수 없는 책이라 그대로 두고 있음
그만큼 훌륭한 책임
게다가 웹 버전이 무료라는 점이 정말 관대함
다만 Java 버전이 오래된 점이 아쉬움
최근 추가된 sealed classes나 exhaustive switch 같은 기능을 반영한 개정판이 있었으면 함
그렇게 하면 저자가 만든 임시 코드 생성 도구가 필요 없어짐
PEG 기반 파서에서 context stack을 추가하는 해킹성 접근도 있지만, 구문 전환 문제는 여전히 어려움
persistent data structure나 transactional data structure가 도움이 될 것 같지만, 아직 명확한 형식화를 찾지 못했음
파서가 lexer에 상태를 전달하도록 만들어, 타입 이름 집합을 lexer가 알 수 있게 하는 방식임
예를 들어 Parsec 같은 라이브러리에서 ‘do’ 표기법을 활용하면 각 단계의 결과를 다음 파서들이 공유할 수 있음
다행히 Rust나 Go는 이런 문제를 피했으며, 신중한 설계로 충분히 방지 가능함
shi 프로젝트와, C 언어 쪽에 관심 있다면 hacktical-c를 참고하면 좋음