The Rust Programming Language (Covers Rust 2018)

Steve Klabnik, Carol Nichols

出版时间

2019-08-13

ISBN

9781718500440

评分

★★★★★
书籍介绍
这不是一本教你快速写出花哨程序的书,而是一部重塑你编程世界观的著作。它最核心的价值,在于把「所有权」与「资源获取即初始化」这类抽象机制讲透——正是这套设计,让Rust在拥有C/C++性能的同时,从编译器层面消灭了内存崩溃与空引用这类「数十亿美元错误」。读者反馈反复印证:它适合那些不满足于「代码能跑就行」、渴望理解程序为何安全的人。书里点到为止的讲法并非疏漏,而是刻意留白:它负责打通范式(C++的严谨、函数式的优雅、模式匹配的简洁),真正的熟练仍需你结合官方文档与exercism反复打磨。若你愿意花精力啃下这近600页,换来的是写CLI、写服务器时那份踏实而省心的手感。
作者简介
Steve Klabnik is the Community Team Leader for the Rust team at Mozilla, in charge of official Rust community documentation as well as the key Rust community advocate. Klabnik is a frequent speaker at conferences and one of the world's most prolific contributors to Rails projects. Carol Nichols is a member of the Rust Community Team. She's been active in the Rust community and is an organizer of the Rust Belt Rust Conference.
AI导读
核心看点
  • Rust官方权威指南,涵盖2018版核心特性
  • 深入讲解所有权机制,保障内存安全与高效
  • 结合Cargo工具链,构建健壮可靠的工程代码
读者共识
  • 公认的最佳Rust入门书,社区亲切称为The Book
  • 讲解清晰友好,但知识点零碎需配合文档补充
  • 虽语法复杂有门槛,但掌握后能写出高效代码
精彩摘录
  • "定义元组结构体时依然使用struct:关键字开头,并由结构体名称及元组中的类型定义组成。下面的代码中展示了两个分别叫作Color和Point的元组结构体定义:struct Color(i32,i32,i32); struct Point(i32,i32,i32); let black Color(0,0,0); let origin Point(0,0,0);"
  • "隐藏 在第2章的“比较猜测数字与保密数字”一节中,我们曾经看到一个新声明的变量可以覆盖掉旧的同名变量。在Rust世界中,我们把这一现象描述为:第一个变量被等二个变量隐藏(shadow)了。"
  • "在C++中,这种在对象生命周期结束时释放资源的模式有时也被称作资源获取即初始化(Resource Acquisition Is Initialization, RAⅡ)。假如你使用过类似的模式,那么你应该对Rust中的特殊函数drop并不陌生。 这种模式极大地影响了Rust中的许多设计块择,并最终决定了我们现在编写Rust代码的方式。在上面的例子中,这套释放机制看起来也许还算简单,然而一旦把它放置在某些更加复杂的环境中,代码呈现出来的行为往往会出乎你的意料,特别是当我们拥有多个指向同一处堆内存的变量时。让我们接着来看一看其中一些可能的使用场景。"
  • "Rust提供了一系列的功能来帮助我们管理代码,包括决定哪些细节是暴露的、哪些细节是私有的,以及不同的作用域内存在哪些名称。这些功能有时被统称为模块系统(module system),它们包括: 包(package):一个用于构建、测试并分享单元包的Cargol功能。 单元包(crate):一个用于生成库或可执行文件的树形模块结构。 模块(module)及use关键字:它们被用于控制文件结构、作用域及路径的私有性。 路径(pth):一种用于命名条目的方法,这些条目包括结构体、函数和模块等。"
  • "观察Cargo。toml中的内容,你也许会奇怪它居然没有提到src/main.rs,这是因为Cargo会默认将src/mai.rs视作一个二进制单元包的根节点而无须指定,这个二进制单元包与包拥有相同的名称。同样地,假设包的目录中包含文件src/lib.rs,Cargo也会自动将其视作与包同名的库单元包的根节点。Cargo会在构建库和二进制程序时将这些单元包的根节点文件作为参数传递给rustc。"
  • "Tony Hoare,空值的发明者,曾经在2OO9年的一次演讲Null References:TheBillion Dollar Mistake中提到: 这是一个价值数十亿美金的错误设计。当时,我正在为一门面向对象语言中的引用设计一套全面的类型系统。我的目标是,通过编译器自动检查来确保所有关于引用的操作都是百分之百安全的。但是我却没有抵挡住引入一个空引用概念的诱惑,仅仅是因为这样会比较容易去实现这套系统。这导致了无数的错误、漏洞和系统崩溃,并在之后的40多年中造成了价值数10亿美金的损失。 空值的问题在于,当你尝试像使用非空值那样使用空值时,就会触发某种程度上的错误。因为空或非空的属性被广泛散"
  • "Expressions do not include ending semicolons. If you add a semicolon to the end of an expression, you turn it into a statement, and it will then not return a value."
  • "Function bodies are made up of a series of statements optionally ending in an expression."
下载
收藏