Rust — 컴파일러가 막는 것들 · 소유권과 빌림 · 실습
컴파일러와 대화한다
목표
Rust 컴파일러가 무엇을 왜 막는지를 오류 메시지를 읽으며 익힙니다.
이 실습에는 일부러 빌드를 실패시키는 단계가 있습니다 — 그 메시지가
배울 것이기 때문입니다.
왜 중요한가
Rust 를 어렵게 만드는 것은 문법이 아니라 소유권입니다. 그리고 소유권을
배우는 가장 빠른 길은 컴파일러에게 막혀 보는 것입니다.
막히는 두 가지가 실제로는 미래의 버그입니다.
E0382(moved value) — 해제된 메모리를 쓰는 사고E0502(borrow conflict) — 컨테이너가 재할당된 뒤 옛 포인터를 읽는 사고
C++ 에서는 둘 다 조용히 통과하고 나중에 이상한 값이 나옵니다.
환경
네트워크가 없어 cargo add 는 동작하지 않습니다. 이 실습은 표준
라이브러리만 쓰므로 상관없습니다.
cargo build --offline 빌드cargo run --offline 실행cargo clippy --offline 더 나은 방법 제안단계
모든 파일은 /root/work/own 안에 만듭니다.
1. cargo init --name own
2. examples/move_err.rs — 일부러 실패 → 02-move.txt
3. examples/move_ok.rs — help 를 따라 고치기
4. examples/borrow_err.rs — 일부러 실패 → 04-borrow.txt
5. examples/borrow_ok.rs — 범위를 좁혀 통과
6. Result 로 에러 다루기 → 06-result.txt
7. clippy → 07-clippy.txt
8. 무엇이 막혔고 왜였는지 → 08-notes.md
왜 examples/ 인가 — cargo build 는 examples 를 건드리지 않습니다.
일부러 깨뜨린 코드를 거기 두면 프로젝트 전체 빌드는 계속 통과합니다.
참고
- 오류 메시지를 끝까지 읽으세요.
help:줄에 고치는 법이 있습니다. - 소유권과 싸우다 막히면
clone()하고 넘어가도 됩니다. 성능이 문제가
되면 그때 고칩니다 — 처음부터 참조로 최적화하려는 것이 Rust 를 어렵게
만드는 가장 흔한 이유입니다.
단계 8개
- 프로젝트를 만든다
- 일부러 옮겨 보고 오류를 읽는다
- 컴파일러가 말한 대로 고친다
- 빌림 규칙에 부딪혀 본다
- 범위를 좁혀 통과시킨다
- 에러를 Result 로 다룬다
- clippy 에게 물어본다
- 무엇이 막혔고 왜였는지