프로젝트 구조

프로젝트 구조

/src
Cargo.toml

엔트리포인트

src/main.rs: 실행가능한 프로그램

src/lib.rs: 라이브러리 크레이트

모듈

모듈선언은 코드내에서는 mod 키워드로 가능하다.

mod 키워드는 모듈을 선언하는역할과 불러오는 역할을 한다.

Cargo.toml에 적힌 크레이트나 모듈은 컴파일러가 암묵적으로 불러오기 때문에 mod를 사용할 필요가 없다.

mod modulename;
// or
mod {
    moduleitems
    ...
}

모듈이 프로젝트 폴더 내에서 표현되는 두 가지 방법

src/
├── main.rs  (안에 'mod A;' 선언)
└── A.rs     (O: 모듈 A로 인식됨)

src/
├── main.rs  (안에 'mod A;' 선언)
└── A/
    └── mod.rs (O: 모듈 A로 인식됨)

리눅스 책 > 모듈화의 장단점 파트

단점으로 성능저하가 거론되었는데 이는 사실이 아니다. 러스트의 모듈은 컴파일되어 단일 바이너리 파일이 되기때문에 모듈간의 호출이 성능에 영향을 주지 않는다. IPC는 더더욱 필요가 없다.

아마도 마이크로 커널의 모듈화의 단점을 말한 것 같은데 러스트 모듈을 설명하는 문맥에서는 혼동을 불러올 수 있어보인다.

pub

모듈이나 함수, 타입, 구조체 등의 선언 앞에 붙여 모듈 밖에서 접근할 수 있도록 한다.

use

use 크레이트::모듈::모듈::아이템

use는 임포트하는 키워드가 아니다. 단지 네임스페이스를 단축하기 위해 사용한다.

spuer: ../ 와 같은 역할

crate: 현재 크레이트를 기준으로 절대 경로(crate가 최상위이므로)로 표현가능하다.