Rust 를 잘 쓰는 법 1 — clippy 와 rustfmt 로 습관을 잡는다
clippy 는 컴파일은 되지만 Rust 답지 않거나 실수하기 쉬운 코드를 짚어 주는 린터이고, rustfmt 는 코드 모양을 한 가지로 맞추는 포매터다. 다른 언어 습관으로 쓴 함수 하나에서 clippy 경고 다섯 개를 받고, help 대로 고쳐 깨끗하게 만든다.
clippy 는 컴파일은 되지만 Rust 답지 않거나 실수하기 쉬운 코드를 짚어 주는 린터이고, rustfmt 는 코드 모양을 한 가지로 맞추는 포매터다. 다른 언어 습관으로 쓴 함수 하나에서 clippy 경고 다섯 개를 받고, help 대로 고쳐 깨끗하게 만든다.
Rust 실무에서 자주 쓰는 크레이트를 분야별로 정리한다(serde·clap·tokio·axum·thiserror·anyhow). 직접 적은 4개가 실제로는 25개를 끌어온다는 것을 cargo tree 로 확인하고, 고르는 기준을 본다.
Rust 를 고르면 컴파일 시간·디스크·배우는 시간을 치른다. axum 웹 서버 하나가 처음 빌드에 크레이트 48개·11초·target 173MB 를 쓰고, 1.0 이 안 된 크레이트도 많다. 언제 피하는 편이 나은지 기준을 정리한다.
34편의 wordfreq 를 다시 만든다. 세는 부분을 lib.rs 로 빼고 반복자로 줄이며, 파일마다 스레드로 세고, 테스트 넷으로 고정한다. 같은 횟수는 알파벳 순이다.
Rust 테스트는 #[test] 함수이고 cargo test 가 돌린다. assert_eq! 가 틀리면 left·right 두 값을 찍고 실패한다. 패닉이 맞는 동작은 #[should_panic] 으로 시험한다.
Rust 외부 라이브러리를 크레이트라 한다. Cargo.toml 에 정확한 버전을 적으면 cargo 가 받아 컴파일하고, 안 적고 use 하면 E0432 가 난다. 쓴 버전은 Cargo.lock 에 남는다.
입문 구간에서 배운 것만으로 명령줄 도구를 만든다. 파일 이름을 인자로 받아(env::args) 파일을 읽고(fs::read_to_string), HashMap 으로 단어를 세서 많이 나온 10개를 찍는다. 인자가 없거나 파일이 없으면 이유를 찍고 종료 코드 2·1 로 끝낸다.
Rust 컴파일 오류는 길어 보여도 세 군데만 읽으면 된다. error 줄이 무엇이 틀렸는지, --> 줄이 어디인지, help 줄이 고치는 법이다. 느낌표·세미콜론·따옴표를 빠뜨린 오류를 실제 출력으로 읽어 본다.
rustup 명령 한 줄이면 컴파일러 rustc 와 빌드 도구 cargo 가 함께 깔린다. cargo new 로 프로젝트를 만들고 cargo run 으로 첫 프로그램을 돌려 본다.