元数据
Rust权威指南
- 书名: Rust权威指南
- 作者: 史蒂夫·克拉伯尼克 卡罗尔·尼科尔斯
- 简介: 本书由Rust核心开发团队编写而成,由浅入深地探讨了Rust语言的方方面面。从学习函数、选择数据结构及绑定变量入手,逐步介绍所有权、trait、生命周期、安全保证等高级概念,模式匹配、错误处理、包管理、函数式特性、并发机制等实用工具,以及两个完整的项目开发实战案例。 作为开源的系统级编程语言,Rust可以帮助你编写出更为快速且更为可靠的软件,在给予开发者底层控制能力的同时,通过深思熟虑的工程设计避免了传统语言带来的诸多麻烦。 本书被视为Rust开发工作的必读书目,适合所有希望评估、入门、提高和研究Rust语言的软件开发人员阅读。
- 出版时间: 2020-05-01 00:00:00
- ISBN: 9787121387067
- 分类: 计算机-计算机综合
- 出版社: 电子工业出版社
- PC地址:https://weread.qq.com/web/reader/d733256071eeeed9d7322fd
高亮划线
Hello, World!
📌 Rust中所有以!结尾的调用都意味着你正在使用一个宏而不是普通函数。 ⏱ 2022-11-10 09:50:45
Hello, Cargo!
📌 在Rust中,我们把代码的集合称作包(crate) ⏱ 2022-11-10 09:54:23
📌 首次使用命令cargo build构建的时候,它还会在项目根目录下创建一个名为Cargo.lock的新文件,这个文件记录了当前项目所有依赖库的具体版本号 ⏱ 2022-11-10 09:55:19
📌 事实上,大部分Rust用户在编写程序的过程中都会周期性地调用cargo check以保证自己的程序可以通过编译,只有真正需要生成可执行程序时才会调用cargo build ⏱ 2022-11-10 09:56:30
处理一次猜测
📌 。在Rust中,变量都是默认不可变的 ⏱ 2022-11-10 11:35:31
📌 String是标准库中的一个字符串类型,它在内部使用了UTF-8格式的编码并可以按照需求扩展自己的大小。 ⏱ 2022-11-10 11:35:44
📌 String::new中的::语法表明new是String类型的一个关联函数(associated function)。我们会针对类型本身来定义关联函数,比如本例中的String,而不会针对String的某个特定实例。关联函数在某些语言中也被称为静态方法(static method)。 ⏱ 2022-11-10 11:35:55
📌 参数前面的&意味着当前的参数是一个引用。你的代码可以通过引用在不同的地方访问同一份数据,而无须付出多余的拷贝开销。不得不说,引用是一个较为复杂的概念,而Rust的核心竞争力之一,就是它保证了我们可以简单并安全地使用引用功能 ⏱ 2022-11-10 11:36:47
📌 在Rust标准库中,你可以找到许多以Result命名的类型,它们通常是各个子模块中Result泛型的特定版本 ⏱ 2022-11-10 11:37:41
📌 Result是一个枚举类型。枚举类型由一系列固定的值组合而成,这些值被称作枚举的变体。 ⏱ 2022-11-10 11:37:45
📌 消除警告最正确的方法当然是编写对应的错误处理代码,为了简单起见,我们在这里选择使用expect方法,它会让程序在出现错误时直接终止运行并退出。 ⏱ 2022-11-10 11:38:49
📌 字符串中的那对花括号{}则是一个占位符,它用于将后面的参数值插入自己预留的特定位置。 ⏱ 2022-11-10 11:39:01
生成一个保密数字
📌 Cargo最主要的功能就是帮助我们管理和使用第三方库。 ⏱ 2022-11-10 11:39:35
📌 这里的[dependencies]区域被用来声明项目中需要用到的全部依赖包及其版本号。 ⏱ 2022-11-10 11:39:46
📌 在Rust的生态中,crates.io是人们用于分享各种各样开源Rust项目的网站。 ⏱ 2022-11-10 11:40:08
📌 通过Cargo.lock文件确保我们的构建是可重现的 ⏱ 2022-11-10 11:40:41
📌 这里的Rng是一个trait(特征),它定义了随机数生成器需要实现的方法集合。为了使用这些方法,我们需要显式地将它引入当前的作用域中 ⏱ 2022-11-10 13:18:00
📌 cargo doc —open,它可以为你在本地构建一份有关所有依赖的文档,并自动地在浏览器中将文档打开来供你查阅。 ⏱ 2022-11-10 13:23:04
比较猜测数字与保密数字
📌 Ordering也是一个枚举类型,它拥有Less、Greater及Equal这3个变体。它们分别被用来表示比较两个数字之后可能产生的3种结果。 ⏱ 2024-04-28 09:06:05
📌 的cmp方法❸能够为任何可比较的值类型计算出它们比较后的结果 ⏱ 2024-04-28 09:06:29
📌 match表达式由数个分支(arm)组成,每个分支都包含一个用于匹配的模式(pattern),以及匹配成功后要执行的相应的代码。 ⏱ 2022-11-10 13:24:04
📌 Rust中的match结构及模式是一类非常强大的工具,它们提供了依据不同条件执行不同代码的能力,并能够确保你不会遗漏任何分支条件。我们将在第6章和第18章分别对这两个功能进行详细的介绍。 ⏱ 2024-04-28 09:06:47
📌 但Rust允许使用同名的新变量guess来隐藏(shadow)旧变量的值。 ⏱ 2022-11-10 13:25:00
使用循环来实现多次猜测
📌 在Rust中,loop关键字会创建一个无限循环。 ⏱ 2024-04-28 09:09:53
📌 我们使用了match表达式来替换之前的expect方法,这是我们处理错误行为的一种惯用手段。 ⏱ 2024-04-28 09:14:17
总结
📌 所有权 ⏱ 2024-04-28 09:15:09
变量与可变性
📌 Rust中的变量默认是不可变的 ⏱ 2024-04-28 09:23:55
📌 而当数据结构较为轻量的时候,采用更偏向函数式的风格,通过创建新变量来进行赋值,可能会使代码更加易于理解。在类似这样的情形下,为了可读性而损失少许的性能也许是值得的。变量与常量之间的不同 ⏱ 2024-04-28 09:27:13
📌 常量(constant) ⏱ 2024-04-28 09:36:17
📌 首先,我们不能用mut关键字来修饰一个常量。常量不仅是默认不可变的,它还总是不可变的。 ⏱ 2024-04-28 09:36:26
📌 其次,你需要使用const关键字而不是let关键字来声明一个常量。在声明的同时,你必须显式地标注值的类型 ⏱ 2024-04-28 09:36:33
📌 常量可以被声明在任何作用域中,甚至包括全局作用域。 ⏱ 2024-04-28 09:36:47
📌 只能将常量绑定到一个常量表达式上,而无法将一个函数的返回值,或其他需要在运行时计算的值绑定到常量上。 ⏱ 2024-04-28 09:36:56
📌 在Rust程序中,我们约定俗成地使用以下画线分隔的全大写字母来命名一个常量,并在数值中插入下画线来提高可读性。 ⏱ 2024-04-28 09:38:15
📌 第一个变量被第二个变量隐藏(shadow)了。 ⏱ 2024-04-28 09:38:58
📌 隐藏机制不同于将一个变量声明为mut,因为如果不是在使用let关键字的情况下重新为这个变量赋值,则会导致编译错误。通过使用let,我们可以对这个值执行一系列的变换操作,并允许这个变量在操作完成后保持自己的不可变性。 ⏱ 2024-04-28 09:39:41
📌 隐藏机制与mut的另一个区别在于:由于重复使用let关键字会创建出新的变量,所以我们可以在复用变量名称的同时改变它的类型。 ⏱ 2024-04-28 09:40:23
数据类型
📌 标量类型是单个值类型的统称。Rust中内建了4种基础的标量类型:整数、浮点数、布尔值及字符。 ⏱ 2024-04-28 09:42:26