Merge branch 'sunface:main' into fix-typo

pull/1159/head
gfzum 2 years ago committed by GitHub
commit ee7d5f520f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -81,7 +81,7 @@ error: test failed, to rerun pass `--lib`
## 务必成功的测试用例 ## 务必成功的测试用例
接着,改进型测试驱动的第二步了:编写注定成功的测试。当然,前提条件是实现我们的 `search` 函数。它包含以下步骤: 接着就是测试驱动的第二步:编写注定成功的测试。当然,前提条件是实现我们的 `search` 函数。它包含以下步骤:
- 遍历迭代 `contents` 的每一行 - 遍历迭代 `contents` 的每一行
- 检查该行内容是否包含我们的目标字符串 - 检查该行内容是否包含我们的目标字符串

@ -14,7 +14,7 @@ fn add<T: std::ops::Add<Output = T>>(a:T, b:T) -> T {
通过 `std::ops::Add` 特征来限制 `T`,只有 `T` 实现了 `std::ops::Add` 才能进行合法的加法操作,毕竟不是所有的类型都能进行相加。 通过 `std::ops::Add` 特征来限制 `T`,只有 `T` 实现了 `std::ops::Add` 才能进行合法的加法操作,毕竟不是所有的类型都能进行相加。
这些都说明一个道理,特征定义了**一个可以被共享的行为,只要实现了特征,你就能使用该行为**。 这些都说明一个道理,特征定义了**一组可以被共享的行为,只要实现了特征,你就能使用这组行为**。
## 定义特征 ## 定义特征

@ -1,32 +1,32 @@
# 避免从入门到放弃 # 避免从入门到放弃
很多人都在学 Rust ing也有很多人在放弃 ing。想要顺利学完 Rust大家需要谨记本文列出的内容否则这极有可能是又又又一次从入门到放弃之旅。 很多人都在学 Rust ing也有很多人在放弃 ing。想要顺利学完 Rust大家需要谨记本文列出的内容否则这极有可能是又双叒叕从入门到放弃之旅。
Rust 是一门全新的语言,它会带给你前所未有的体验,提升你的通用编程水平,甚至于赋予你全新的编程思想。在此时此刻,大家可能还半信半疑,但是当学完它再回头看时,可能你也会认同这些貌似浮夸的赞美。 Rust 是一门全新的语言,它会带给你前所未有的体验,提升你的通用编程水平,甚至于赋予你全新的编程思想。在此时此刻,大家可能还半信半疑,但是当学完它再回头看时,你肯定也会认同这些貌似浮夸的赞美。
## 避免试一试的心态 ## 避免试一试的心态
在学习 Go、Python 等编程语言时,你可能会一边工作一边轻松愉快的学习它们,但是 Rust 不行。原因如文章开头所说,在学习 Rust 的同时你会收获很多语言之外的知识,因此 Rust 在入门阶段比很多编程语言要更难,但是一旦入门,你将收获一个全新的自己,成为一个更加优秀的程序员。 在学习 Go、Python 等编程语言时,你可能会一边工作一边轻松愉快的学习它们,但是 Rust 不行。原因如文章开头所说,在学习 Rust 的同时你会收获很多语言之外的知识,因此 Rust 在入门阶段比很多编程语言要更难,但是一旦入门,你将收获一个全新的自己,成为一个更加优秀的程序员。
在学习过程中,一开始可能会轻松愉快,但是在开始 Rust 核心概念时(所有权、借用、生命周期、智能指针等),难度可能会陡然提升,此时就需要认真对待起来,否则会为后面埋下很多难以填补的坑,结果最后你可能只有两个选择:重新学一遍 or 放弃。 在学习过程中,一开始可能会轻松愉快,但是在开始接触 Rust 核心概念时(所有权、借用、生命周期、智能指针等),难度会陡然提升,此时就需要认真对待起来,否则会为后面埋下难以填补的坑: 结果最后你可能只有两个选择 - 重新学 or 放弃。
因此,在学习过程中,给大家三点建议: 因此,在学习过程中,给大家三点建议:
- 要提前做好会遇到困难的准备,因为如上所说,学习 Rust 不仅仅是在学习一门编程语言 - 要提前做好会遇到困难的准备,因为如上所说,学习 Rust 不仅仅是在学习一门编程语言
- 不要抱着试一试的心态去试一试,否则是浪费时间和消耗学习激情作为连续七年全世界最受喜欢的语言Rust 不仅仅是值得试一试 :) - 不要抱着试一试的心态去试一试,否则是浪费时间和消耗学习激情,作为连续七年荣获全世界最受喜欢桂冠的语言Rust 不仅仅是值得试一试 :)
- 深入学习一本好书或教程 - 深入学习一本好书或教程
总之Rust 入门难,但是在你一次次克服艰难险阻的同时,也一次次收获了与众不同的编程经验,最后历经九九八十一难,立地成大佬。 给自己一个机会,也给 Rust 一个机会 总之Rust 入门难,但是在你一次次克服艰难险阻的同时,也一次次收获了与众不同的编程经验,最后历经九九八十一难,立地成大佬。 给自己一个机会,也给 Rust 一个机会
## 深入学习一本好书 ## 深入学习一本好书
Rust 跟其它语言不一样,你无法看了一遍语法,然后就能上手写代码,对,我说的就是对比 Go 语言,后者的简单易用是有目共睹的。 Rust 跟其它语言不,你无法看了一遍语法,然后就能上手写代码,对,我说的就是对比 Go 语言,后者的简单易用是有目共睹的。
这些年,我遇到过太多在网上看了一遍菜鸟教程(或其它简易教程)就上手写 demo 甚至项目的同学,无一例外,都各种碰壁、趟坑,最后要么放弃,要么回炉重造,之前的时间和精力基本等同浪费。 这些年,我遇到过太多在网上看了一遍菜鸟教程(或其它简易教程)就上手写 demo 甚至项目的同学,无一例外,都各种碰壁、趟坑,最后要么放弃,要么回炉重造,之前的时间和精力基本等同浪费。
因此,大家一定要舍得投入时间,沉下心去读一本好书,这本书会带你深入浅出地学习使用 Rust 所需的各种知识,还会带你提前趟坑,这些坑往往是需要大量的时间才能领悟的。 因此,大家一定要舍得投入时间,沉下心去读一本好书,这本书会带你深入浅出地学习使用 Rust 所需的各种知识,还会带你提前趟坑,这些坑往往是需要大量的时间才能领悟的。
在以前我可能会推荐看官方那本书的英文原版 + async book + nomicon 这几本书的组合,但是现在有了一本更适合中国用户的书籍,那就是...你们猜,内容好坏大家一读即知,光就文字而言,那绝对是行云流水般的阅读体验,可以极大提升你的学习效率,也不再因为反复读也读不懂一句话而烦闷不堪。 在以前我可能会推荐看 Rust Book + async book + nomicon 这几本英文书的组合,但是现在有了一本更适合中国用户的书籍,那就是...你们猜,内容好坏大家一读即知,光就文字而言,那绝对是行云流水般的阅读体验,可以极大提升学习效率,也不再因为反复读也读不懂一句话而烦闷不堪。
## 千万别从链表或图开始练手 ## 千万别从链表或图开始练手
@ -34,21 +34,21 @@ CSComputer Science计算机科学课程中咱们会学习大量的常
我的天,在 Rust 中**千万别这么干**,你是在扼杀自己之前的努力!因为不像其它语言,链表在 Rust 中简直是地狱一般的难度,我见过太多英雄好汉难过链表关,最终黯然退幕。我不希望正在阅读此文的你也成为其中一个 : 我的天,在 Rust 中**千万别这么干**,你是在扼杀自己之前的努力!因为不像其它语言,链表在 Rust 中简直是地狱一般的难度,我见过太多英雄好汉难过链表关,最终黯然退幕。我不希望正在阅读此文的你也成为其中一个 :
这些自引用类型(一种数据结构,它包含的某个字段又引用了其自身),它们堪称恶魔:不仅仅在蹂躏着新手,还在折磨着老手。有意思的是,它们的难恰恰是 Rust 的优点导致的:无 GC 也无手动内存管理内存安全。 这些自引用类型(一种数据结构,它内部的某个字段又引用了其自身),它们堪称恶魔:不仅仅在蹂躏着新手,还在折磨着老手。有意思的是,它们的难恰恰是 Rust 的优点导致的:无 GC 也无手动内存管理还要做到内存安全。
两点的实现并不是凭空产生的,而是通过 Rust 一套非常强大、优美的机制提供了支持,这些机制一旦你学到,就会被它巧妙的构思和设计征服,进而被 Rust 深深吸引!但是一切选择都有利弊,这种机制的弊端就在于实现链表这数据结构时,会变得非常非常复杂。 些优点并不是凭空产生,而是来源于 Rust 那一套强大、优美的机制,这些机制一旦你学到,就会被它巧妙的构思和设计征服,进而被 Rust 深深吸引!但是一切选择都有利弊,这种机制的弊端就在于实现链表这数据结构时,会变得非常非常复杂。
你需要糅合各种知识,才能解决这个问题,但是这显然不是一个新手应该独自去面对的。总之,不会链表对于 Rust 的学习和写项目,真的没有任何影响,直接使用大神已经写好的数据结构就可以。 你需要糅合各种知识,才能解决这个问题,但是这显然不是一个新手应该独自去面对的。总之,不会链表对于 Rust 的学习和写项目,真的没有任何影响,直接使用大神已经写好的数据结构就可以。
如果想要练手,我们可以换个方向开始,当然如果你就是喜欢征服困难,那没问题,就从链表开始。但是无论选择哪个,本书都将给你莫大的帮助,包括如何实现一个链表! 如果想要练手,我们可以换个方向开始,例如书中的入门和进阶实战项目都是非常好的选择。当然如果你就是喜欢征服困难,那没问题,就从链表开始。但是无论选择哪个,本书都将给你莫大的帮助,包括如何实现一个链表!
## 仔细阅读编译错误 ## 仔细阅读编译错误
在一些编程语言中,你可能习惯了编译器给出的错误只看前面(或后面)几行就行,大部分是不怎么用到的信息,总之 `how stupid the 编译器 is` 在一些编程语言中,你可能习惯了编译器给出的错误只看前面(或后面)几行,毕竟大部分是没啥大用的堆栈信息,在此过程中, `how stupid the 编译器 is` 的感想时不时会迸发出来
但是 Rust 不是,它为我们提供了一个强大无比的编译器,而且会提示我们该如何修改代码以解决错误,简直就是一名优秀的老师! 但是 Rust 不是,它为我们提供了一个强大无比的编译器,而且会提示我们该如何修改代码以解决错误,简直就是一名优秀的老师!
因此在使用 Rust 过程中,如果错误你不知该如何解决,不妨仔细阅读下编译器或者 IDE 给出的错误提示,绝大多数时候,都可以通过这些提示顺利的解决问题。 因此在使用 Rust 过程中,如果你不知该如何解决错误,不妨仔细阅读下编译器或者 IDE 给出的错误提示,绝大多数时候,都可以通过这些提示顺利的解决问题。
同时也不要忽略编译器给出的警告信息(warnings),因为里面包含了 `cargo clippy` 给出的 `lint` 提示,这些提示不仅仅包含代码风格,甚至包含了一些隐藏很深的错误!至于这些错误为何不是 `error` 形式出现,随着学习的深入,你将逐渐理解 Rust 的各种设计选择,包括这个问题。 同时也不要忽略编译器给出的警告信息(warnings),因为里面包含了 `cargo clippy` 给出的 `lint` 提示,这些提示不仅仅包含代码风格,甚至包含了一些隐藏很深的错误!至于这些错误为何不是 `error` 形式出现,随着学习的深入,你将逐渐理解 Rust 的各种设计选择,包括这个问题。
@ -58,11 +58,11 @@ CSComputer Science计算机科学课程中咱们会学习大量的常
例如纯面向对象或纯函数式编程,在 Rust 中就并不是一个很好的选择。如果你有过 Go 语言的编程经验,相信能更加理解我这里想表达的含义。 例如纯面向对象或纯函数式编程,在 Rust 中就并不是一个很好的选择。如果你有过 Go 语言的编程经验,相信能更加理解我这里想表达的含义。
不过大家也不用担心,在书中我们以专题的形式专门讲解 Rust 的最佳实践,看完后自然就明白了。 不过大家也不用担心,在书中我们以专题的形式专门讲解 Rust 的最佳实践,看完后自然就明白了。
## 总结 ## 总结
对于新手而言,最应该避免的就是从**链表开始练手**,最应该做的就是认真仔细地学习一本优秀的书。 对于新手而言,最应该避免的就是从**链表开始练手**,最应该做的就是认真仔细地学习一本优秀而全面的书。
总之,认真学 Rust既然选择了就**相信自己,你的前方会是星辰大海!** 总之,认真学 Rust既然选择了就**相信自己,你的前方会是星辰大海!**

Loading…
Cancel
Save