大家好,我是梦兽编程。欢迎回来与梦兽编程一起刷Rust的系列。
这是由 Google 的 Android开发团队的分享Rust课程。本课程涵盖了 Rust 的方方面面,从基本语法到泛型和错误处理等高级主题。
该课程的最新版本可以在 google.github.io/comprehensi…
如果你喜欢看梦兽编程的版本可以订阅跟着谷歌安卓团队学Rust订阅最新内容,梦兽编程也期待大家关注我的个人网站。
加入梦兽编程微信群,公众号回复111
即可加入交流群与梦兽进行交流。
标准库
在 Rust 中,标准库可以帮助建立一套由 Rust 库和程序使用的常见类型。这样,两个库可以顺利地一起工作,因为它们都使用相同的类型。实际上,Rust 包含标准库的数层:std 是 Main 模块的别名,用来作为应用通常使用库的一部分。alloc 是内存管理和指针分配相关的模块,为 Rust 的内存安全提供分配策略。core 是 Rust 语言的核心模块,包括语言的基本抽象,如借用和所有权的等。
Rust 的标准库提供了许多功能,可以极大地简化常见的编程任务。在这些标准库中,我们常用的标准库有:
- 键值对容器:HashMap 和 bimap:这些容器可以用于存储键值对,并提供了丰富的查询和更新操作。
- 字符串和字符 std::str 这是Rust中处理字符串最佳的方式,它提供了许多遍历的函数,例如查找子字符串、拆分、链接等。
- 字符串搜索和替换:std::search 和 std::replace:这些函数可用于在字符串中搜索子字符串并进行替换。
- 数组和向量:std::array 和 std::vector:这些容器用于存储和访问固定大小的数据结构,例如整数数组和向量。
- 线程:std::thread:可以使用 Rust 中的线程来实现并发代码,使其更加高效和可靠。
- 错误处理:std::error:std::error 引擎提供了可重入的错误处理,可以帮助程序员快速侦测并转错错误。
挠了很多神神叨叨的点,实际上 rust 标准库的用途主要是减少出错的几率,和效率。在写代码的过程中,经常会出现各种错误,rust 标准库提供了一些视觉化的工具来帮助你快速定位问题所在。同时 rust 的编译器会尽可能优化代码,避免死锁和竞态条件的发生。如果你使用了 rust 的标准库,实际代码执行效率也会比你想象的高得多。
文档
Rust是一门现代编程语言,在我们日常开发过程中。开发文档是一项非常重要的内容。几乎所有的标准库都拥有注释的功能,比如Option
和BinaryHeap
。Rust提供使用常用的注释进行给Rust Doc生成文本。
在Rust中注释的种类可以分为三类:
- 代码注释,用于说明某一块代码的功能,读者往往是同一个项目的协作开发者
- 文档注释,支持 Markdown,对项目描述、公共 API 等用户关心的功能进行介绍,同时还能提供示例代码,目标读者往往是想要了解你项目的人
- 包和模块注释,严格来说这也是文档注释中的一种,它主要用于说明当前包和模块的功能,方便用户迅速了解一个项目
通过这些注释,实现了 Rust 极其优秀的文档化支持,甚至你还能在文档注释中写测试用例,省去了单独写测试用例的环节,我直呼好家伙!
代码注释
代码注释是不会通过cargo doc
生成文档应用。它和我们常用的语言一样可以分类两类
行注释 //
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
// if rhs == 0 ?
if rhs == 0 {
return false;
}
lhs % rhs == 0
}
块注释/* ..... */
fn main() { /* 我 是 S u n ... 哎,好长! */ let name = "sunface"; let age = "???"; // 今年其实。。。挺大了 }
文档注释
这种注释可以通过cargo doc 的命令,可以用于把这些文档注释转换成 HTML 网页文件,最终展示给用户浏览,这样用户就知道这个包是做什么的以及该如何使用。
/// Determine whether the first argument is divisible by the second argument.
///
/// If the second argument is zero, the result is false.
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
if rhs == 0 {
return false;
}
lhs % rhs == 0
}
但是需要注意的是:
- 文档注释需要位于 lib 类型的包中,例如 src/lib.rs 中
- 文档注释可以使用 markdown语法!例如 # Examples 的标题,以及代码块高亮
- 被注释的对象需要使用 pub 对外可见,记住:文档注释是给用户看的,内部实现细节不应该被暴露出去
当然你也可以使用类似其他语言一样对文档块进行编码。
/** `add_two` 将指定值加2
let arg = 5; let answer = my_crate::add_two(arg);
assert_eq!(7, answer);
*/
pub fn add_two(x: i32) -> i32 {
x + 2
}
当我们需要查阅应用代码块拥有那些api与内容时cargo doc --open
,系统就会在浏览器打开一个文档HTML地址。
参考资料
[1]
google.github.io/comprehensi…: google.github.io/comprehensi…
本文使用 markdown.com.cn 排版