1부 | 환영한다!
1장 들어가기
__1.1 왜 이런 걸 배우는가?
____1.1.1 미니 언어는 곳곳에 있다
____1.1.2 언어는 훌륭한 연습이다
____1.1.3 한 가지 더
__1.2 이 책의 구성
____1.2.1 코드
____1.2.2 스니펫
____1.2.3 어사이드
____1.2.4 연습 문제
____1.2.5 디자인 노트
__1.3 첫 번째 인터프리터
__1.4 두 번째 인터프리터
연습 문제
디자인 노트 | 언어 이름 짓기
2장 인터프리터 원정대
__2.1 언어의 구성 요소
____2.1.1 스캐닝
____2.1.2 파싱
____2.1.3 정적 분석
____2.1.4 중간 표현
____2.1.5 최적화
____2.1.6 코드 생성
____2.1.7 가상 머신
____2.1.8 런타임
__2.2 지름길과 대체 경로
____2.2.1 싱글 패스 컴파일러
____2.2.2 트리 탐색 인터프리터
____2.2.3 트랜스파일러
____2.2.4 JIT 컴파일
__2.3 컴파일러와 인터프리터
__2.4 여행을 떠나자!
연습 문제
3장 록스 언어
__3.1 안녕, 록스
__3.2 하이레벨 언어
____3.2.1 동적 타이핑
____3.2.2 자동 메모리 관리
__3.3 데이터 타입
__3.4 표현식
____3.4.1 산술
____3.4.2 비교와 동등성
____3.4.3 논리 연산자
____3.4.4 우선순위와 그룹핑
__3.5 문장
__3.6 변수
__3.7 제어 흐름
__3.8 함수
____3.8.1 클로저
__3.9 클래스
____3.9.1 객체 지향 언어를 추구해야 할 이유가 있을까?
____3.9.2 록스는 왜 객체 지향 언어로 만들었나?
____3.9.3 클래스냐 프로토타입이냐
____3.9.4 록스의 클래스
____3.9.5 인스턴스화 및 초기화
____3.9.6 상속
__3.10 표준 라이브러리
연습 문제
디자인 노트 |
온전한 인터프리터를 통째로 구현하라!
더 강력하고 유능한 프로그래머로 거듭날 것이다.
-첫 번째 인터프리터: 제이록스
제이록스(jlox는 자바로 개발한다. 프로그래밍 언어의 근본적인 개념과 작동 원리를 정확하게 이해하고 올바르게 구현하기 위해 가능한 한 가장 단순하고 깔끔한 언어 구현체를 작성한다. 처음에는 큰 그림을 그려보고 흥미진진한 주제를 하나씩 섭렵하면서 프로그래밍 언어가 내부적으로 어떻게 움직이는지 명확하게 이해할 수 있다.
-두 번째 인터프리터: 씨록스
씨록스(clox는 C 언어로, 자바가 공짜로 제공한 모든 것을 스스로 구현한다. 전체 표현식 타입별 우선 순위 테이블과 제어 흐름 문장을 준비하고 변수, 함수, 클로저, 클래스, 필드, 메서드, 상속까지 빠짐없이 구현한다. 동적 배열과 해시 테이블도 알아서 해결하고 객체를 어떻게 메모리에 나타낼지도 결정한다. 즉, 싱글 패스 바이트코드 컴파일러, 내부 명령어 집합을 처리하는 가상 머신 인터프리터, 컴팩트한 객체 표현, 힙 할당 없이 변수를 저장하는 스택, 정교한 가비지 수집기까지 완비한다. 자바 인터프리터(제이록스가 정확성에 초점을 두었다면, C 인터프리터(씨록스는 빠른 실행, 성능 최적화, 유용한 기능이 목표다.
누구나 프로그래밍 언어를 만들 수 있다. 내가 원하는 대로!
어떤 기분이냐 하면, 졸업할 때까지 똑같은 교복만 입다가 어느 날 원하는 옷을 입고 다닐 수 있는 학교에 진학한 기분이다. 블록에 꼭 {}를 써야 할 필요가 있나? 할당에 = 말고 다른 기호를 쓸 수 없을까? 클래스 없이 객체만 사용하면 안 될까? 다중 상속과 멀티메서드는? 정적 오버로드되는 동적인 언어는 어떨까? 프로그래밍 언어의 작동 원리를 진지하게 살펴보면서 프로그래밍 자체에 대한 이해도 한층 더 깊어진다. 마치 자동차를 운전만 하던 사람이 후드를 열고 엔진을 수리할 수 있게 되는 셈이다. 정말 재미난 경험이다! 그리고 실제로 유용하다!