当前位置:当前位置:主页 > 计算机电子书 > 程序设计 > Rust pdf电子书
Rust实战

Rust实战 PDF 高质量中文版

  • 更新:2022-09-19
  • 大小:36.8 MB
  • 类别:Rust
  • 作者:蒂姆·麦克纳马拉
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

Rust实战》是由人民邮电出版社出版的一本关于Rust方面的书籍,作者是蒂姆·麦克纳马拉,主要介绍了关于Rust实战、Rust方面的知识内容,目前在Rust类书籍综合评分为:7.3分。

书籍介绍

编辑推荐

*赠送源代码示例文件
*涵盖数十个有趣的示例,简洁易懂,帮你了解Rust语法和Rust的实际运用
*内容由浅入深,通过探索多种系统编程概念和技术引入Rust编程语言,推荐给对rust编程感兴趣的你!

内容简介

本书通过探索多种系统编程概念和技术引入Rust编程语言,在深入探索计算机工作原理的同时,帮助读者了解Rust的所有权系统、Trait、包管理、错误处理、条件编译等概念,并通过源自现实的示例来帮助读者了解Rust中的内存模型、文件操作、多线程、网络编程等内容。
本书旨在帮助读者理解如何用Rust进行系统编程,并提供了一些使用Rust编写代码的技巧。本书给出了10余个源自现实的示例,让读者不仅能了解Rust语法,还能了解Rust的实际运用。
本书适合所有对Rust感兴趣的读者阅读。要更好地掌握本书涵盖的内容,读者应具备一定的编程经验,至少应对计算机编程的基本概念有所了解。

目录

  • 第 一部分Rust语言的特色
  • 第 1章Rust语言介绍3
  • 1.1哪些地方使用了Rust?4
  • 1.2在工作中提倡使用Rust5
  • 1.3Rust初体验6
  • 1.3.1直通“Hello, world!”6
  • 1.3.2第 一个Rust程序8
  • 1.4下载本书源代码10
  • 1.5使用Rust语言的感受如何10
  • 1.6Rust语言是什么?13
  • 1.6.1Rust的目标:安全性14
  • 1.6.2Rust的目标:生产力18
  • 1.6.3Rust的目标:控制19
  • 1.7Rust的主要特点20
  • 1.7.1性能20
  • 1.7.2并发21
  • 1.7.3内存使用效率21
  • 1.8Rust的缺点21
  • 1.8.1循环数据结构21
  • 1.8.2编译速度22
  • 1.8.3严格22
  • 1.8.4语言的大小22
  • 1.8.5炒作22
  • 1.9TLS安全性问题的研究22
  • 1.9.1 “心脏出血”23
  • 1.9.2跳转到失败23
  • 1.10Rust最适用于哪些领域?25
  • 1.10.1命令行实用程序25
  • 1.10.2数据处理25
  • 1.10.3扩展应用程序25
  • 1.10.4资源受限的环境26
  • 1.10.5服务器端应用26
  • 1.10.6桌面应用程序26
  • 1.10.7桌面26
  • 1.10.8移动端27
  • 1.10.9Web27
  • 1.10.10系统编程27
  • 1.11Rust的隐式特性:它的社区27
  • 1.12Rust术语表28
  • 本章小结28
  • 第 2章Rust语言基础29
  • 2.1创建一个可运行的程序30
  • 2.1.1编译单文件的Rust程序30
  • 2.1.2使用cargo编译Rust项目31
  • 2.2初探Rust语法32
  • 2.3数字类型34
  • 2.3.1整数和浮点数34
  • 2.3.2整数的二进制、八进制及十六进制表示法35
  • 2.3.3数字的比较运算36
  • 2.3.4有理数、复数和其他数字类型41
  • 2.4流程控制43
  • 2.4.1for循环:迭代的中心支柱43
  • 2.4.2continue:跳过本次迭代余下的部分45
  • 2.4.3while:循环,直到循环条件改变了循环的状态45
  • 2.4.4loop:Rust循环结构的基本组件46
  • 2.4.5break:立即退出循环46
  • 2.4.6if、if else和else:条件测试47
  • 2.4.7match:类型感知的模式匹配48
  • 2.5定义函数50
  • 2.6使用引用50
  • 2.7项目:绘制芒德布罗集51
  • 2.8高级函数定义54
  • 2.8.1显式生命周期注解54
  • 2.8.2泛型函数55
  • 2.9创建grep-lite58
  • 2.10使用数组、切片和动态数组来创建数据列表61
  • 2.10.1数组61
  • 2.10.2切片63
  • 2.10.3动态数组63
  • 2.11包含第三方代码65
  • 2.11.1增加对正则表达式的支持66
  • 2.11.2生成包的本地化文档67
  • 2.11.3使用rustup管理Rust工具链68
  • 2.12命令行参数的支持68
  • 2.13从文件中读取70
  • 2.14从标准输入中读取72
  • 本章小结73
  • 第3章复合数据类型75
  • 3.1使用普通函数对API进行实验76
  • 3.2使用结构体为文件建模77
  • 3.3使用impl为结构体添加方法81
  • 3.4返回错误信息84
  • 3.4.1修改一个著名的全局变量85
  • 3.4.2使用Result作为返回类型88
  • 3.5定义并使用枚举体91
  • 3.6使用trait来定义共有的行为95
  • 3.6.1创建名为Read的trait95
  • 3.6.2为类型实现std::fmt::Display96
  • 3.7将类型暴露给外部使用99
  • 3.8创建内联文档100
  • 3.8.1使用rustdoc给单个源文件生成文档101
  • 3.8.2使用cargo为一个包及其依赖的包生成文档101
  • 本章小结103
  • 第4章生命周期、所有权和借用104
  • 4.1实现一个模拟的立方体卫星地面站105
  • 4.1.1遇到第 一个生命周期问题106
  • 4.1.2基本类型的特殊行为109
  • 4.2本章图例的说明110
  • 4.3所有者是什么?它有什么职责?111
  • 4.4所有权是如何移动的?112
  • 4.5解决所有权的问题114
  • 4.5.1在不需要完整所有权的地方,使用引用116
  • 4.5.2使用更少的长存活期的值119
  • 4.5.3在需要完整所有权的地方,复制长存活期的值124
  • 4.5.4把数据包装到特殊的类型中127
  • 本章小结129
  • 第二部分揭开系统编程的神秘面纱
  • 第5章深入理解数据133
  • 5.1位模式和类型133
  • 5.2整数的生存范围135
  • 5.3小数的表示形式139
  • 5.4浮点数139
  • 5.4.1观察f32的内部140
  • 5.4.2分离出符号位141
  • 5.4.3分离出指数142
  • 5.4.4分离出尾数143
  • 5.4.5剖析一个浮点数145
  • 5.5定点数格式147
  • 5.6从随机字节中生成随机概率151
  • 5.7实现一个CPU模拟器以建立函数也是数据的观念153
  • 5.7.1CPU原型1:加法器153
  • 5.7.2CPU原型1完整的清单157
  • 5.7.3CPU原型2:累加器159
  • 5.7.4CPU原型3:调用函数162
  • 5.7.5CPU 4:添加额外功能168
  • 本章小结168
  • 第6章内存169
  • 6.1指针169
  • 6.2探索Rust的引用和指针类型171
  • 6.2.1Rust中的原始指针176
  • 6.2.2Rust指针的生态系统178
  • 6.2.3智能指针构建块180
  • 6.3为程序提供存储数据的内存181
  • 6.3.1栈181
  • 6.3.2堆183
  • 6.3.3什么是动态内存分配?187
  • 6.3.4分析动态内存分配的影响192
  • 6.4虚拟内存194
  • 6.4.1背景195
  • 6.4.2第 一步:让一个进程来扫描它自己的内存196
  • 6.4.3把虚拟地址翻译为物理地址198
  • 6.4.4第二步:通过操作系统来扫描地址空间201
  • 6.4.5第三步:读取和写入进程内存中的字节数据203
  • 本章小结203
  • 第7章文件与存储204
  • 7.1文件格式是什么?204
  • 7.2创建你自己的用于存储数据的文件格式206
  • 7.3实现一个hexdump的克隆208
  • 7.4Rust中的文件操作211
  • 7.4.1使用Rust打开一个文件并控制文件的模式211
  • 7.4.2使用std::fs::Path以一种类型安全的方式与文件系统进行交互212
  • 7.5使用基于日志结构、仅追加的存储架构,来实现一个键值存储213
  • 7.5.1键值模型213
  • 7.5.2讲解actionkv v1:一个带有命令行接口的内存中的键值存储214
  • 7.6Actionkv v1:前端代码215
  • 7.7理解ACTIONKV的核心:LIBACTIONKV包219
  • 7.7.1初始化ActionKV结构体219
  • 7.7.2处理单条记录221
  • 7.7.3以确定的字节顺序将多字节二进制数据写入磁盘223
  • 7.7.4使用校验和来验证I/O错误225
  • 7.7.5向已存在的数据库中插入一个新的键值对227
  • 7.7.6actionkv的完整清单228
  • 7.7.7使用HashMap和BTreeMap来处理键和值232
  • 7.7.8创建一个HashMap并用值来填充它234
  • 7.7.9从HashMap和BTreeMap中来检索值235
  • 7.7.10在HashMap和BTreeMap之间如何选择236
  • 7.7.11给actionkv v2.0添加数据库索引237
  • 本章小结240
  • 第8章网络242
  • 8.1全部的网络体系都在7个分层中243
  • 8.2使用reqwest来生成一个HTTP GET请求245
  • 8.3trait对象247
  • 8.3.1trait对象能做什么?247
  • 8.3.2trait对象是什么?247
  • 8.3.3创建一个微型的角色扮演游戏:rpg项目248
  • 8.4TCP251
  • 8.4.1端口号是什么?252
  • 8.4.2把主机名转换为IP地址252
  • 8.5以符合工效学的方式处理来自多个包的错误258
  • 8.5.1问题:无法返回多种错误类型259
  • 8.5.2通过定义错误类型来包装下游的错误262
  • 8.5.3使用unwrap()和expect()来“作弊”267
  • 8.6MAC地址268
  • 8.7使用Rust的枚举体来实现状态机271
  • 8.8原始TCP272
  • 8.9创建一个虚拟网络设备272
  • 8.10原始HTTP273
  • 本章小结282
  • 第9章时间与时间保持283
  • 9.1背景284
  • 9.2时间源285
  • 9.3一些相关的术语定义286
  • 9.4时间的编码287
  • 9.5clock v0.1.0:教会一个应用程序如何报时288
  • 9.6clock v0.1.1:格式化时间戳以符合ISO 8601和电子邮件的标准289
  • 9.6.1重构clock v0.1.0的代码以支持更广泛的体系结构290
  • 9.6.2时间的格式化291
  • 9.6.3提供一个完整的命令行接口291
  • 9.6.4clock v0.1.1:完整的项目代码293
  • 9.7clock v0.1.2:设置时间295
  • 9.7.1相同的行为模式295
  • 9.7.2给使用libc的操作系统来设置时间296
  • 9.7.3在Windows上设置时间298
  • 9.7.4clock v0.1.2:完整的清单300
  • 9.8改善错误处理303
  • 9.9clock v0.1.3:使用NTP来解决时钟之间的差异304
  • 9.9.1发送NTP请求并解析响应304
  • 9.9.2依据服务器的响应来调整本地时间306
  • 9.9.3在使用了不同的精度和纪元的时间表示法之间进行转换308
  • 9.9.4clock v0.1.3:完整的清单309
  • 本章小结316
  • 第 10章进程、线程和容器318
  • 10.1匿名函数319
  • 10.2产生线程320
  • 10.2.1引入闭包320
  • 10.2.2产生一个新线程321
  • 10.2.3产生几个线程的效果321
  • 10.2.4产生很多个线程的效果322
  • 10.2.5重新生成这些结果324
  • 10.2.6共享的变量328
  • 10.3闭包与函数的差异330
  • 10.4从多线程解析器和代码生成器中程序化地生成头像331
  • 10.4.1如何运行render-hex以及预期的输出331
  • 10.4.2单线程版本render-hex的概要介绍 333
  • 10.4.3为每个逻辑上的任务产生一个线程341
  • 10.4.4使用线程池和任务队列343
  • 10.5并发与任务虚拟化350
  • 10.5.1线程352
  • 10.5.2上下文切换是什么?352
  • 10.5.3进程353
  • 10.5.4WebAssembly353
  • 10.5.5容器353
  • 10.5.6为什么要使用操作系统呢?354
  • 本章小结354
  • 第 11章内核355
  • 11.1初级操作系统(FledgeOS)355
  • 11.1.1搭建开发环境,用于开发操作系统内核355
  • 11.1.2验证开发环境357
  • 11.2Fledgeos-0:先让一些东西能运行起来358
  • 11.2.1第 一次引导启动358
  • 11.2.2编译的步骤359
  • 11.2.3源清单360
  • 11.2.4处理panic364
  • 11.2.5使用VGA兼容的文本模式写入屏幕365
  • 11.2.6_start():FledgeOS的main()函数366
  • 11.3fledgeos-1:避免使用忙循环367
  • 11.3.1通过直接与CPU交互来降低功耗367
  • 11.3.2fledgeos-1的源代码368
  • 11.4fledgeos-2:自定义异常处理369
  • 11.4.1几乎可以正确地处理异常369
  • 11.4.2fledgeos-2的源代码369
  • 11.5fledgeos-3:文本的输出370
  • 11.5.1把彩色的文本输出到屏幕371
  • 11.5.2控制枚举体的内存表示形式371
  • 11.5.3为何要使用枚举体?372
  • 11.5.4创建出一个类型,能够用来输出到VGA的帧缓冲区372
  • 11.5.5输出到屏幕373
  • 11.5.6fledgeos-3的源代码373
  • 11.6fledgeos-4:自定义恐慌处理375
  • 11.6.1实现一个恐慌处理程序,能够向用户报告错误375
  • 11.6.2使用core::fmt::Write来重新实现panic()376
  • 11.6.3实现core::fmt::Write376
  • 11.6.4fledgeos-4的源代码377
  • 本章小结379
  • 第 12章信号、中断和异常380
  • 12.1术语表380
  • 12.2中断是如何影响应用程序的?383
  • 12.3软件中断384
  • 12.4硬件中断385
  • 12.5信号处理386
  • 12.5.1默认的行为386
  • 12.5.2用来暂停和恢复一个程序的操作386
  • 12.5.3列出操作系统支持的所有信号389
  • 12.6使用自定义的行为来处理信号389
  • 12.6.1在Rust中使用全局变量390
  • 12.6.2使用全局变量来指示已经启动了关机392
  • 12.7发送由应用程序定义的信号394
  • 12.8如何忽略信号?396
  • 12.9从深层嵌套的调用栈中关闭程序397
  • 12.9.1sjlj项目的介绍399
  • 12.9.2在程序中设置固有函数399
  • 12.9.3把指针转换成其他类型401
  • 12.9.4编译sjlj项目402
  • 12.9.5sjlj项目的源代码403
  • 12.10将这些技术应用于不支持信号的平台的说明406
  • 12.11修订异常406
  • 本章小结406

资源获取

相关资源

网友留言