会展行业门户网站建设,做动态头像的网站,长沙装修公司性价比最高的是哪个,流量网站文章目录 Rust 学习笔记#xff08;卷二#xff09;八、工程1. package 和 cratepackage 总览包根#xff08;crate root#xff09; 2. 模块初识模块单个源文件中的嵌套模块使用具有层级结构的源文件构造嵌套模块 3. 文档4. 使用第三方包5. 打包自己的包 九、标准库十、多… 文章目录 Rust 学习笔记卷二八、工程1. package 和 cratepackage 总览包根crate root 2. 模块初识模块单个源文件中的嵌套模块使用具有层级结构的源文件构造嵌套模块 3. 文档4. 使用第三方包5. 打包自己的包 九、标准库十、多线程的并发编程十一、“不安全”编程unsafe 代码块全局变量与静态变量内部可变性 Rust 学习笔记卷二
八、工程
相比以前的 CRust 提出了包和模块的概念使工程管理变得更加有组织。下面我们会自顶向下的介绍 Rust 中有关工程的概念。
1. package 和 crate
package 总览
Rust 工程管理中最大的概念是 package其次是 crate。Rust 的 crate 可以是一个库也可以是一个可执行文件而 package 的作用则是将一个或多个 crate 组织起来。
Package 是使用 Cargo.toml 文件管理的这是我们所熟悉的而 crate 则有组织地被放在项目文件夹中包括
库包。需要存在 src/lib.rs 源文件。包名与项目名相同。一个项目只能有一个库包。可执行文件包。需要存在 src/main.rs 源文件。包名与项目名相同。更多可执行文件包。每个 src/bin/ 中的源文件都是一个包包名与文件名相同。
对比 C 来看package 可以看作 CMake 的 project而 crate 可以看作 CMake 的 target。
包根crate root
前面提到如果一个 package 包含唯一的库包0则需要存在 src/lib.rs 文件对于可执行文件包则需要存在 src/main.rs。像这种一个源文件代表一个 crate 的我们称为包根crate root。
包根只是一个源文件那多个源文件该怎么办方法是借助模块。模块的机制允许我们将包内的代码放在多个源文件中。
2. 模块
初识模块
Rust 中与模块相关的关键字是 mod。
Rust 程序 79mod // src/orange.rs
pub fn hello() {println!(Hello, orange!);
}
// src/main.rs
mod orange;
use orange::hello;
fn main() {hello();
}C 程序 79module // orange.cpp
export module orange; // 手动写明与文件名本身无关。
import std;
namespace orange { // 手动创建命名空间与模块无关。export void hello() {std::cout Hello, orange! std::endl;}
}
// 源.cpp
import orange;
using orange::hello;
int main() {hello();
}关于 Rust 程序 79 的新东西有
pub 关键字。如果要使用的东西不属于自己的父模块例如程序 79 中orange 模块和 main 模块是兄弟orange 模块不是 main 模块的父模块则只能使用公开的模块用 pub 关键字表示。这和 C 程序 79 中 hello 函数前的 export 关键字一样。mod 关键字。其功能是在包根所在目录查找指定名字的源文件并将源文件中的内容视为位于同名模块中例如程序 79 中在包根 main.rs 同目录下找到了 orange.rs将 orange.rs 中的内容视为位于模块 orange 中。use 关键字。一旦模块进入视野内例如程序 79 中通过 mod 语句在当前位置声明了一个模块又如通过配置依赖项已经引入了外部模块则可以使用 use 语句引入模块里的内容。使用 use 语句引入内容的可见性将在之后讲解。
与 C 要求必须在单独的文件里定义模块不同Rust 中允许在同一个源文件里定义模块。所以 Rust 的模块更像是 C 的模块和命名空间的结合体。
Rust 程序 80只有包根 mod orange {pub fn hello() {println!(Hello, orange!);}
}
use orange::hello;
fn main() {hello();
}C 程序 80假装是模块 import std;
namespace orange { // 只有命名空间没有模块。void hello() {std::cout Hello, orange! std::endl;}
}
using orange::hello;
int main() {hello();
}Rust 程序 80 中mod 块前没有再加 pub这是因为我们在下面使用它时已经能够看到它的完整实现了所以没有必要再加上 pub。
单个源文件中的嵌套模块
使用具有层级结构的源文件构造嵌套模块
3. 文档
4. 使用第三方包
5. 打包自己的包
九、标准库
十、多线程的并发编程
并发、异步。
十一、“不安全”编程
unsafe 代码块
全局变量与静态变量
理论上全局变量越少越好以防形成一盘散沙之势。然而全局变量通常也是无法避免的例如在使用单例设计模式时。
内部可变性