《Rust实战项目开发》是一本以实战为主的Rust编程指南,每个章节都经过了作者精心挑选和打磨。全书由3部分组成:第1部分(第1~2章),介绍了Rust实战前需要掌握的基础知识。第2部分(第3~10章),将Rust基础知识融入实际项目中,向读者详细阐述了不同业务场景的实战项目该怎么做,以及技术实现原理和运行机制。第3部分(第11章),通过一个综合应用向读者演示了如何在Rust语言中使用标准库和常见的第三方库构建一个高性能、高并发的实际项目。这3部分的内容,可帮助读者更快、更轻松地上手Rust实战项目开发,走向更为广阔的职业生涯。《Rust实战项目开发》主要面向系统编程的开发者、高等院校在校师生和Rust语言爱好者。
《Rust实战项目开发》围绕“Rust是什么”“为什么使用Rust”“Rust是怎么解决问题”,以及“Rust实践中遇到的问题如何解决”,以工程实践为导向,全面整合了Rust在Web开发、微服务、命令行工具(CLI)、图形界面(GUI)、外部函数接口(FFI)调用等多元应用场景,为广大开发者提供了一站式的解决方案。
Rust行业状况Rust是一门通用系统级编程语言,以无GC且能保证内存安全、类型安全、并发安全和高性能而著称。近几年在操作系统、分布式数据库、微服务、网络编程、命令行工具、前端开发工具链、游戏开发、嵌入式开发等多个领域展现出强大的应用潜力。2021年2月9日,Rust 基金会宣布成立,华为、AWS、Google、微软、Mozilla、Facebook等知名科技行业领军巨头加入Rust 基金会,成为白金成员,致力于在全球范围内推广和发展Rust语言。根据Rust开发者调查报告显示,从2016年到2024年,Rust已连续八年成为StackOverflow语言榜上最受欢迎的语言之一,备受广大开发者的欢迎和喜爱。截止到2024年第一季度,全球Rust开发者已达到400万,这一增长速度使Rust成为社区扩张速度最快的编程语言之一。如何阅读本书本书是按照不同内容主题来组织的,基本上每个章节的内容都是相互独立的。读者可以从头到尾进行阅读,也可以挑选感兴趣的章节进行阅读,边学边实际操作。这里需要说明一点:本书配套资源的内容,作者会放在GitHub仓库中,读者可以自行下载和查阅。以下是本书每个部分的内容概述:第1部分 Rust语言基础本部分由第1章和第2章组成,详细介绍了在Rust实战项目开发前,需要掌握哪些Rust基础知识。这部分的内容,是全书实战的基础知识之一,希望每位读者能够静下心来阅读,并结合自身实际情况实战演练。第2部分 Rust实际项目开发本部分由第3~10章组成,将第一部分Rust基础知识融入Rust实战案例中,详细阐述了Rust实战项目的操作步骤、技术实现、运行原理、注意事项及实战技巧等,帮助读者快速上手Rust实战项目开发。第3部分 Rust综合应用实战本部分由第11章组成,将前两个部分作为前提,以一个综合应用实战向读者演示了该如何使用Rust语言构建一个高性能、高并发的实际项目,旨在帮助读者更快、更轻松地使用Rust语言,从而走向更广阔的职业生涯。前言本书Rust版本约定 Rust version不低于1.82.0。 Rust edition为2021。Rust语言的每个edition都包含了一些新的语言特性或对现有特性的改进,这些变化可能会涉及新的语法(语法糖)、函数、库的支持、工具链的更新等方面,以确保Rust语言的持续发展和进步。此外,Rust edition发布也考虑了向后兼容性,以确保现有的代码能够在新的Rust edition中继续运行。因此,本书中的全部Rust代码同样可以在Rust更高版本中运行。勘误和支持由于本书内容涉及范围比较多,在撰写本书时难免有疏忽和不足之处,恳请读者批评和指正。为了更好地方便读者学习本书中的内容,提供以下配套资源。 本书实战项目源代码:https://github.com/daheige/rust-in-action。 Rust Web框架实战:https://github.com/daheige/rs-api。 gRPC微服务框架实战:https://github.com/daheige/rs-rpc。 Rust-Cookbook开源项目:https://github.com/daheige/rs-cookbook。 Rust基础学习B站视频:https://space.bilibili.com/580545629。 技术交流:关注视频号大黑哥或GitHub账号daheige。读者可以根据实际情况查看和学习上述资源,以获得更加丰富的实战经验,并将所学知识应用于不同领域的需求开发,进一步加速自己的学习和成长。如果读者在阅读本书的过程中,遇到错误或疑惑,可以直接提交相关issue到本书源码对应的仓库中,或者发送邮件到zhuwei313@hotmail.com,作者会在第一时间关注和回复。如果读者还有更多的宝贵意见,也欢迎一起探讨和交流。除此之外,作者还长期致力于Go和Rust开源项目共建,感兴趣的读者可以关注作者的GitHub账号,一起学习和交流。致谢在我编写本书时,家人给予了我巨大的支持和理解,让我可以全身心投入到写作中。在此我将本书献给家人,以及每一位Rust开发者和Rust爱好者。感谢Rust官方和Rust社区带来了如此优秀的编程语言,让我可以编写更高效、更安全的代码,同时也提升了自己工程实践和抽象设计的能力。感谢Fadeway(王伟)、Damonxue(薛慧郎)、Chair、Brice(云翔)、Houseme(智刚)、王官峰、蔡明师、李正强等小伙伴对本书的校对和支持。感谢机械工业出版社的编辑李培培,她在本书写作过程中给了我宝贵的建议和耐心指导。同时,也感谢出版社的所有工作人员对本书的辛勤付出。作者
朱伟(大黑哥),资深Go开发者(布道者)、资深PHP架构师、资深Nodejs开发者、Rust语言布道者。作者具有10多年一线开发经验,先后从事海量邮件群发系统、千万级电商平台和金融平台、游戏平台、Saas等不同行业的开发和架构设计。在微服务、敏捷开发、项目管理、架构设计、Go项目开发、Rust系统编程等不同领域,具有深入的研究和丰富的实战经验,长期致力于Go、Rust、Nodejs多个开源项目共建。
序一序二推荐语前言第1部分Rust语言基础第1章Rust语言简介1.1Rust基本介绍1.1.1Rust是什么1.1.2为什么需要Rust1.1.3Rust应用领域1.1.4Rust未来发展1.2Rust初步体验1.2.1Rust安装1.2.2Rust镜像源配置1.2.3Rust单元测试、集成测试和基准测试1.3Rust工具链1.3.1Rust编辑器选择1.3.2cargo工具使用1.3.3rustup版本更新1.4Rust交叉编译1.4.1在macOS上实现交叉编译1.4.2在Windows上实现交叉编译1.4.3通过cross工具实现跨平台交叉编译第2章Rust模块化编程实战2.1Rust中的模块化编程简介2.2Package(包)2.2.1二进制类型的包2.2.2library类型的包2.3Module(模块)2.3.1Module的定义与使用2.3.2使用pub改变模块的可见性2.3.3使用use引入模块和模块中的成员2.3.4使用super与self简化模块路径2.3.5使用pub use重新导出2.4模块层次结构划分2.4.1将模块映射到文件2.4.2将模块映射到目录2.5Crate(单元包)管理2.5.1crates.io托管平台2.5.2编写一个随机数生成的实例2.5.3编写一个终端输出变色的实例2.5.4编写与发布一个自定义的单元包Rust实战项目开发第2部分Rust实际项目开发第3章Rust JSON实战3.1JSON基础3.1.1JSON基本数据类型3.1.2JSON序列化和反序列化3.2serde基本简介3.3serde_json基本操作3.3.1serde_json序列化与反序列化3.3.2serde_json自定义序列化和反序列化3.3.3serde_json中的json!宏3.3.4serde_json其他高级特性3.3.5编写一个JSON配置文件读取案例第4章Rust Web编程实战4.1Web编程简介4.1.1TCP4.1.2HTTP4.2使用Rust构建Web Server4.2.1创建一个简单的单线程Web Server4.2.2将单线程Web Server重构为多线程Web Server4.2.3Web服务平滑退出4.3Rust Web编程第三方库操作4.3.1tide库使用4.3.2axum库使用4.3.3编写一个简单的短链接服务第5章Rust命令行界面实战5.1CLI简介5.1.1什么是CLI5.1.2CLI使用场景5.2Rust命令行参数解析5.2.1从终端获取CLI参数5.2.2CLI参数类型转换5.3第三方CLI库操作5.3.1使用structopt库处理CLI参数5.3.2使用clap库处理CLI参数5.3.3编写一个图片压缩、裁剪和旋转的CLI工具5.3.4编写一个MySQL表结构转换为Rust结构体的CLI工具第6章Rust crontab实战6.1crontab简介6.1.1什么是crontab6.1.2crontab基本用法6.2crontab使用时的注意事项6.2.1crontab执行路径问题6.2.2crontab读取环境变量问题6.3Rust中第三方cron库的基本操作6.3.1第三方库rcron的使用6.3.2编写一个日志文件自动切割的工具6.3.3编写一个MySQL数据库定时备份的工具第7章Rust中的数据库和缓存实战7.1数据库和缓存简介7.2MySQL7.2.1MySQL下载和安装7.2.2MySQL基本用法7.3Redis7.3.1Redis下载和安装7.3.2Redis基本数据类型7.4Rust中的MySQL和Redis操作7.4.1使用sqlx库操作MySQL7.4.2使用redis-rs操作Redis7.4.3编写一个增量同步的阅读数服务第8章Rust中的消息队列实战8.1消息队列简介8.2Kafka基础8.2.1Kafka安装8.2.2Kafka基本概念8.3Pulsar基础8.3.1Pulsar安装8.3.2Pulsar基本概念8.4Rust中的Kafka和Pulsar操作8.4.1使用Kafka Client库操作Kafka8.4.2使用Pulsar Client库操作Pulsar8.4.3编写一个简单的积分系统第9章Rust FFI调用实战9.1Rust安全性和不安全性9.2Rust FFI调用简介9.2.1FFI调用的安全性和不安全性9.2.2FFI调用的注意事项9.3Rust Qt绑定9.3.1Qt安装9.3.2Rust Qt相关绑定库简介9.3.3使用cxx-qt编写一个桌面应用程序9.3.4使用qmetaobject编写一个桌面应用程序9.4Rust与其他语言交互9.4.1使用cc库在Rust中调用C语言代码9.4.2使用neon库为Node.js编写原生拓展9.4.3使用PyO3为Python编写拓展第10章Rust并发编程与异步编程实战10.1并发与并行10.2Rust并发编程10.2.1使用spawn创建线程10.2.2自定义线程和move关键字10.2.3Mutex和Arc10.2.4channel消息传递10.3Rust异步编程10.3.1为什么需要异步编程10.3.2asyncawait基础10.3.3async中的move关键字10.3.4tokio运行时第3部分Rust综合应用实战第11章构建一个高并发的QA(问答)系统实战11.1QA系统架构设计11.1.1功能分析11.1.2架构设计11.1.3pb协议定义11.2QA系统layout分层11.3QA系统技术实现11.3.1使用tonic库编写gRPC微服务接口11.3.2使用serde_yaml读取配置文件11.3.3使用Redis计数器实现问题阅读数功能11.3.4使用Pulsar实现回答点赞功能11.3.5使用log和env_logger记录日志11.3.6gRPC HTTP网关层11.4QA系统的服务可观测性建设11.4.1metrics接入11.4.2prometheus部署与接入11.4.3grafana部署与接入11.5QA系统的部署方式选择11.5.1使用supervisor工具部署二进制文件11.5.2使用Rust Docker镜像构建与发布参考文献