파일시스템 계층

모듈의 내용을 기술하지 않으면, 러스트는 다른 파일에서 그 내용을 읽습니다:

mod garden;

위 코드는 러스트로 하여금 garden모듈의 내용을 src/garden.rs에서 찾도록 합니다. 비슷하게, garden::vegetables 모듈은 src/garden/vegetables.rs에서 찾습니다.

crate(크레이트)의 루트는 아래 경로 입니다:

  • src/lib.rs (라이브러리 크레이트)
  • src/main.rs (바이너리 크레이트)

모듈도 “내부 문서 주석“을 사용하여 문서화할 수 있습니다. 이러한 모듈은 모듈이 포함된 항목(이 경우에는 모듈)을 문서화합니다.

//! This module implements the garden, including a highly performant germination
//! implementation.

// Re-export types from this module.
pub use seeds::SeedPacket;
pub use garden::Garden;

/// Sow the given seed packets.
pub fn sow(seeds: Vec<SeedPacket>) { todo!() }

/// Harvest the produce in the garden that is ready.
pub fn harvest(garden: &mut Garden) { todo!() }
  • module/mod.rsmodule.rs로 바꾼다 하더라도 Rust 2018에서는 하위 모듈을 사용할 수 있습니다.

  • filename.rsfilename/mod.rs대신 사용할 수 있도록 하는 주된 이유는, mod.rs라는 이름을 가진 파일이 많을 경우 IDE에서 이들을 서로 구별하는게 힘들기 때문입니다.

  • 폴더를 이용해서 더 깊은 계층 구조를 구현할 수 있습니다. 심지어는 메인 모듈이 파일이더라도요:

    src/
    ├── main.rs
    ├── top_module.rs
    └── top_module/
        └── sub_module.rs
    
  • 러스트가 어디서 모듈들을 찾을지는 컴파일러 디렉티브로 변경 가능합니다:

    #[path = "some/path.rs"]
    mod some_module;

    이는 Go언어 에서처럼 어떤 모듈의 테스트를 some_module_test.rs 같은 파일에 두고 싶은 경우에 유용합니다.