- 精通Rust(第2版)
- (印)拉胡尔·沙玛 (芬)韦萨·凯拉维塔
- 1911字
- 2021-02-22 15:36:16
前 言
本书是关于Rust编程语言的,它能够让你构建各种软件系统——从底层的嵌入式软件到动态的Web应用程序。Rust快速、可靠、安全,它提供了甚至超过C/C++的性能和安全保证,同时还是一种学习曲线比较平滑的热门编程语言。通过逐步完善,与积极友好的社区文化相结合,该语言的前景会非常美好。
从设计层面来讲,Rust并不是一门新的编程语言,它不会尝试重复构造“轮子”。相反,它借鉴了一些独特的思路,这些思路隐藏在学术型原型语言中,从未被大规模采用。而它将这些思路巧妙地组合起来,并提供一种实用的编程语言,使你能够在构建安全的软件系统的同时仍然保持高效。
目标读者
本书的目标读者,是编程新手和熟悉其他命令式编程语言,但对Rust一无所知的中级程序员。假定读者至少熟悉一种命令式编程语言,例如C、C++或Python。了解函数式编程的要求并不是必需的,但对它有一个大致的了解将会大有裨益。不过,我们会确保对从这些语言中引入的任何概念或思想进行解释。
本书概要
第1章简要介绍Rust及其背后的设计理念,并介绍该语言的基本语法。本章最后通过练习巩固了所学的语言特征。
第2章探讨在Rust中如何使用专用的软件包管理器管理大型软件项目,这是后续章节的基础。本章还介绍Rust与Visual Studio Code编辑器的集成。
第3章介绍Rust内置的测试工具,编写单元测试、集成测试以及如何在Rust中编写文档,还介绍Rust代码的基准测试工具,最后完成一个包含文档和测试的完整软件包示例。
第4章探讨Rust的类型系统,然后通过构造复杂的程序库来解释类型系统的各种用法。
第5章首先介绍内存管理的动机以及与内存相关的底层编程语言中的各种陷阱,然后解释Rust独特的编译期内存管理机制,还介绍Rust中的各种智能指针类型。
第6章从错误处理的动机开始,并探讨其他语言中错误处理的不同模型,然后在探讨不可恢复的错误处理机制之前,还介绍Rust的错误处理策略和类型。本章以实现自定义错误类型的程序库作为结束。
第7章更详细地探讨前面章节中已经介绍的一些概念,介绍Rust提供的一些类型系统抽象的底层模型的详细信息。
第8章探讨Rust标准库中的并发模型和API,并介绍如何构建没有数据竞争的高并发程序。
第9章介绍如何在Rust中编写强大的高级宏来生成代码,并通过构建两种宏来阐述声明性宏和过程宏的使用。
第10章探讨Rust的不安全模式以及与其他语言进行互操作的API。这些示例包括从其他语言调用Rust,例如Python、Node.js和C,以及如何从其他语言调用Rust。
第11章强调日志记录在软件开发实践中的重要性,说明我们为何需要日志框架,以及探索Rust生态系统中提供可用于帮助将日志记录功能集成到应用程序中的程序库。
第12章简要介绍网络编程之后,还介绍如何构建可以与Redis官方客户端通信的Redis服务器。最后,本章介绍如何使用标准库中的网络原语,以及tokio和futures程序库。
第13章首先介绍HTTP,然后介绍使用hyper程序库构建一个简单的URL短网址服务器,同时介绍使用reqwest程序库构建一个URL短网址客户端。最后探讨actix-web,它是一个高性能的异步Web应用程序框架,用于构建书签API服务器。
第14章首先解释将数据库作为应用程序后端的动机,并探讨Rust生态系统中可用的软件包,以便与各种数据库后端(如SQLite和PostgreSQL)进行交互。本章还介绍被称为diesel的类型安全的ORM库,然后介绍如何将它与第13章介绍的书签API服务器集成,以便使用diesel提供数据库支持。
第15章解释WebAssembly是什么,以及开发人员该如何使用它。然后继续探索Rust生态系统中可用的软件包,并使用Rust和WebAssembly构建实时markdown编辑器Web应用。
第16章解释在Rust中如何使用GTK+框架构建桌面应用程序,然后构建一个简单的黑客新闻桌面应用程序。
第17章探讨使用GDB调试Rust程序,并演示如何将GDB与Visual Studio Code编辑器集成。
准备工作
要真正掌握本书的内容,建议你亲自编写书中的示例代码并尝试改进代码,以熟悉Rust的错误处理机制,从而让它们指导你编写出正确的Rust程序。
本书没有任何特定的硬件要求,任何内存大于1GB,并且采用的是较新版本的Linux操作系统的硬件都可以。本书中的所有示例代码和项目都是在运行Ubuntu 16.04的Linux操作系统上开发的。Rust还为其他操作系统提供了一流的支持,其中包括macOS、BSD和最新版的Windows,因此所有示例代码都应该能够在这些操作系统上编译并运行。
排版约定
本书使用了一系列的排版约定。
CodeInText:表示文本、数据库表名、文件夹名、文件名、文件扩展名、路径名、URL、用户输入和Twitter引用等。下面是一个示例:“项目位于Chapter08/目录下名为threads_demo的文件夹中。”
代码块的格式设置如下所示:
fn main() {
println!("Hello Rust!");
}
当希望读者对特定代码块特别留意时,相关的代码行或元素将会用粗体显示:
[dependencies]
serde = "1.0.8"
crossbeam = "0.6.0"
typenum = "1.10.0"
任何命令行输入或输出都用如下格式表示:
$ rustc main.rs
$ cargo build
粗体:表示你在屏幕上看到的新术语,关键字、词等。例如,菜单或对话框中的单词出现在文本中。例如这样一个示例:“从‘Administration’面板中选择‘System info’”。
警告或重要注意事项
提示或技巧