</>PatchNote
목록으로

2024-07-06

HSPACE Rust 특강 #0 — 시작하며

RustHSPACE 2024Linux Kernel

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 — 각 단계의 중간 표현 출력

특히 ASMMIR 을 볼 수 있다는 게 컸다. 뒤에 나올 "이 추상화는 런타임 비용이 없다"는 이야기를, 말로 믿는 게 아니라 어셈블리를 직접 열어서 확인할 수 있기 때문이다. 클로저나 이터레이터가 정말 인라인되어 사라지는지 궁금할 때마다 여기로 돌아왔다.

설치와 프로젝트 세팅

로컬 환경은 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, 그리고 이 언어가 "안전하다"고 말할 때 그 안전이 정확히 무엇을 뜻하는지에 대한 정리다.