머리말
이 책은 Lowent 라는 실험 중인 시스템 프로그래밍 언어의 안내서다. 저장소에 있던 매뉴얼을 한 권의 책으로 다시 엮었다. 흩어져 있던 매뉴얼 장들과 명세의 설명, 표준 라이브러리 문서, 증명 해설을 한 줄기의 순서로 늘어놓고, 모든 예제를 실제로 돌려 확인했다.
Lowent 가 풀려는 문제는 한 문장이다. op 의 머리만 읽고 그 op 이 할 수 있는 일과 못 하는 일을 알게 한다. 순수한지, 무엇을 받고 무엇을 돌려주는지, 바깥에 무엇을 하는지, 누가 그것을 허락했는지를 머리에 적게 하고, 컴파일러가 그것을 검사한다. 그 목표가 이 언어의 낯선 겉모습 — 마침표로 닫는 절, 인자로 건네받는 권한, 한 가지 차례로만 적는 머리 — 을 거의 다 설명한다. 그래서 이 책은 문법보다 그 목표를 먼저 세우고, 규칙마다 그 목표에서 어떻게 나왔는지를 설명하려 했다.
이 책이 약속하는 것과 약속하지 않는 것#
이 책의 예제는 모두 docs/manual/examples/ 에 있는 실제 파일이다. 파일마다 첫머리에 무엇을 해야 하는지가 적혀 있고 — VM 과 네이티브로 돌려 같은 답을 내야 하는지, 어떤 진단으로 거절되어야 하는지 — 검증 스크립트가 그것을 확인한 뒤에 남긴 출력을 지면에 그대로 싣는다. 사람이 옮겨 적은 실행 결과는 없다.
그 규율 덕분에 이 책을 쓰는 동안 컴파일러와 명세 사이의 어긋남이 여럿 드러났다. 고칠 수 있는 것은 예제를 바꾸어 피했고, 독자가 걸릴 만한 것은 본문에 결함으로 적었다. 그러니 이 책은 지금 저장소의 컴파일러가 실제로 받아들이는 언어를 설명한다. 명세가 적은 이상과 다른 자리가 있으면 그 사실을 적는다.
반대로 약속하지 않는 것도 있다. 이 언어는 버전 1 에 이르지 않았고, 문법과 표준 라이브러리는 아직 바뀐다. 이 책은 판 번호가 따로 있고, 컴파일러가 바뀌면 책도 따라 바뀐다. 그리고 이 책은 연습문제를 두지 않는다. 설명하고, 질문을 던지고, 답한다. 실제로 코드를 만들어 내는 힘은 직접 써 보는 일로만 자란다. 다행히 이 언어의 컴파일러는 틀린 코드를 코드가 붙은 진단으로 거절하므로, 혼자 써 보는 일이 다른 언어보다 덜 외롭다.
누구를 위한 책인가#
프로그래밍을 한 가지 이상 해 본 독자를 가정한다. 변수와 반복과 함수가 무엇인지는 설명하지 않고, Lowent 에서 그것이 어떻게 다른지를 설명한다. C 를 알면 메모리와 바깥 세계를 다루는 부가 쉽고, Rust 를 알면 차용 규칙이 익숙할 것이다. 둘 다 몰라도 읽을 수 있게 썼다. 제10부의 증명 해설은 고등학교 수학이면 따라온다.
판과 저작권#
이 책의 글은 CC BY-NC-SA 4.0 으로, 예제 코드는 MIT 로 공개한다. 책은 한국어판과 영어판이 함께 나오고, 두 판의 장 차례와 예제는 같다. 예제의 코드와 출력은 두 판이 한 벌을 나누어 쓴다.