Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Rust의 타입 주도 올바름 (Type-Driven Correctness)

저자 소개

  • Microsoft SCHIE (Silicon and Cloud Hardware Infrastructure Engineering) 팀의 수석 펌웨어 아키텍트
  • 보안, 시스템 프로그래밍(펌웨어, 운영체제, 하이퍼바이저), CPU 및 플랫폼 아키텍처, C++ 시스템 분야의 업계 전문가
  • 2017년(@AWS EC2)부터 Rust로 프로그래밍을 시작했으며, 이후 이 언어의 매력에 깊이 빠져 있습니다.

이 책은 Rust의 타입 시스템을 사용하여 컴파일 자체가 불가능한 방식으로 버그의 전체 클래스를 제거하는 실전을 다룹니다. 자매서인 Rust 패턴이 메커니즘(트레이트, 연관 타입, 타입 상태)을 다룬다면, 이 가이드는 하드웨어 진단, 암호학, 프로토콜 검증, 임베디드 시스템과 같은 실제 환경에 이러한 메커니즘을 적용하는 방법을 보여줍니다.

여기에 소개된 모든 패턴은 한 가지 원칙을 따릅니다: 런타임 검사를 타입 시스템으로 밀어 넣어 컴파일러가 이를 강제하도록 만드는 것입니다.

이 책의 활용 방법

난이도 범례

기호레벨대상
🟢입문 (Introductory)소유권 및 트레이트에 익숙한 분
🟡중급 (Intermediate)제네릭 및 연관 타입에 익숙한 분
🔴고급 (Advanced)타입 상태, 팬텀 타입, 세션 타입을 배울 준비가 된 분

맞춤형 학습 경로

목표경로예상 시간
빠른 개요01장, 17장 (참조 카드)30분
IPMI / BMC 개발자02, 05, 07, 10, 13장2.5시간
GPU / PCIe 개발자02, 06, 09, 10, 15장2.5시간
Redfish 구현자02, 05, 07, 08, 13, 14장3시간
프레임워크 / 인프라04, 08, 11, 15, 18장2.5시간
설계에 의한 올바름 입문01장 → 10장 순서대로, 이후 16장 연습 문제4시간
전체 심층 분석모든 장을 순서대로 학습7시간

장별 목차 요점

제목난이도핵심 아이디어
1철학 — 왜 타입이 테스트보다 뛰어난가🟢세 가지 수준의 올바름; 컴파일러가 검증하는 보증으로서의 타입
2타입이 지정된 명령 인터페이스🟡요청 → 응답을 연결하는 연관 타입
3단회용 타입🟡암호학을 위한 선형 타입으로서의 이동 의미론
4역량 토큰🟡제로 비용 권한 증명 토큰
5프로토콜 상태 머신🔴IPMI 세션 및 PCIe LTSSM을 위한 타입 상태
6차원 분석🟢컴파일러가 단위를 검사하게 만드는 뉴타입 래퍼
7유효성 검증 경계🟡경계에서 한 번 파싱하고, 타입에 증거를 담아라
8의무 믹스인🟡재료 트레이트 및 담요 구현(Blanket impls)
9팬텀 타입🟡레지스터 너비, DMA 방향 등 리소스 추적용 PhantomData
10종합 정리🟡7가지 패턴을 하나의 진단 플랫폼에 통합
11실전에서 유용한 14가지 팁🟡Sentinel→Option, 봉인된 트레이트, 빌더 등
12연습 문제🟡정답이 포함된 6가지 종합 문제
13참조 카드패턴 카탈로그 및 의사결정 순서도
14타입 수준 보장 테스트하기🟡trybuild, proptest, cargo-show-asm
15Const Fn🟡메모리 맵, 레지스터, 비트필드에 대한 컴파일 타임 증명
16Send & Sync🟡컴파일 타임 동시성 증명
17Redfish 클라이언트 가이드🟡8가지 패턴이 결합된 타입 안전한 Redfish 클라이언트
18Redfish 서버 가이드🟡빌더 타입 상태, 소스 토큰, 상태 롤업, 믹스인

선수 지식

개념학습 소스
소유권과 빌림Rust 패턴 7장
트레이트와 연관 타입Rust 패턴 2장
뉴타입과 타입 상태Rust 패턴 3장
PhantomDataRust 패턴 4장
제네릭과 트레이트 경계Rust 패턴 1장

설계에 의한 올바름(Correct-by-Construction) 스펙트럼

← 덜 안전함                                                    더 안전함 →

런타임 검증         단위 테스트        속성 기반 테스트      설계에 의한 올바름
─────────────       ──────────        ──────────────      ──────────────────────

if temp > 100 {     #[test]           proptest! {         struct Celsius(f64);
  panic!("너무      fn test_temp() {    |t in 0..200| {   // 타입 수준에서 Rpm과
  뜨거움");            assert!(          assert!(...)       // 혼동할 수 없음
}                     check(42));     }
                    }                 }
                                                          잘못된 프로그램?
잘못된 프로그램?    잘못된 프로그램?  잘못된 프로그램?    컴파일되지 않음.
실제 서비스 중단.   CI 단계에서 실패.  CI 단계에서 실패   절대 존재할 수 없음.
                                      (확률적).

이 가이드는 가장 오른쪽 지점에서 작동합니다. 즉, 타입 시스템이 버그를 표현할 수 없기 때문에 버그가 존재하지 않는 영역입니다.