인사이트 출판사의 제안으로 프로그래밍 언어에 대한 책을 쓰게 되었습니다. 책의 가제는 “프로그래밍 언어의 기본 원리”이고, 여러 언어의 밑바탕에 있는 공통된 원리를 소개해 독자들이 새로운 언어를 쉽게 익힐 수 있도록 돕는 것이 의도입니다. 출판사에서 원고를 웹 사이트에 올리는 것을 허락해 주셔서 작성 중인 원고를 여기에도 올릴 수 있게 되었습니다. 여기에 올라오는 내용은 아무런 교정도 거치지 않은, 순전히 제 손만 닿은 초고이기 때문에 실제 책이 나올 때는 달라질 수 있습니다. 더 좋은 책이 나올 수 있도록 읽어 주신 분들의 많은 의견 부탁드립니다. 의견은 아래에 댓글로 달거나 jaemin.hong@kaist.ac.kr
로 보내 주시면 됩니다. 또한 주변인들에게도 소개해 주신다면 정말 감사하겠습니다. 좋은 기회를 주신 인사이트 출판사에 감사드리고 지금까지 작성했던 부족한 글들을 여기저기에 알려 주신 분들께도 감사드립니다.
목차
아래는 현재 계획 중인 책의 목차입니다. 책을 쓰면서 목차가 조금 변경될 수도 있습니다.
1장: 들어가며
1부: 프로그래밍 언어의 기본 원리
2장: 문법과 의미 - 프로그래밍 언어는 무엇으로 이루어지는가
- 2.1: 구체적 문법 - 프로그래머가 작성한 프로그램이 따라야 할 규칙
- 2.2: 요약 문법 - 프로그램의 수학적인 구조
- 2.3: 파싱 - 구체적 문법에서 요약 문법으로
- 2.4: 의미 - 프로그램을 실행하면 무슨 일이 일어날까
- 2.5: 문법 설탕 – 이미 정의한 것으로 복잡한 것을 표현하기
3장: 기본 값과 연산 - 프로그래밍 언어가 제공하는 가장 기본적인 값들
(2장 내용을 예시를 들어 설명하기 위한 장)
- 3.1: 구체적 문법 정의하기
- 3.2: 요약 문법 정의하기
- 3.3: 의미 정의하기
- 3.4: 추가적인 기능을 문법 설탕으로 정의하기
- 3.5: 현실 세계 언어 파헤치기
4장: 변수 - 값에 이름을 붙이고 사용하기
- 4.1: 묶는 등장 - 이름과 그 이름이 나타내는 값을 정의하기
- 4.2: 묶인 등장 - 이름을 통해 그 이름이 나타내는 값을 사용하기
- 4.3: 변수의 영역과 자유 변수 - 만든 이름은 어디에서 사용할 수 있을까
- 4.4: 현실 세계 언어 파헤치기
5장: 일차 함수 - 반복되는 코드는 한 번만 작성하자
- 5.1: 함수 정의 - 함수는 무엇으로 정의되는가
- 5.2: 함수 적용 - 함수를 사용하는 방법
- 5.3: 정적 영역과 동적 영역 - 함수의 몸통은 어떻게 계산되어야 하는가
- 5.4: 현실 세계 언어 파헤치기
6장: 일급 함수 – 함수도 값이다
- 6.1: 일급 개체 – 값이 될 수 있는 존재들
- 6.2: 익명 함수 – 이름 없는 함수
- 6.3: 클로저 – 만들어질 때의 환경을 기억하고 있는 함수
- 6.4: 람다 대수와 처치 인코딩 – 사실 모든 것은 함수다
- 6.5: 현실 세계 언어 파헤치기
7장: 재귀 – 자기 자신을 사용하기
- 7.1: 재귀 함수 – 자기 자신을 사용하는 함수 만들기
- 7.2: 재귀 함수 없이 재귀 함수 만들기
- 7.3: 현실 세계 언어 파헤치기
8장: 상태 – 프로그램이 실행되는 동안 변하는 것들
- 8.1: 수정 가능한 상자 – 상태를 바꾸는 방법
- 8.2: 수정 가능한 변수 – 상자를 숨겨 보자
- 8.3: 값에 의한 호출과 참조에 의한 호출 – 변수를 인자로 넘기는 두 가지 방법
- 8.4: 현실 세계 언어 파헤치기
9장: 흐름 제어 – 프로그램의 흐름을 갑작스럽게 바꾸기
- 9.1: 환원가능식과 계속 – 지금 계산할 부분과 그 다음에 할 계산
- 9.2: 흐름 제어의 예: 반환
- 9.3: 흐름 제어의 예: 반복문에서의 제어
- 9.4: 흐름 제어의 예: 예외 던지기
- 9.5: 일급 계속 – 계속도 값이다
- 9.6: 현실 세계 언어 파헤치기
2부: 프로그래머를 돕는 프로그래밍 언어의 기능들
10장: 메모리 관리 – 프로그램이 실행될 때 어떻게 메모리를 효율적으로 사용할까
- 10.1: 수동 메모리 관리 – 잘하면 좋지만 잘하기 어려운, 사람이 하는 메모리 관리
- 10.2: 자동 메모리 관리: 메모리 수집 – 실행 중 주기적으로 확인해 필요 없는 것은 없애자
- 10.3: 자동 메모리 관리: 소유권 – 소유자가 없으면 없애도 돼
- 10.4: 현실 세계 언어 파헤치기
11장: 객체 – 값과 동작을 함께
- 11.1: 객체와 메서드
- 11.2: 클래스 기반 객체
- 11.3: 프로토타입 기반 객체
- 11.4: 현실 세계 언어 파헤치기
12장: 정적 타입 검사 – 프로그램을 실행하기 전에 오류를 찾는 방법
- 12.1: 오류 탐지의 결정불가능성 – 오류가 있는지 없는지 완벽히 알아낼 수 없다
- 12.2: 타입 체계 – 안전한 오류 탐지를 위한 체계
- 12.3: 타입 체계의 확장 – 더 많은 프로그램을 허용하는 타입 체계 만들기
- 12.4: 타입 추론 – 불필요한 타입 표시를 없애자
- 12.5: 현실 세계 언어 파헤치기
13장: 느긋한 계산 – 계산 결과가 필요할 때까지 계산을 미루기
- 13.1: 이름에 의한 호출 – 인자를 느긋하게 계산하기
- 13.2: 필요에 의한 호출 – 느긋하게 한 번만 계산하기
- 13.3: 현실 세계 언어 파헤치기
14장: 미처 하지 못한 이야기
(책의 분량이나 난이도 조절을 위해 다루지 못한 흥미로운 주제들에 대한 소개)
의존적 타입, 커리 하워드 동형, 점진적 타입, …