Skip to content

第五部分 实用设施

第32章 项目和模块

本书中的绝大部分代码示例都是很短的,一个文件就可以搞定。但是,任何一个规模稍微大一点的项目都不能这么写。我们需要一个机制,把一个项目切分成若干小部分,每个部分又可以切分成更小的部分,层层抽象,通过这种方式来管理复杂的代码。这就是很多编程语言中都有的“模块系统”。

Rust用了两个概念来管理项目:一个是 crate,一个是 mod。

  • crate 简单理解就是一个项目。crate 是 Rust 中的独立编译单元。每个 crate 对应生成一个库或者可执行文件(如.lib .dll .so .exe等)。官方有一个 crate 仓库,可以供用户发布各种各样的库,用户也可以直接使用这里面的开源库。

  • mod 简单理解就是命名空间。mod 可以嵌套,还可以控制内部元素的可见性。

crate 和 mod 有一个重要区别是:crate 之间不能出现循环引用;而 mod 是无所谓的,mod1要使用 mod2 的内容,同时 mod2 要使用 mod1 的内容,是完全没问题的。

在 Rust 里面,crate 才是一个完整的编译单元(compile unit)。也就是说,rustc编译器必须把整个 crate 的内容全部读进去才能执行编译,rustc不是基于单个的.rs文件或者 mod 来执行编译的。 作为对比,C/C++ 里面的编译单元是单独的.c/.cpp文件以及它们所有的 include 文件。每个.c/.cpp文件都是单独编译,生成.o文件,再把这些.o文件链接起来。

本章我们详细讲解一下 crate 和 mod。

Released under the MIT License