pull/512/head
sunface 3 years ago
commit 086396bca9

@ -88,7 +88,7 @@ let slice = &s[..];
> println!("{}",a);
>```
>因为我们只取 `s` 字符串的前两个字节,但是本例中每个汉字占用三个字节,因此没有落在边界处,也就是连 `中` 字都取不完整,此时程序会直接崩溃退出,如果改成 `&s[0..3]`,则可以正常通过编译。
> 因此,当你需要对字符串做切片索引操作时,需要格外小心这一点, 关于该如何操作 UTF-8 字符串,参见[这里](#操作-UTF8-字符串)
> 因此,当你需要对字符串做切片索引操作时,需要格外小心这一点, 关于该如何操作 UTF-8 字符串,参见[这里](#操作-utf8-字符串)
字符串切片的类型标识是 `&str`,因此我们可以这样声明一个函数,输入 `String` 类型,返回它的切片: `fn first_word(s: &String) -> &str `

@ -47,4 +47,4 @@ fn main() {
有几点可以留意下:
- 字符串使用双引号 `""` 而不是单引号 `''`Rust 中单引号是留给单个字符类型(`char`)使用的
- Rust 使用 `{}` 来作为格式化输出占位符,其它语言可能使用的是 `%s``%d``%p` 等,由于 `println!` 会自动推导出具体的类型, 因此无需手动指定
- Rust 使用 `{}` 来作为格式化输出占位符,其它语言可能使用的是 `%s``%d``%p` 等,由于 `println!` 会自动推导出具体的类型因此无需手动指定

@ -20,7 +20,7 @@
在其它语言中,我们用 `var a = "hello world"` 的方式给 `a` 赋值,也就是把等式右边的 `"hello world"` 字符串赋值给变量 `a` ,而在 Rust 中,我们这样写: `let a = "hello world"` ,同时给这个过程起了另一个名字:**变量绑定**。
为何不用赋值而用绑定呢(其实你也可以称之为赋值,但是绑定的含义更清晰准确)?这里就涉及 Rust 最核心的原则——**所有权**,简单来讲,任何内存对象都是有主人的,而且一般情况下完全属于它的主人,绑定就是把这个对象绑定给一个变量,让这个变量成为它的主人(聪明的读者应该能猜到,在这种情况下,该对象之前的主人就会丧失对该对象的所有权),像极了我们的现实世界,不是吗?
为何不用赋值而用绑定呢(其实你也可以称之为赋值,但是绑定的含义更清晰准确)?这里就涉及 Rust 最核心的原则——**所有权**,简单来讲,任何内存对象都是有主人的,而且一般情况下完全属于它的主人,绑定就是把这个对象绑定给一个变量,让这个变量成为它的主人聪明的读者应该能猜到,在这种情况下,该对象之前的主人就会丧失对该对象的所有权,像极了我们的现实世界,不是吗?
至于为何要采用所有权这种复杂的东东,先别急,等时机合适,我们会为你详细道来。
@ -93,9 +93,9 @@ The value of x is: 5
The value of x is: 6
```
选择可变还是不可变,更多的还是取决于你的使用场景,例如不可变可以带来安全性,但是丧失了灵活性和性能(如果你要改变,就要重新创建一个新的变量,这里涉及到内存对象的再分配)。而可变变量最大的好处就是使用上的灵活性和性能上的提升。
选择可变还是不可变,更多的还是取决于你的使用场景,例如不可变可以带来安全性,但是丧失了灵活性和性能(如果你要改变,就要重新创建一个新的变量,这里涉及到内存对象的再分配)。而可变变量最大的好处就是使用上的灵活性和性能上的提升。
例如,在使用大型数据结构或者热点代码路径(被大量频繁调用)的情形下,在同一内存位置更新实例可能比复制并返回新分配的实例要更快。使用较小的数据结构时,通常创建新的实例并以更具函数式的风格来编写程序,可能会更容易理解,所以值得以较低的性能开销来确保代码清晰。
例如,在使用大型数据结构或者热点代码路径(被大量频繁调用)的情形下,在同一内存位置更新实例可能比复制并返回新分配的实例要更快。使用较小的数据结构时,通常创建新的实例并以更具函数式的风格来编写程序,可能会更容易理解,所以值得以较低的性能开销来确保代码清晰。
### 变量解构
@ -154,7 +154,7 @@ const MAX_POINTS: u32 = 100_000;
>在实际使用中,最好将程序中用到的硬编码值都声明为常量,对于代码后续的维护有莫大的帮助。如果将来需要更改硬编码的值,你也只需要在代码中更改一处即可。
### 变量遮蔽(shadowing)
### 变量遮蔽shadowing
Rust 允许声明相同的变量名,在后面声明的变量会遮蔽掉前面声明的,如下所示:

@ -73,7 +73,7 @@ Rust 的开发效率可以用先抑后扬来形容。在刚开始上手写项目
语言难学,也有好处。一旦掌握,你将具备较强的不可替代性,不再是一个简单的工具人角色。看看现在内卷严重的 Java工具人有多少一个人离职另外一个人很快就能替补上。
当然,我不是说 Rust 会给公司带来这种隐形的维护成本,毕竟这其实是一种双赢,公司收获了更优秀的程序员(不可否认的是 Rust 程序员普遍确实水平更高,毕竟都是有很好的其它语言基础、也很有追求的自驱型人才),而你也收获了更稳定的工作环境,甚至是更高的收入。
当然,我不是说 Rust 会给公司带来这种隐形的维护成本,毕竟这其实是一种双赢,公司收获了更优秀的程序员(不可否认的是 Rust 程序员普遍来说水平确实更高,毕竟都是有很好的其它语言基础、也很有追求的自驱型人才),而你也收获了更稳定的工作环境,甚至是更高的收入。
### 团队的好处
@ -149,7 +149,7 @@ Rust 语言表达能力更强,性能更高。同时线程安全方面 Rust 也
- 对于一般的用户edition 大版本的发布会告诉他们Rust 语言相比上次大版本发布,有了重大的改进,值得一看
- 对于 Rust 语言开发者,可以让他们的工作成果更快的被世人所知,不必锦衣夜行
好了,相信大家听了这么多 Rust 的优点,已经迫不及待想要开始学习旅程,那么容我引用一句 CS 的经典台词Ok, Let's go.
好了,相信大家听了这么多 Rust 的优点,已经迫不及待想要开始学习旅程,那么容我引用一句 CSCounter-Strike反恐精英 的经典台词Ok, Let's go.
## 总结

@ -25,7 +25,7 @@ Rust 跟其它语言不一样,你无法看了一遍语法,然后就能上手
在以前我可能会推荐看官方那本书的英文原版 + async book + nomicon 这几本书的组合,但是现在有了一本更适合中国用户的书籍,那就是 [<<Rust语言圣经>>](https://github.com/sunface/rust-course),内容好坏大家一读即知,光就文字而言,那绝对是行云流水般的阅读体验,可以极大提升你的学习效率,也不再因为反复读也读不懂一句话而烦闷不堪。
## 千万别从链表或图开始练手
CS 课程中我们会学习大量的常用数据结构和算法,因此大家都养成了一种好习惯:学习一门新语言,先用它写个链表或图试试。
CSComputer Science计算机科学 课程中我们会学习大量的常用数据结构和算法,因此大家都养成了一种好习惯:学习一门新语言,先用它写个链表或图试试。
我的天,在 Rust 中**千万别这么干**,你是在扼杀自己之前的努力!因为不像其它语言,链表在 Rust 中简直是地狱一般的难度,我见过太多英雄好汉难过链表关,最终黯然退幕。我不希望正在阅读此文的你也成为其中一个 :

@ -3,7 +3,7 @@
> 原文链接: https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/ ,由于原文过长,译文进行了适当的精简(例如夸 AWS 的部分 - , -)
Rust 是一门完全开源的语言,在 2015 年发布了 1.0 版本,但是在 2020 年 才迎来了真正的大发展契机,这是由于 Rust 的开源支持由 Molzilla 移交给了 [Rust基金会](https://foundation.rust-lang.org/),后者是由 亚马逊云AWS、谷歌、华为、微软和 Mozilla 共同创建的非营利性组织。
Rust 是一门完全开源的语言,在 2015 年发布了 1.0 版本,但是在 2020 年 才迎来了真正的大发展契机,这是由于 Rust 的开源支持由 Mozilla 移交给了 [Rust基金会](https://foundation.rust-lang.org/),后者是由 亚马逊云AWS、谷歌、华为、微软和 Mozilla 共同创建的非营利性组织。
在 AWSRust 已经成为构建大规模基础设施的关键,其中一部分:

Loading…
Cancel
Save