新書推薦:
《
不废风雅 生活的意趣(汪曾祺风雅意趣妙文)
》
售價:NT$
280.0
《
东亚世界形成史论(新版)
》
售價:NT$
490.0
《
奶奶的半个心愿 “课本里的作家” 中考热点作家孙道荣2024年全新散文集
》
售價:NT$
190.0
《
天生坏种:罪犯与犯罪心理分析
》
售價:NT$
445.0
《
新能源材料
》
售價:NT$
290.0
《
传统文化有意思:古代发明了不起
》
售價:NT$
199.0
《
无法从容的人生:路遥传
》
售價:NT$
340.0
《
亚述:世界历史上第一个帝国的兴衰
》
售價:NT$
490.0
編輯推薦:
1.【内容全面】Rust一本通,涉及Rust所有关键特性2.【代码开源】基于Rust 2021大版本,开源示例代码3.【实战性强】讲解深入浅出,含大量案例,实践性强4.【新版升级】全面修订,新增“异步编程”等核心内容5.【作译者资深】Mozilla创始团员编写,雪狼翻译6.【专家推荐】陈天、唐刚、王旭、张汉东、张炎泼7.【超强品控】30位一线Rust开发者与爱好者精心审读
內容簡介:
本书是Rust领域经典参考书,由业内资深系统程序员编写,广受读者好评。书中全面介绍了Rust这种新型系统编程语言——具有非常好的安全性,兼具C和C++的高性能,并大大简化了并发程序的编写。第2版对上一版内容进行了重组和完善,新增了对“异步编程”的介绍。借助书中的大量案例,你也能用Rust编写出兼顾安全性与高性能的程序。本书内容包括基本数据类型、所有权、引用、表达式、错误处理、crate与模块、结构、枚举与模式等基础知识,以及特型与泛型、闭包、迭代器、集合、字符串与文本、输入与输出、并发、异步编程、宏等进阶知识。本书适合所有学习Rust的开发者,尤其适合系统程序员,从C++转向Rust的程序员,以及具有C、C#、Jave、Python、JavaScript等其他编程语言基础并希望学习Rust的程序员。
關於作者:
[美]吉姆·布兰迪(Jim Blandy),Mozilla Firefox工程师,Subversion版本控制系统初代设计者之一。拥有40多年编程经验,其中包括30多年自由软件开发经验,曾在GNU Emacs、GNU Debugger等项目上工作。[美]贾森·奥伦多夫(Jason Orendorff),GitHub工程师,专注开发尚未公开的Rust项目,曾在Mozilla参与JavaScript引擎SpiderMonkey的开发。兴趣广泛,包括:语法学、烘焙、时间旅行,以及帮助人们理解复杂主题。[美]莉奥诺拉·F. S. 廷德尔(Leonora F. S. Tindall),软件工程师、类型系统爱好者。她喜欢使用Rust等先进语言在一些关键领域构建健壮且适应性强的系统软件,特别是在医疗保健和数据所有权管理等领域。【译者简介】汪志成(@雪狼),Thoughtworks专家级咨询师、Google Developer Expert、25年码农。终身学习者,兴趣多元,涉猎广泛,目前专注研究Rust。
目錄 :
目录专家推荐译者序前言中文版审读致谢第 1章 系统程序员也能享受美好11.1 Rust为你负重前行21.2 高效并行编程31.3 性能毫不妥协31.4 协作无边无界4第 2章 Rust导览52.1 rustup与Cargo62.2 Rust函数82.3 编写与运行单元测试92.4 处理命令行参数102.5 搭建Web服务器132.6 并发182.6.1 什么是曼德博集192.6.2 解析并配对命令行参数222.6.3 从像素到复数的映射242.6.4 绘制曼德博集252.6.5 写入图像文件262.6.6 并发版曼德博程序272.6.7 运行曼德博绘图器322.6.8 大“安”无形332.7 文件系统与命令行工具332.7.1 命令行界面342.7.2 读写文件362.7.3 查找并替换37第3章 基本数据类型393.1 固定宽度的数值类型413.1.1 整型423.1.2 检查算法、回绕算法、饱和算法和溢出算法453.1.3 浮点类型463.2 布尔类型483.3 字符493.4 元组503.5 指针类型513.5.1 引用523.5.2 Box523.5.3 裸指针533.6 数组、向量和切片533.6.1 数组533.6.2 向量543.6.3 切片573.7 字符串类型583.7.1 字符串字面量583.7.2 字节串593.7.3 内存中的字符串603.7.4 String613.7.5 使用字符串623.7.6 其他类似字符串的类型623.8 类型别名633.9 前路展望63第4章 所有权与移动644.1 所有权654.2 移动704.2.1 更多移动类操作744.2.2 移动与控制流754.2.3 移动与索引内容754.3 Copy类型:关于移动的例外情况774.4 Rc与Arc:共享所有权80第5章 引用835.1 对值的引用845.2 使用引用865.2.1 Rust引用与C++引用875.2.2 对引用变量赋值885.2.3 对引用进行引用885.2.4 比较引用895.2.5 引用永不为空895.2.6 借用任意表达式结果值的引用895.2.7 对切片和特型对象的引用905.3 引用安全905.3.1 借用局部变量915.3.2 将引用作为函数参数935.3.3 把引用传给函数955.3.4 返回引用955.3.5 包含引用的结构体965.3.6 不同的生命周期参数985.3.7 省略生命周期参数1005.4 共享与可变1015.5 应对复杂对象关系107第6章 表达式1096.1 表达式语言1096.2 优先级与结合性1106.3 块与分号1126.4 声明1136.5 if与match1156.5.1 if let1176.5.2 循环1176.6 循环中的控制流1196.7 return表达式1206.8 为什么Rust中会有loop1216.9 函数与方法调用1226.10 字段与元素1236.11 引用运算符1246.12 算术运算符、按位运算符、比较运算符和逻辑运算符1256.13 赋值1256.14 类型转换1266.15 闭包1276.16 前路展望127第7章 错误处理1287.1 panic1287.1.1 展开调用栈1297.1.2 中止1307.2 Result1307.2.1 捕获错误1317.2.2 Result类型别名1327.2.3 打印错误1327.2.4 传播错误1347.2.5 处理多种Error类型1357.2.6 处理“不可能发生”的错误1367.2.7 忽略错误1387.2.8 处理main()中的错误1387.2.9 声明自定义错误类型1397.2.10 为什么是Result140第8章 crate与模块1418.1 crate1418.1.1 版本1448.1.2 创建配置文件1458.2 模块1458.2.1 嵌套模块1468.2.2 单独文件中的模块1478.2.3 路径与导入1498.2.4 标准库预导入1528.2.5 公开use声明1528.2.6 公开结构体字段1528.2.7 静态变量与常量1538.3 将程序变成库1538.4 src/bin目录1558.5 属性1568.6 测试与文档1588.6.1 集成测试1618.6.2 文档1618.6.3 文档测试1638.7 指定依赖项1668.7.1 版本1668.7.2 Cargo.lock1678.8 将crate发布到crates.io1688.9 工作空间1708.10 更多好资源170第9章 结构体1729.1 具名字段型结构体1729.2 元组型结构体1759.3 单元型结构体1759.4 结构体布局1769.5 用impl定义方法1779.5.1 以Box、Rc或Arc形式传入self1799.5.2 类型关联函数1799.6 关联常量1809.7 泛型结构体1819.8 带生命周期参数的泛型结构体1839.9 带常量参数的泛型结构体1839.10 让结构体类型派生自某些公共特型1859.11 内部可变性186第 10章 枚举与模式19010.1 枚举19110.1.1 带数据的枚举19310.1.2 内存中的枚举19410.1.3 用枚举表示富数据结构19410.1.4 泛型枚举19610.2 模式19810.2.1 模式中的字面量、变量和通配符20110.2.2 元组型模式与结构体型模式20210.2.3 数组型模式与切片型模式20310.2.4 引用型模式20410.2.5 匹配守卫20610.2.6 匹配多种可能性20610.2.7 使用@模式绑定20710.2.8 模式能用在哪里20710.2.9 填充二叉树20910.3 大局观210第 11章 特型与泛型21111.1 使用特型21311.1.1 特型对象21411.1.2 泛型函数与类型参数21511.1.3 使用哪一个21911.2 定义与实现特型22011.2.1 默认方法22111.2.2 特型与其他人的类型22211.2.3 特型中的Self22411.2.4 子特型22511.2.5 类型关联函数22611.3 完全限定的方法调用22711.4 定义类型之间关系的特型22811.4.1 关联类型(或迭代器的工作原理)22911.4.2 泛型特型(或运算符重载的工作原理)23111.4.3 impl Trait23211.4.4 关联常量23411.5 逆向工程求限界23511.6 以特型为基础238第 12章 运算符重载23912.1 算术运算符与按位运算符24012.1.1 一元运算符24212.1.2 二元运算符24312.1.3 复合赋值运算符24412.2 相等性比较24512.3 有序比较24712.4 Index与IndexMut25012.5 其他运算符252第 13章 实用工具特型25313.1 Drop25413.2 Sized25613.3 Clone25913.4 Copy26013.5 Deref与DerefMut26013.6 Default26313.7 AsRef与AsMut26413.8 Borrow与BorrowMut26613.9 From与Into26713.10 TryFrom与TryInto27013.11 ToOwned27113.12 Borrow与ToOwned的实际运用:谦卑的Cow271第 14章 闭包27314.1 捕获变量27414.1.1 借用值的闭包27514.1.2 “窃取”值的闭包27514.2 函数与闭包的类型27714.3 闭包性能27914.4 闭包与安全28014.4.1 “杀死”闭包28014.4.2 FnOnce28114.4.3 FnMut28214.4.4 对闭包的Copy与Clone28414.5 回调28514.6 高效地使用闭包288第 15章 迭代器29015.1 Iterator特型与IntoIterator特型29115.2 创建迭代器29215.2.1 iter方法与iter_mut方法29315.2.2 IntoIterator的实现29315.2.3 from_fn与successors29515.2.4 drain方法29615.2.5 其他迭代器源29715.3 迭代器适配器29815.3.1 map与filter29815.3.2 filter_map与flat_map30015.3.3 flatten30215.3.4 take与take_while30415.3.5 skip与skip_while30515.3.6 peekable30515.3.7 fuse30615.3.8 可逆迭代器与rev30715.3.9 inspect30815.3.10 chain30915.3.11 enumerate30915.3.12 zip31015.3.13 by_ref31015.3.14 cloned与copied31115.3.15 cycle31215.4 消耗迭代器31315.4.1 简单累加:count、sum和product31315.4.2 min与max31315.4.3 max_by与min_by31415.4.4 max_by_key与min_by_key31415.4.5 对条目序列进行比较31515.4.6 any与all31515.4.7 position、rposition和ExactSizeIterator31615.4.8 fold与rfold31615.4.9 try_fold与try_rfold31715.4.10 nth与nth_back31815.4.11 last31915.4.12 find、rfind和find_map31915.4.13 构建集合:collect与FromIterator32015.4.14 Extend特型32215.4.15 partition32215.4.16 for_each与try_for_each32315.5 实现自己的迭代器324第 16章 集合32816.1 概述32916.2 Vec33016.2.1 访问元素33116.2.2 迭代33216.2.3 扩大向量与收缩向量33216.2.4 联结33616.2.5 拆分33616.2.6 交换33916.2.7 填充33916.2.8 排序与搜索33916.2.9 比较切片34116.2.10 随机元素34116.2.11 Rust中不存在失效型错误34216.3 VecDeque34316.4 BinaryHeap34416.5 HashMap与BTreeMap34616.5.1 条目34916.5.2 对Map进行迭代35116.6 HashSet与BTreeSet35116.6.1 对Set进行迭代35216.6.2 当相等的值不完全相同时35316.6.3 针对整个Set的运算35316.7 哈希35416.8 使用自定义哈希算法35516.9 在标准集合之外357第 17章 字符串与文本35817.1 一些Unicode背景知识35817.1.1 ASCII、Latin-1和Unicode35917.1.2 UTF-8编码35917.1.3 文本方向性36117.2 字符(char)36117.2.1 字符分类36117.2.2 处理数字36217.2.3 字符大小写转换36317.2.4 与整数之间的转换36417.3 String与str36417.3.1 创建字符串值36517.3.2 简单探查36617.3.3 追加文本与插入文本36617.3.4 移除文本与替换文本36817.3.5 搜索与迭代的约定36817.3.6 搜索文本的模式36917.3.7 搜索与替换37017.3.8 遍历文本37117.3.9 修剪37317.3.10 字符串的大小写转换37417.3.11 从字符串中解析出其他类型37417.3.12 将其他类型转换为字符串37417.3.13 借用其他类似文本的类型37517.3.14 以UTF-8格式访问文本37617.3.15 从UTF-8数据生成文本37617.3.16 推迟分配37717.3.17 把字符串当作泛型集合37917.4 格式化各种值37917.4.1 格式化文本值38017.4.2 格式化数值38117.4.3 格式化其他类型38317.4.4 格式化值以进行调试38317.4.5 格式化指针以进行调试38417.4.6 按索引或名称引用参数38517.4.7 动态宽度与动态精度38617.4.8 格式化自己的类型38617.4.9 在自己的代码中使用格式化语言38817.5 正则表达式38917.5.1 Regex的基本用法38917.5.2 惰性构建正则表达式值39017.6 规范化39117.6.1 规范化形式39217.6.2 unicode-normalization crate393第 18章 输入与输出39518.1 读取器与写入器39618.1.1 读取器39718.1.2 缓冲读取器39818.1.3 读取行39918.1.4 收集行40118.1.5 写入器40218.1.6 文件40318.1.7 寻址40418.1.8 其他读取器与写入器类型40418.1.9 二进制数据、压缩和序列化40618.2 文件与目录40718.2.1 OsStr与Path40818.2.2 Path与PathBuf的方法40918.2.3 访问文件系统的函数41118.2.4 读取目录41218.2.5 特定于平台的特性41318.3 网络414第 19章 并发41719.1 分叉与合并并行41819.1.1 启动与联结42019.1.2 跨线程错误处理42219.1.3 跨线程共享不可变数据42219.1.4 rayon42419.1.5 重温曼德博集42619.2 通道42719.2.1 发送值42919.2.2 接收值43119.2.3 运行管道43219.2.4 通道的特性与性能43419.2.5 线程安全:Send与Sync43519.2.6 绝大多数迭代器能通过管道传给通道43719.2.7 除管道之外的用法43819.3 共享可变状态43919.3.1 什么是互斥锁43919.3.2 Mutex44019.3.3 mut与互斥锁44219.3.4 为什么互斥锁不是“银弹”44319.3.5 死锁44319.3.6 “中毒”的互斥锁44419.3.7 使用互斥锁的多消费者通道44419.3.8 读/写锁(RwLock)44519.3.9 条件变量(Condvar)44619.3.10 原子化类型44719.3.11 全局变量44819.4 在Rust中编写并发代码的一点儿经验451第 20章 异步编程45220.1 从同步到异步45320.1.1 Future45520.1.2 异步函数与await表达式45620.1.3 从同步代码调用异步函数:block_on45820.1.4 启动异步任务46020.1.5 异步块46420.1.6 从异步块构建异步函数46620.1.7 在线程池中启动异步任务46720.1.8 你的Future实现Send了吗46720.1.9 长时间运行的计算:yield_now与spawn_blocking47020.1.10 对几种异步设计进行比较47120.1.11 一个真正的异步HTTP客户端47120.2 异步客户端与服务器47220.2.1 Error类型与Result类型47420.2.2 协议47420.2.3 获取用户输入:异步流47520.2.4 发送数据包47720.2.5 接收数据包:更多异步流47820.2.6 客户端的main函数48020.2.7 服务器的main函数48120.2.8 处理聊天连接:异步互斥锁48220.2.9 群组表:同步互斥锁48420.2.10 聊天组:tokio的广播通道48520.3 原始Future与执行器:Future什么时候值得再次轮询48820.3.1 调用唤醒器:spawn_blocking48920.3.2 实现block_on49120.4 固定(Pin)49320.4.1 Future生命周期的两个阶段49320.4.2 固定指针49620.4.3 Unpin特型49720.5 什么时候要用异步代码498第 21章 宏50021.1 宏基础50121.1.1 宏展开的基础50221.1.2 意外后果50321.1.3 重复50521.2 内置宏50721.3 调试宏50821.4 构建json!宏50921.4.1 片段类型51021.4.2 宏中的递归51321.4.3 将特型与宏一起使用51421.4.4 作用域界定与卫生宏51621.4.5 导入宏和导出宏51821.5 在匹配过程中避免语法错误51921.6 超越macro_rules!520第 22章 不安全代码52222.1 不安全因素来自哪里52322.2 不安全块52422.3 示例:高效的ASCII字符串类型52522.4 不安全函数52722.5 不安全块还是不安全函数52822.6 未定义行为52922.7 不安全特型53122.8 裸指针53222.8.1 安全地解引用裸指针53422.8.2 示例:RefWithFlag53522.8.3 可空指针53722.8.4 类型大小与对齐方式53722.8.5 指针运算53822.8.6 移动入和移动出内存53922.8.7 示例:GapBuffer54222.8.8 不安全代码中的panic安全性54822.9 用联合体重新解释内存54922.10 匹配联合体55122.11 借用联合体551第 23章 外部函数55223.1 寻找共同的数据表示55223.2 声明外部函数与变量55623.3 使用库中的函数55723.4 libgit2的裸接口56023.5 libgit2的安全接口56623.6 结论575作者介绍576封面介绍576