2024-07-06
HSPACE Rust 특강 #0 — 시작하며
2024년 여름, HSPACE에서 진행된 Rust Basic + Linux Kernel 특강을 들었다. 옥찬호(Chris Ohk) 님이 진행하신 특강이고, 강의 자료와 예제·과제는 2024-HSPACE-Rust-LinuxKernel 저장소에 정리해 두었다.
이 글부터 시작해서, 강의 한 회차마다 한 편씩 내가 이해한 내용을 정리한다. 슬라이드를 그대로 옮기는 게 아니라, "내가 이걸 왜 헷갈렸고 어떻게 정리했는지" 를 남기는 쪽에 가깝다.
교재
강의는 특정 책 하나를 그대로 따라가지는 않지만, 주 교재는 아래 세 권이었다.
| 구분 | 책 |
|---|---|
| 주 교재 | Programming Rust (O'Reilly Media, 2021) |
| Comprehensive Rust (Google, 2023) | |
| The Rust Programming Language, 2nd Edition (No Starch Press, 2023) | |
| 부 교재 | The Rustonomicon |
| Rust for Rustaceans (No Starch Press, 2021) | |
| Rust Atomics and Locks (O'Reilly Media, 2023) | |
| Effective Rust (O'Reilly Media, 2024) |
실제로 회차별 구성은 Programming Rust 의 챕터 순서(기본 타입 → 소유와 이동 → 레퍼런스 → 표현식 → 오류 처리 → 크레이트와 모듈 → 클로저 → 동시성 → 매크로 → 비동기)를 거의 그대로 따라간다. 슬라이드를 보다가 막히면 이 책의 해당 챕터를 펴는 게 제일 빨랐다.
진행 방식
- 주 2회, 하루에 한 주제. 이론 슬라이드 → 예제 코드 → (주차에 따라) 과제.
- 과제는 대부분
cargo test를 통과시키는 형태였다. 테스트가 스펙 역할을 해서 "무엇을 만들어야 하는가"를 두고 헤맬 일이 없다는 게 좋았다. - 예제 코드는 저장소의
2 - Example, 과제는3 - Assignment, 해답은4 - Solution에 들어있다.
특강 이름에 Linux Kernel 이 붙어 있지만, 실제로 진행된 회차는 Rust 언어 자체를 다지는 부분까지였다. 커널·디바이스 드라이버 파트는 이 언어 기반이 잡혀야 들어갈 수 있는 내용이라, 이 시리즈도 Rust 기초를 따라가는 순서로 정리한다.
Rust Playground
설치 전에 먼저 만져본 건 Rust Playground 였다. 브라우저에서 바로 컴파일·실행이 되고, 무엇보다 결과물을 어떤 형태로 볼지 고를 수 있다는 점이 좋았다.
- Run — 그냥 실행
- Build — 빌드만
- ASM / LLVM IR / MIR / HIR — 각 단계의 중간 표현 출력
특히 ASM 과 MIR 을 볼 수 있다는 게 컸다. 뒤에 나올 "이 추상화는 런타임
비용이 없다"는 이야기를, 말로 믿는 게 아니라 어셈블리를 직접 열어서 확인할 수
있기 때문이다. 클로저나 이터레이터가 정말 인라인되어 사라지는지 궁금할 때마다
여기로 돌아왔다.
설치와 프로젝트 세팅
로컬 환경은 rustup 으로 잡는다.
# 리눅스/macOS
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 버전 확인
rustc --version
cargo --version
에디터는 VS Code + rust-analyzer 조합을 썼다. 타입 추론 결과를 인레이 힌트로 보여주는 게 초반에 특히 도움이 됐는데, Rust는 타입을 안 적어도 되는 자리가 많아서 "지금 이 변수 타입이 뭐지?"가 계속 생기기 때문이다.
프로젝트는 전부 cargo 로 만든다.
cargo new hello # 실행 파일 프로젝트 (src/main.rs)
cargo new mylib --lib # 라이브러리 프로젝트 (src/lib.rs)
cargo build # 디버그 빌드 → target/debug
cargo build --release # 릴리스 빌드 → target/release
cargo run # 빌드 후 실행
cargo test # 테스트 실행
--release 를 붙이면 최적화가 켜지는 대신 빌드가 느려지고 디버그 정보가 줄어든다.
동시성 회차에서 멀티스레드 성능을 재볼 때 이 차이가 꽤 크게 나서, 성능 얘기를
할 때는 항상 릴리스 빌드인지부터 확인하는 습관이 생겼다.
다음 글
다음 편은 첫 회차인 Rust의 핵심 기능 — 소유권·빌림·수명, 트레잇, Option/Result,
그리고 이 언어가 "안전하다"고 말할 때 그 안전이 정확히 무엇을 뜻하는지에 대한
정리다.