Rust 学习之旅 (快速入门指南)
能搜到这份资料的, 必然是对 Rust 有兴趣的.
本快速入门指南旨在帮助你快速了解 Rust, 在较短时间内掌握使用 Rust 进行开发的技能; 同时提供了一些进阶学习资源.
本快速入门指南还包含了笔者这几年 Rust 开发实践的一些经验总结, 希望能帮到后来者少走点弯路.
笔者精力及水平有限, 有错误或不足之处, 敬请批评指正; 如您想参与到本指南的编写中, 也欢迎提交 PR.
本指南在线版本见: https://tour.han.rs.
主要贡献者
更多贡献者见这里.
参考资料
本指南大量参考了以下资料, 在此表示由衷感谢:
-
这是一份非常优秀的资料! 推荐搭配着看.
-
这是本指南的灵感来源.
版权说明
未经许可, 禁止转载; 对于直接引用的内容, 遵循原作者的版权说明.
碎碎念
这是一些碎碎念. 你可以直接从正式章节开始学习.
建议先简单过一遍 Rust 语言速查 (翻译中), 建立初印象. 看不懂没关系, 本指南会尽力给你掰碎了讲的.
为什么学 Rust?
-
如果你学的第一门编程语言就是 Rust, 那么恭喜你! 你将会有一个非常好的开始.
作为现代编程语言, Rust 吸取了编程语言发展数十年来大量经验教训, 并将大量最优实践融入到了语言设计中.
要学好 Rust, 你需要深入理解内存、堆栈、引用、变量作用域等这些其它高级语言往往不会深入接触的内容. 另外, Rust 会通过语法、编译器和
clippy
这些静态检查工具半帮助半强迫的让你成为更优秀的程序员, 写出更好的代码.同时, 作为偏底层的语言, Rust 可以让你在有良好开发体验的同时帮助你更加了解操作系统、网络、性能优化等底层知识. 搭配计算机组成原理, 操作系统原理等计算机系专业课程食用更佳.
个人是强烈推荐将 Rust 作为第一门编程语言的 (笔者就是如此).
-
如果你已经熟练应用 C / C++, Rust 会让你感到非常亲切, 但又有很多不同之处, 需要仔细理解体会.
-
如果你是有 Java 基础的, 我的建议是抛弃掉一切 Java 编程经验, 从零开始学习 Rust, 否则会把很多坏习惯带过来.
-
如果你是 Go 开发者, 估计你会爱上 Rust 里面的错误处理范式. 不过, Go 作为另一门优秀的现代编程语言, 个人认为熟练掌握 Go 再来学 Rust 意义不大, 除非对性能有极致追求, 或者单纯开发工作要用到. 习惯了 Go 这种带 GC 的语言, Rust 的内存管理可能会让你有点不适应; 异步 Rust 可能会让你非常吃力.
-
如果你是 JavaScript / TypeScript / Python 等语言的开发者, 那也算是从 0 开始学习 Rust 了.
和编译器打交道?
编译器是每位初学者最好的老师之一.
AI 赋能?
AI 很强大, 但写出来的东西你得知其所以然, 半桶水晃悠很容易被坑.
个人习惯把 AI 当文档库用.
Rust 适合?
Rust 在这些方面表现非常好:
-
Compiled code about same performance as C / C++, and excellent memory and energy efficiency.
-
Can avoid 70% of all safety issues present in C / C++, and most memory issues.
能避免 C / C++ 中存在的 70% 的安全问题, 以及大部分的内存安全问题.
-
Strong type system prevents data races, brings ‘fearless concurrency’ (amongst others).
-
Seamless C interop, and dozens of supported platforms (based on LLVM).
无缝的 C 互操作, 以及大量支持的平台 (基于 LLVM).
-
“Most loved or admired language” for
45678 years in a row. 🤷♀️连续
45678 年被评为 “最受喜爱或令人钦佩的语言”. 🤷♀️ -
Modern tooling:
cargo
(builds just work),clippy
(700+ code quality lints),rustup
(easy toolchain mgmt).现代化的工具链:
cargo
(编译 好简单),clippy
(700+ 代码质量检查点),rustup
(便捷的工具链管理).
Rust 不适合?
你可能遇到的问题:
-
Steep learning curve;1 compiler enforcing (esp. memory) rules that would be “best practices” elsewhere.
陡峭的学习曲线;1 编译器强制执行在其他语言中可能只是 “最佳实践” 的 (特别是内存方面上的) 规则.
-
Missing Rust-native libs in some domains, target platforms (esp. embedded), IDE features.1
在某些领域、目标平台 (特别是嵌入式) 和 IDE 功能方面缺乏 Rust 原生库.1
-
Longer compile times than “similar” code in other languages.1
与其他语言写成的 “类似” 的代码相比, 编译时间更长.1
-
Careless (use of
unsafe
in) libraries can secretly break safety guarantees.不谨慎 (使用
unsafe
的) 库可能会悄悄破坏安全保证. -
No formal language specification, {{ link(url=“https://spec.ferrocene.dev/”) }}can prevent legal use in some domains (aviation, medical, …). {{ link(url=“https://ferrous-systems.com/ferrocene/”) }}没有正式的语言规范{{ link(url=“https://spec.ferrocene.dev/”) }}可能会阻止在某些领域 (航空、医疗等) 的合法使用. {{ link(url=“https://ferrous-systems.com/ferrocene/”) }} -
Rust Foundation may offensively use their IP to affect ‘Rust’ projects (e.g, forbid names, impose policies). {{ link(url=“https://devclass.com/2023/04/11/dont-call-it-rust-community-complains-about-draft-trademark-policy-restricting-use-of-word-marks/”) }}{{ link(url=“https://web.archive.org/web/20230413161930/https://old.reddit.com/r/rust/comments/12e7tdb/rust_trademark_policy_feedback_form/”) }}2
Rust 基金会可能会积极维护其知识产权, 影响到 ‘Rust’ 项目(例如, 禁止名称, 强制执行政策). {{ link(url=“https://devclass.com/2023/04/11/dont-call-it-rust-community-complains-about-draft-trademark-policy-restricting-use-of-word-marks/”) }}{{ link(url=“https://web.archive.org/web/20230413161930/https://old.reddit.com/r/rust/comments/12e7tdb/rust_trademark_policy_feedback_form/”) }}
1 Compare Rust Survey.
2 Avoiding their marks (e.g, in your name, URL, logo, dress) is probably sufficient. 避免使用他们的商标 (例如在你的名称、URL、标志、外观中) 可能就足够了.
测试页面
测试代码块嵌入
Ref: https://rust-lang.github.io/mdBook/format/mdbook.html
示例代码
fn main() { println!("Hello, world!"); }
可编辑代码
fn main() { println!("Hello, world!"); }
会失败的代码
fn main() { panic!("This is a panic!"); }
fn main() { let x: i32 = "I am not a number!"; }