Appearance
第五部分 实用设施
第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。