2P by GN⁺ 8일전 | ★ favorite | 댓글 1개
  • 프로그래밍 언어 설계와 구현을 직접 배우며, 완전한 스크립트 언어를 만드는 과정을 다루는 책
  • 파싱, 의미론, 바이트코드, 가비지 컬렉션 등 고수준 개념부터 저수준 구현까지 단계별로 설명
  • 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 classesexhaustive switch 같은 기능을 반영한 개정판이 있었으면 함
    • 최신 Java로 직접 업그레이드해보는 것도 좋은 연습 과제
      그렇게 하면 저자가 만든 임시 코드 생성 도구가 필요 없어짐
  • C++의 typedef처럼 문맥 의존적 구문을 파싱하는 방법이 궁금했음
    PEG 기반 파서에서 context stack을 추가하는 해킹성 접근도 있지만, 구문 전환 문제는 여전히 어려움
    persistent data structuretransactional data structure가 도움이 될 것 같지만, 아직 명확한 형식화를 찾지 못했음
    • Lexer hack을 참고하면 됨
      파서가 lexer에 상태를 전달하도록 만들어, 타입 이름 집합을 lexer가 알 수 있게 하는 방식임
    • 또 다른 방법으로는 functional parser를 사용하는 것임
      예를 들어 Parsec 같은 라이브러리에서 ‘do’ 표기법을 활용하면 각 단계의 결과를 다음 파서들이 공유할 수 있음
    • C/C++의 문법 설계가 최악 수준이라 이런 문제가 생김
      다행히 Rust나 Go는 이런 문제를 피했으며, 신중한 설계로 충분히 방지 가능함
  • 인터프리터를 시작하려는 사람들을 위해 몇 가지 자료를 공유함
    shi 프로젝트와, C 언어 쪽에 관심 있다면 hacktical-c를 참고하면 좋음