首页>参考读物>计算机科学与技术>软件与程序设计

Rust编程:入门、实战与进阶
作者 : 朱春雷 著
出版日期 : 2021-04-14
ISBN : 978-7-111-67910-3
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 315
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一部注重编码能力训练的实战性著作,既能帮助读者扎实掌握Rust的主要语法知识并具备实战能力,又能指导读者快速从初学者晋级为高手。
全书秉持学以致用的原则:一方面,没有事无巨细地罗列Rust的每一个语法知识点,但是常用知识点和重要知识点悉数囊括;一方面,将各种常见数据结构和算法与Rust编程实战相结合,同时精选39道LeetCode高频算法面试题,帮助读者快速语法知识固化为实战能力。
全书一共15章,分为3个部分:
第1部分(第1~11章) Rust编程必备语法
非常有针对性地讲解了Rust的常用语法,由浅入深,循序渐进,能帮助读者快速掌握Rust的必备语法知识并具备基本的编程能力
第二部分(第12~13章) Rust编码能力训练
将数组、栈、队列、哈希表、链表、树等实用的数据结构和递归、分治、回溯、二分查找、深度优先搜索、广度优先搜索、排序、动态规划等常用算法与Rust编程实战结合,并精选39道LeetCode高频算法面试真题,帮助读者将语法知识转化为编程实战能力。
第三部分(第14~15章) Rust综合进阶实战
以排序算法为主题,围绕功能拓展和性能拓展两条主线,结合工程管理、泛型、trait系统、高阶函数、闭包、迭代器、单元测试、多线程并发和异步并发等重要的语法知识点进行综合实战训练,进一步在实战中提升编程水平。

图书特色

Web3meta Labs创始人兼CTO、Polkadot(波卡)技术大使撰写
详细讲解Rust核心语法,注重编码能力训练,将数据结构、算法与Rust编程结合,
精选39道LeetCode高频算法面试真题

图书前言

为什么要写这本书
虽然对Rust语言早有耳闻,但真正接触Rust还缘于笔者在“一块+”区块链技术社区参加的陈锡亮老师主讲的“Substrate快速入门与开发实战”课程。Substrate是一个开源的区块链开发框架,由Parity团队使用Rust语言编写。想学好Substrate,毋庸置疑得先学好Rust。因此笔者深入研读了最权威的官方教程The Rust Programming Language、以代码展示方式讲解语法的Rust by Example以及深入底层系统介绍Rust设计哲学的《Rust编程之道》等著作。虽有10年以上编程经验,熟悉Java、Python、Go等语言,但在学习Rust编程的过程中,笔者依然有严重的挫折感。挫折感的来源有以下三点。
一是初学者对Rust语言中一些特有的语法和符号需要一个适应过程。
二是Rust编译器内建各种安全检查规则,加上独有的所有权系统,在编写稍微复杂的程序时,几乎难以做到一次编译就成功通过,需要经历反复的修改与编译调试。
三是Rust编程中关于引用、智能指针的使用,以及在编写Unsafe Rust过程中如何保证内存安全很复杂,对Java、Python、Go等语言的开发者也是较大的挑战。
另外,纵观市面上Rust图书的共同点,大多侧重于对Rust设计思想的介绍、对语法使用以及实现原理的详细讲解,缺乏有效的编程实战教程。
因此,经过一段时间的深入思考,笔者决定撰写本书,并尝试将不限语言的数据结构和算法与Rust编程实战进行结合,让读者可以凭借以往的编程基础使用Rust语言进行实战,在实战中巩固各知识点,提升Rust编程能力。学以致用是贯穿本书的理念。
读者对象
本书内容由浅入深,即使没有任何Rust编程经验的开发者也可以学习参考。本书适用于以下几类读者。
有高级语言(如Java、Python、Go、C++等)编程经验的开发者;
正在从事软件开发工作的开发者;
计算机软件及相关专业的学生;
其他有一定数据结构和算法经验且对Rust感兴趣的读者。
本书特色
以往常听一些朋友抱怨,且笔者在学习过程中也有类似感受:“学习一门新的语言,对入门书籍阅读过半,还只会写Hello World程序,继续学习后面的章节却已忘记了前面的内容。”之所以出现这种情况,主要是因为初学者很容易纠缠于语法细节的学习,钻一些深奥复杂却不常用的语法的“牛角尖”,导致“从入门到放弃”的情况时有发生。特别是Rust编程的初学者,如果一开始就囿于Rust语法细节,很容易因受挫而放弃。
笔者较为推崇的学习方式是,掌握一门语言最基础的语法知识后就进行编程实战训练,实践中遇到了问题再去探究深层原理和细节。这样比一开始就进行“面面俱到、点点探究”的学习会更有收获,理解也更为透彻。因此,本书将秉持学以致用的原则进行讲解,不事无巨细地罗列一个个知识点,也不立刻探究背后的原理和细节,而是帮助读者以最快的速度掌握Rust编程所需的基本概念和基础语法,快速进入编程实战训练,以刻意练习的方式让读者掌握每个知识点。这里的刻意练习包含以下三个方面的要求。
一是在“学习区”学习。跳出学习的“舒适区”,选择有难度、有挑战的知识学习。数据结构和算法的优劣取决于开发者的技术功底,而开发者对数据结构和算法知识的掌握程序决定了他们在面对新问题时分析问题和解决问题的能力。因此,结合数据结构与算法的知识点进行编程训练,能使读者快速建立对Rust编程的认知,是挖掘自身成长潜能的重要手段和开发高性能程序的必备基础。
二是大量重复练习。只有不断地重复练习,才能真正掌握知识点。本书精选LeetCode平台上与Rust语法知识点相关的一些高频算法面试真题,在细致讲解与代码实现中,把重要的语法知识点通过题目复现,帮助读者在重复练习中真正做到各个知识点的熟练掌握与融会贯通;同时,还会把初学者在练习中遇到的常见问题以及解决问题的过程展现出来,使读者在逐步解决问题中巩固知识点。
三是及时测评反馈。没有及时反馈的练习往往是无效的。本书将协助读者在LeetCode平台上进行练习并及时获得测评反馈,增加读者的学习兴趣。
如何阅读本书
本书分为三篇,具体内容如下。
语言基础篇(第1~11章):介绍Rust编程中必须掌握的基础语法。
编程能力训练篇(第12~13章):将数组、栈、队列、哈希表、链表、树等实用的数据结构和递归、分治、回溯、二分查找、排序、动态规划等常用算法与Rust编程实战结合进行讲解,并精选了LeetCode上的一些高频算法面试真题,使用Rust语言进行编程实战。
综合实战篇(第14~15章):以排序算法为主题,围绕功能拓展和性能拓展两条主线,结合工程管理、泛型、trait系统、高阶函数、闭包、迭代器、单元测试、多线程并发和异步并发等重要的语法知识点进行综合实战训练。
如果你具备Rust基础语法知识,可以直接从第2章或编程能力训练篇开始阅读。但如果你是一名初学者,建议按照本书的编排顺序从第1章开始学习。
勘误和支持
由于笔者的水平有限,加之时间仓促,疏忽和不足之处在所难免,恳请读者批评指正。笔者在GitHub上创建了一个Resposity,读者可以在这里找到书中的全部源代码,同时可以将书中的错误(请标明具体的页码和错误信息)直接提交issues,笔者将会及时发布更新修订。如果你有更多的宝贵意见,也欢迎提交issues。期待能得到你的支持与反馈。
此外,笔者会长期运营公众号“冲鸭Rust和区块链”,分享Rust、算法和区块链开发的原创技术。考虑到本书定位于快速入门实战,没有涉及Rust宏和Unsafe编程,笔者后续计划从Substrate和libp2p源码解析的角度写一些进阶版实战系列来讲解这些知识点,并会分享在公众号上供大家参考。
随书源码地址:https://github.com/inrust/Rust-Programming-in-Action。
致谢
首先要感谢Rust社区为全球开发者提供的高质量文档和相关资料,感谢Gavin Wood博士为Rust贡献了诸多优秀的开源代码,感谢张汉东老师等国内Rust布道者,本书是站在巨人的肩膀上完成的。
其次要感谢机械工业出版社华章分社策划编辑杨福川和责任编辑董惠芝在这近半年时间里始终支持我的写作,你们的鼓励和帮助使我得以顺利完成全部书稿。
还要感谢Web 3基金会、“一块+”区块链技术社区的同人以及在写书过程中给予指导的各位老师,你们的支持和推荐使得书稿最终顺利完成。特别感谢同窗好友叶毓睿同学,你的引荐促成了这本书的出版。
最后要感谢我的家人,因为有了你们的信任和支持,我才能够安心、坚持不懈地做自己想做的事。

上架指导

计算机\程序设计

封底文字

众所周知,Rust因为所有权机制,实现数据结构和算法并不像其他语言那样自由。而这本书正好从算法和数据结构的实战角度切入,帮助读者在掌握 Rust 语言基础之后进一步深入理解所有权,独具匠心。
——张汉东 《Rust 编程之道》作者

本书在介绍Rust语法的基础之上,提供了很多有助于提高Rust开发技能的实例,对增强读者的动手能力大有裨益,是开发者学习Rust难得的参考资料。
——杨镇 《深入以太坊智能合约开发》作者

很高兴看到我的同学春雷愿意将自己的实战经验分享给大家,也很荣幸有机缘把他推荐给华章。这本书的内容循序渐进,方便读者快速上手,让读者在实践中理解原理。
——叶毓睿 《软件定义存储》作者

本书从Rust语言基础和编程能力训练两方面入手,前者能快速为读者打下基础,后者能让读者快速具备实战能力。除了Rust的基础知识和实战练习外,本书还讲解了Rust的异步并发系统,能让初学者更全面地领略Rust的优异之处。
——岳利鹏 Patract Labs创始人

通过这本书,初学者们不仅可掌握Rust编程必备的语法知识,还能够通过实战快速提升编码能力。希望有更多的开发者进入Rust的世界。
——雅珣 “一块+”区块链开发者社区创始人

Rust和Emacs的学习曲线类似,入门门槛比较高,让初级的区块链开发者望而却步。但Rust又特别适合区块链开发,春雷这本书详略得当、重点突出、浅显易懂,能大幅提升读者的学习效率。
——郭光华 链网科技CEO

目前,PPIO正尝试在P2P内容分发、分布式存储系统中使用Rust开发底层组件。春雷的书从基础语法到编码训练,再到综合实战,结构清晰,层层深入,能帮我们节省许多时间。
——谢晋 PPIO高级项目经理

作者简介

朱春雷 著:作者简介
朱春雷
北京大学软件工程硕士,资深Rust技术专家和区块链技术专家,有10年以上软件开发经验。
Web3meta Labs创始人兼首席技术官,Polkadot(波卡)技术大使,熟悉区块链技术框架Substrate开发。Web3meta Labs致力于为Ethereum、Polkadot等领先的区块链项目打造基础设施。

图书目录

前言
语言基础篇
第1章 初识Rust2
1.1 Rust语言简介2
1.2 搭建编程环境3
1.3 Hello Rust4
1.4 Hello Cargo5
1.5 本章小结7
第2章 变量与数据类型8
2.1 变量和可变性8
2.1.1 变量声明8
2.1.2 变量的可变性9
2.1.3 变量遮蔽9
2.1.4 常量10
2.2 基本数据类型11
2.2.1 整数类型11
2.2.2 浮点数类型12
2.2.3 布尔类型12
2.2.4 字符类型12
2.2.5 范围类型12
2.3 复合数据类型13
2.3.1 元组类型13
2.3.2 数组类型14
2.3.3 结构体类型15
2.3.4 枚举类型17
2.4 容器类型18
2.4.1 Vec18
2.4.2 VecDeque21
2.4.3 HashMap25
2.5 字符串28
2.5.1 字符串的创建29
2.5.2 字符串的修改29
2.5.3 字符串的访问32
2.6 字面量和运算符34
2.6.1 字面量34
2.6.2 运算符34
2.7 本章小结35
第3章 流程控制37
3.1 条件判断37
3.1.1 if条件判断37
3.1.2 if-else条件判断38
3.1.3 if-else if-else条件判断38
3.2 循环39
3.2.1 loop循环39
3.2.2 while循环40
3.2.3 for循环40
3.2.4 continue和break语句41
3.3 match模式匹配41
3.4 if let和while let模式匹配42
3.5 本章小结43
第4章 函数、闭包与迭代器44
4.1 函数44
4.1.1 定义函数44
4.1.2 方法和函数46
4.1.3 高阶函数47
4.2 闭包50
4.2.1 基本语法50
4.2.2 类型推断50
4.2.3 捕获环境变量51
4.3 迭代器51
4.3.1 Iterator trait52
4.3.2 消费器52
4.3.3 迭代器适配器54
4.4 本章小结56
第5章 类型系统57
5.1 泛型57
5.1.1 泛型与容器57
5.1.2 泛型与结构体58
5.1.3 泛型与枚举60
5.1.4 泛型与函数61
5.1.5 泛型与方法61
5.2 trait系统62
5.2.1 trait定义与实现62
5.2.2 trait作为参数63
5.2.3 返回实现trait的类型66
5.2.4 标准库常用trait66
5.3 类型转换71
5.3.1 原生类型间的转换71
5.3.2 数字与String类型间的转换72
5.3.3 &str与String类型间的转换73
5.4 本章小结73
第6章 所有权系统74
6.1 通用概念74
6.1.1 栈内存与堆内存74
6.1.2 值语义与引用语义75
6.1.3 复制语义与移动语义75
6.2 所有权机制76
6.2.1 变量绑定76
6.2.2 所有权转移77
6.2.3 浅复制与深复制81
6.3 引用和借用83
6.3.1 引用与可变引用83
6.3.2 借用规则87
6.3.3 借用示例1:切片88
6.3.4 借用示例2:迭代器90
6.4 生命周期92
6.4.1 生命周期语法92
6.4.2 悬垂引用94
6.4.3 生命周期与函数96
6.4.4 生命周期与结构体98
6.4.5 生命周期省略规则100
6.5 本章小结100
第7章 智能指针102
7.1 独占所有权的Box102
7.1.1 Box在堆上存储数据102
7.1.2 Deref解引用103
7.1.3 Drop清理资源104
7.2 共享所有权的Rc105
7.3 应对内部可变性的RefCell106
7.4 本章小结108
第8章 并发编程109
8.1 多线程并发109
8.1.1 线程管理110
8.1.2 线程池114
8.2 异步并发115
8.2.1 async/.await语法115
8.2.2 async-std库117
8.3 本章小结119
第9章 错误处理120
9.1 Result120
9.1.1 高效处理Result121
9.1.2 处理不同类型的错误122
9.1.3 传播错误123
9.2 Panic125
9.2.1 追踪Panic125
9.2.2 捕获Panic126
9.3 本章小结127
第10章 模块化编程128
10.1 crate管理128
10.1.1 使用Cargo创建crate129
10.1.2 使用第三方crate129
10.2 module系统130
10.2.1 定义模块130
10.2.2 创建多文件模块131
10.2.3 多文件模块的层级关系132
10.2.4 模块的可见性133
10.2.5 使用use导入模块135
10.2.6 模块的路径136
10.2.7 使用pub use重导出136
10.2.8 加载外部crate137
10.3 本章小结138
第11章 单元测试139
11.1 单元测试框架139
11.2 编写测试140
11.2.1 使用assert!140
11.2.2 使用assert_eq!和assert_ne!141
11.2.3 自定义失败信息142
11.3 运行测试143
11.3.1 运行部分测试144
11.3.2 忽略某些测试145
11.4 本章小结146
编程能力训练篇
第12章 数据结构实战148
12.1 数组148
12.1.1 移动零149
12.1.2 加一156
12.1.3 删除排序数组中的重复项158
12.2 栈与队列159
12.2.1 最小栈160
12.2.2 有效的括号163
12.2.3 滑动窗口最大值165
12.3 哈希表168
12.3.1 两数之和170
12.3.2 有效的字母异位词172
12.3.3 字母异位词分组174
12.4 链表179
12.4.1 反转链表182
12.4.2 链表的中间节点183
12.4.3 合并两个有序链表185
12.4.4 删除链表的倒数第n个节点187
12.5 树191
12.5.1 二叉树的前序遍历195
12.5.2 二叉树的中序遍历199
12.5.3 二叉树的后序遍历202
12.5.4 二叉树的层次遍历206
12.5.5 二叉搜索树中的插入操作208
12.6 本章小结211
第13章 算法实战213
13.1 递归、分治与回溯213
13.1.1 pow(x, n)216
13.1.2 爬楼梯218
13.1.3 括号生成220
13.1.4 子集222
13.1.5 组合224
13.1.6 N皇后227
13.2 二分查找230
13.2.1 搜索旋转排序数组231
13.2.2 寻找旋转排序数组中的最小值232
13.2.3 有效的完全平方数235
13.3 深度与广度优先搜索236
13.3.1 二叉树的最大深度239
13.3.2 二叉树的最小深度242
13.3.3 二叉搜索树中的搜索244
13.4 排序算法246
13.4.1 数组中的第k个最大元素257
13.4.2 合并区间259
13.4.3 翻转对261
13.5 动态规划264
13.5.1 爬楼梯265
13.5.2 最小路径和267
13.5.3 三角形最小路径和269
13.5.4 零钱兑换270
13.5.5 最长上升子序列273
13.5.6 编辑距离274
13.6 本章小结277
综合实战篇
第14章 泛型与高阶函数实战280
14.1 工程管理280
14.2 泛型编程281
14.2.1 插入排序算法282
14.2.2 加载算法库284
14.2.3 结构体实例排序285
14.3 高阶函数编程287
14.3.1 排序算法库287
14.3.2 生成随机数据291
14.3.3 排序算法API库292
14.4 本章小结295
第15章 并发编程实战296
15.1 多线程并发296
15.2 异步并发298
15.2.1 排序算法库的异步实现298
15.2.2 排序算法API库的异步实现302
15.2.3 创建可执行程序303
15.3 本章小结305

教学资源推荐
作者: (英)Roger Garside, John Mariani
作者: 邱李华,曹青,郭志强
参考读物推荐
作者: David Conger
作者: (美)Mickey Williams
作者: 施懿民 著