The SafeC Book
The SafeC Book에 오신 것을 환영합니다 — Kernighan과 Ritchie의 The C Programming Language, 그리고 The Rust Programming Language의 전통을 이어, 처음부터 예제를 통해 SafeC라는 언어를 배우는 튜토리얼입니다. 그 책들이 실행 예제를 통해 C의 작고 직교적인 핵심과 Rust의 소유권 모델을 가르쳤듯이, 이 책도 SafeC에 대해 같은 방식을 취합니다. SafeC는 C의 상위 집합(superset)이며, 그 하나의 큰 아이디어는 리전 시스템입니다 — 컴파일 타임에 추적되는 메모리 출처(&stack, &heap, &arena<R>, &static) 정보로, 프로그램이 실행되기도 전에 use-after-free와 별칭(aliasing) 버그를 잡아내며, 런타임 비용은 전혀 들지 않습니다.
이 책은 레퍼런스가 아니라 튜토리얼입니다. 필요한 순서대로 기능을 소개하며, 매 단계마다 완전히 컴파일 가능한 예제를 제공합니다 — 이 책의 모든 코드 블록은 실제 safec 컴파일러로 컴파일되었고, 출력이 있는 경우에는 실행까지 확인되었습니다. 어떤 한 기능에 대한 완전한 세부 사항(모든 연산자의 우선순위, 모든 표준 라이브러리 함수의 시그니처 등)이 필요하다면 레퍼런스와 표준 라이브러리 섹션을 참고하세요 — 이 책은 여러분이 그런 깊이를 원하게 될 시점에 해당 섹션으로 링크를 안내합니다.
이 책의 대상 독자
C, C++, Java, Go, Rust 등 C 계열 언어 중 어느 것이든 이미 프로그래밍할 줄 알고, 포인터라는 개념에 익숙하다고 가정합니다 — 설령 사용해 온 언어가 포인터를 직접 다루지 못하게 했더라도 상관없습니다. 이 책은 완전 입문자를 위한 프로그래밍 책처럼 "변수란 무엇인가", "반복문이란 무엇인가"를 기초부터 다시 가르치지 않습니다 — 3장은 그런 개념들을 빠르게 훑고 지나가며, 근본 개념이 아니라 SafeC 고유의 구문을 다시 익히는 정도로 다룹니다. C를 어느 정도 잘 안다면 1~4장 대부분은 빠르게 진행될 것이고, 진짜 새로운 내용은 5장부터 시작됩니다.
이 책을 읽는 방법
각 장은 순서대로 읽도록 구성되어 있습니다 — The Rust Programming Language의 각 장이 그렇듯, 각 장은 이전 장들의 구문과 용어를 바탕으로 쌓아 올려집니다. 이미 C를 잘 안다면, 건너뛰지 말아야 할 장은 5장(리전) 하나뿐입니다. 이 언어 전체에서 진정으로 새로운 아이디어는 그것 하나이며, 6장 이후의 모든 내용은 여러분이 그 개념을 이해하고 있다는 전제로 전개됩니다.
- 시작하기 — 툴체인 설치,
safeguard new, 첫 프로그램 컴파일 및 실행 - 첫 번째 프로그램 — I/O와 편집-컴파일-실행 루프를 소개하는 완전한 온도 변환 CLI 도구
- 공통 개념 — 변수, 타입, 연산자, 제어 흐름
- 함수 — 선언, 매개변수, 오버로딩,
pure - 리전 이해하기 — 리전 시스템:
&stack,&heap,&arena<R>,&static, 그리고 대여 규칙 - 구조체와 메서드 — 타입 정의, 메서드, 연산자 오버로딩
- 열거형, 유니온, 매치 — 유니온과 완전성 검사가 되는 패턴 매칭
- 에러 처리 — 옵셔널,
try,defer/errdefer, 예외 없음 - 최종 프로젝트: 키-값 스토어 — 지금까지 배운 모든 것을 더 큰 프로그램으로 종합하기
시작해 봅시다.