新書推薦:
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:HK$
99.7
《
历史的教训(浓缩《文明的故事》精华,总结历史教训的独特见解)
》
售價:HK$
62.7
《
不在场证明谜案(超绝CP陷入冤案!日本文坛超新星推理作家——辻堂梦代表作首次引进!)
》
售價:HK$
58.2
《
明式家具三十年经眼录
》
售價:HK$
524.2
《
敦煌写本文献学(增订本)
》
售價:HK$
221.8
《
耕读史
》
售價:HK$
109.8
《
地理计算与R语言 [英] 罗宾·洛夫莱斯 [德]雅纳·蒙乔 [波兰] 雅库布·诺沃萨德
》
售價:HK$
121.0
《
沈括的知识世界:一种闻见主义的实践(中华学术译丛)
》
售價:HK$
87.4
|
編輯推薦: |
(1)作者资深:10余年开发经验,Rust技术专家、区块链技术专家,Web3meta Labs创始人兼CTO、Polkadot(波卡)技术大使。
(2)针对性强:针对性讲解Rust常用语法和重点知识,助读者快速掌握Rust编程能力。
(3)深入浅出:大幅降低Rust学习门槛,即使没有任何 Rust 编程经验的读者也能快速上手。
(4)学以致用:将各种常见数据结构和算法与Rust编程实战相结合,帮助读者将语法知识固化为实战能力。
(5)注重实战:以编码能力训练为核心,围绕并发编程等高阶知识进行综合训练,帮助读者快速在实战中实现提升。
|
內容簡介: |
这是一部注重编码能力训练的实战性著作,既能帮助读者扎实掌握Rust的主要语法知识并具备实战能力,又能指导读者快速从初学者晋级为高手。
全书秉持学以致用的原则:一方面,没有事无巨细地罗列Rust的每一个语法知识点,但是常用知识点和重要知识点悉数囊括;一方面,将各种常见数据结构和算法与Rust编程实战相结合,同时精选39道LeetCode高频算法面试题,帮助读者快速语法知识固化为实战能力。
全书共15章,分为3个部分:
第1部分(第1~11章) Rust编程语法
非常有针对性地讲解了Rust的常用语法,由浅入深,循序渐进,能帮助读者快速掌握Rust的语法知识并具备基本的编程能力
第二部分(第12~13章) Rust编码能力训练
将数组、栈、队列、哈希表、链表、树等实用的数据结构和递归、分治、回溯、二分查找、深度优先搜索、广度优先搜索、排序、动态规划等常用算法与Rust编程实战结合,并精选39道LeetCode高频算法面试真题,帮助读者将语法知识转化为编程实战能力。
第三部分(第14~15章) Rust综合进阶实战
以排序算法为主题,围绕功能拓展和性能拓展两条主线,结合工程管理、泛型、trait系统、高阶函数、闭包、迭代器、单元测试、多线程并发和异步并发等重要的语法知识点进行综合实战训练,进一步在实战中提升编程水平。
|
關於作者: |
朱春雷
北京大学软件工程硕士,资深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
|
內容試閱:
|
【为什么要写这本书】
虽然对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章开始学习。
●笔者运营公众号“冲鸭Rust和区块链”,分享Rust、算法和区块链开发的原创技术。考虑到本书定位于快速入门实战,没有涉及Rust宏和Unsafe编程,笔者后续计划从Substrate和libp2p源码解析的角度写一些进阶版实战系列来讲解这些知识点,并会分享在公众号上供大家参考。
●随书源码地址:https://github.com/inrust/Rust-Programming-in-Action。
|
|