- 발표: 유병조
- 리뷰: 이지한
- 서기: 정연집
이지한 실장님 : 코드리뷰
14장에서 다룰 내용은 아래와 같다.
- 릴리즈 프로필을 이용해 빌드 커스터마이징하기
- crates.io 에 라이브러리 배포하기
- 대규모 작업을 위한 작업공간 구성하기
- crates.io 에서 바이너리 설치하기
- 커스텀 명령어로 Cargo 확장하기
- Cargo의 메인 프로필
[profile.dev] opt-level = 0 [profile.release] opt-level = 3
- 프로필 설정법
- [profile.*]키워드를 통해 가능
- opt-level: 최저적화 수치이며 0~3사이값을 가짐.
- 공식문서 Profile 설명 페이지
- Crates.io에 크레이트를 배포해 코드를 다른 사람들과 공유 할 수도 있습니다.
- 문서화 주석
-
키워드: '///'
-
마크 다운 문법을 사용할 수 있다.
-
자주 사용되는 문서화 주석
* Panics: 문서화된 기능이 패닉을 일으킬 수 있는 시나리오입니다. 함수를 호출하는 사람들에게 "프로그램이 패닉을 일으키지 않게 하려면 이러한 상황에서는 이 함수를 호출하지 않아야 합니다" 라는 내용을 알려줍니다. * Errors: 해당 함수가 Result 를 반환할 경우에는 발생할 수 있는 에러의 종류와 해당 에러들이 발생하는 조건을 설명해 주어서 호출하는 사람이 여러 에러를 여러 방법으로 처리할 수 있도록 해야합니다. * Safety: 함수가 안전하지 않을(unsafe) 경우에 (19장에서 다루는 내용입니다) 왜 이 함수가 안전하지 않은지와 이 함수가 호출하는 사람에게 지키길 기대하는 불변성에 대해 알려주는 구절이 있어야 합니다.
-
- 문서화 주석내의 test코드 실행
- 키워드: cargo test
- 테스트 실행을 통해 사용하려는 라이브러리가 정상인지 체크를 하고 사용할 수 있다.
- 키워드: '///'
- 공식 문서화 안내 페이지
-
export함수 가져오기
- pub use를 통해 쉽게 가져올 수 있다.
//! # Art //! //! A library for modeling artistic concepts. pub use kinds::PrimaryColor; pub use kinds::SecondaryColor; pub use utils::mix; pub mod kinds { // --snip-- } pub mod utils { // --snip-- }
-
크레이트 문서화
- 문서 보기 명령: cargo doc
- 첫화면에 보여주기: pub use
- crate.io에 접속해 id를 만들고 api 키를 받은 뒤 로그인 하고 올리면 된다.
$ cargo login abcdefghijklmnopqrstuvwxyz012345
- name, license를 필수로 입력해주어야 한다.
- SPDX 에 없는 license를 사용하는 경우
- 해당 license의 텍스트를 파일 생성
- 자신의 프로젝트에 해당 파일을 포함
- license 대신 license-file을 추가해 해당 파일의 이름 넣기
[package]
name = "guessing_game"
license = "MIT"
- Crates.io에 배포하기
cargo publish
cargo yank
: 특정 버전을 종속성을 막아주는 기능.- yank의미
- Cargo.lock 을 가진 모든 프로젝트는 문제가 없을 것이며, 추후에 새로 생성될 Cargo.lock 파일은 끌어내려진 버전을 사용하지 않을 것
cargo yank --vers --undo
를 통해 yank취소 가능
함께 개발된 여러개의 관련된 패키지를 관리하도록 함.
- 작업 공간: 동일한 Cargo.lock 과 출력 디렉토리를 공유하는 패키지들의 집합
$ mkdir add
$ cd add
// Filename: add\\Cargo.toml
[workspace]
members = [
"adder",
"add-one",
]
$ cargo new --bin adder
$ cargo new add-one
- 작업공간 구조
├── Cargo.lock
├── Cargo.toml
├── add-one
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── target
// Filename: adder/Cargo.toml
[dependencies]
add-one = { path = "../add-one" }
extern crate add_one;
fn main() {
let num = 10;
println!("Hello, world! {} plus one is {}!", num, add_one::add_one(num));
}
- cargo run -p adder를 통해 작업공간내에서 특정 크레이터를 실행할 수도 있다.
- Cargo.toml의 내부에 '[dependencies]' 절에 추가 크레이트를 작성한뒤, 코드내에 'extern crate [crate명]'을 통해 사용.
- 작업공간 최상위 Cargo.lock에 종속성에 대한 정보가 포함되어 서로 다른 크레이트 간 외부 크레이트 호환성을 보장한다.
- 크레이트 함수에 대한 테스트 코드 추가하면 'cargo test'실행 시,동작한다.
- 특정 크레이트 테스트 코드실행을 위해서 -p옵션을 명시한다.
- 작업공간내 여러 크레이터 배포 시, 각각을 'cargo publish'해야한다.
- 외부 툴 같은 바이너리를 설치하는 방법
- cargo install ripgrep
- 따로 설정을 건들지 않으셨다면 $HOME/.cargo/bin 폴더에 저장
- 커스텀 명령어: $PATH 내 어떤 바이너리의 이름이 cargo-something으로 되어있으면 확장명령이 가능하다.
- 'cargo --list' 명령어로 커스텀 명령어들을 볼 수 있다.
- 스터디 장: 15장
- 날짜: 8월 10일
- 과제: 플러그(https://www.acmicpc.net/problem/2010)
- 이지한: 0
- 김기덕: 0
- 유병조: 0
- 이명수: 0
- 이재현: 0
- 정연집: 0
- 허신: 10,000
-
이지한: 과제 문제가 너무 쉬운 것 같음. 다음에는 이런 곳도 고민해보기
-
김기덕: 이번 장 공부하면서 나중에 수학 관련 크레이트 만들어 보고 싶다는 생각을 했습니다~!
-
유병조: 라이브러리 만들어서 올려보고싶네요~
-
이명수: 과제로 gui쪽 해보는 것도 재미있을 거 같아요~~
[name=이지한] https://www.youtube.com/watch?v=sDLrNAB7neY 요런 영상이 있네영
-
이재현: 작업 공간을 생성하고, 라이브러리를 깔끔하게 정리해보고 싶었는데 이번에 해당 내용이 나와서 좋았어요 그리고 gui 과제도 재밌을 것 같아요
-
정연집: 나중에 크레이트 꼭 만들어보고 싶다는 생각이 들었습니다~
-
허신: workspace 유용할 것 같아요, 코딩 테스트 준비 - 기초 이쪽 문제 괜찮을 것 같아요!