Rust编程之道 9787121354854,7121354853

配送至
$ $ USD 美元

编辑推荐

√ Rust,集安全、高性能、高效率、高可读性于一身,是开发一款优秀产品不得不考虑的编程语言,学习Rust势在必行!
√ 本书作者作为Rust语言的早期实践者,以及中国社区的管理运营者,对Rust的设计理念有深入理解,并有丰富的实践经验。
√ 从设计哲学、源码分析、工程视角、底层原理多个维度,对Rust语言进行系统化梳理,帮助读者理清知识脉络,降低学习曲线。
√ 本书附有随书源码,配套运行,方便读者在实践中巩固理论知识,熟悉Rust在生产环境中的应用,避免纸上谈兵的尴尬。

名人推荐

Even though I had to read this book through Google Translate, The Tao of Rust is an extremely interesting book. It starts off explaining exactly why it is different: it's a book that gets you to think about Rust, and its perspective on the world. I only wish I could read it in its native tounge, as I'm sure it's even better then! I have been working on Rust for six years now, and this book changed my perspective on some aspects of the language. That's very powerful!
即便我不得不通过谷歌翻译阅读这本书,但也不难发现《Rust 编程之道》是一本非常有趣的书。它解释了Rust 为何与众不同:这本书可以让你思考Rust,以及Rust 语言所蕴含的世界观。我好希望能读懂中文原版书,因为我相信它会更精彩! 我已经从事Rust 的相关工作六年了,这本书改变了我对Rust 语言的某些看法。这非常强大!
——Steve Klabnik,Rust 官方核心团队成员及文档团队负责人

I knew Rust was a notoriously difficult programming language to learn, but it wasn’t until I read the preface to The Tao of Rust, by Alex Zhang, that I realized why it is so difficult. Alex writes:
Rust covers a wide range of knowledge, including object-oriented, functional programming, generics, underlying memory management, type systems, design patterns,and more.
Alex covers all of these topics and more in The Tao of Rust. A single text that ties all of this together will be invaluable for Rust learners. So far I’ve read a couple of chapters translated from the original Chinese, and I can’t wait to read more.
Rust 语言难学,这已经是众所周知的了。但是直到我看到Alex(张汉东)的《Rust 编程之道》的前言时,我才明白它为什么如此难学,Alex 写道:
“Rust 涉及的知识范围非常广泛,涵盖了面向对象、函数式、泛型、底层内存管理、类型系统、设计模式等知识。”
《Rust 编程之道》一书涵盖了所有这些主题和内容,并且将这些内容有机地联系在一起,这对于Rust 的学习者来说是非常宝贵的。我阅读了本书部分内容的英文译稿后,就已经迫不及待地想要阅读更多的内容了。
—— Patrick Shaughnessy,《Ruby 原理剖析》原著作者

Rust 是一门相对难学的语言,我个人认为它的学习曲线比C++的学习曲线更陡峭,但我相信,通过《Rust 编程之道》,大家能快速掌握Rust,体验使用Rust 编程的乐趣,也能更快地在项目中使用Rust 来保证程序的健壮性。如果你遇到了困难,不用害怕,你可以很方便地从Rust 社区得到帮助。
——唐刘,PingCAP 首席架构师,TiKV 负责人

Rust 自诞生之初就背上了晦涩难学的名声,以至于很多程序员想学而无法窥得门径。这本《Rust编程之道》是国内Rust社区里难得的优秀作品,它由浅入深,剥茧抽丝,把一个个概念阐释得清晰通透。我们知道,学习一门语言,语法是皮毛,概念是肌理,思想是精髓。汉东在本书的各个章节中,不断地阐述Rust语言的思想和灵魂,帮助读者真正理解 Rust 创作者的苦心。之前我听过汉东做的Rust培训,感觉醍醐灌顶;又看了本书的三章样章,对《Rust 编程之道》便有了满满的期待。
——陈天,ArcBlock(区块基石)技术VP 终于看见由国内资深

Rust程序员所写的Rust著作了,本书从语言宗旨到语义逻辑,由浅入深地将Rust语言介绍给国内的读者,相信能够解决目前大部分Rust初学者的问题及疑惑。
——杨梓杰(KiChjang@美国),Rust开发者,Servo资深贡献者

本书内容翔实,示例丰富且易于理解,相信能够为读者学习和使用Rust扫清种种障碍。我在一年前首次使用Rust开发了知乎新一代搜索系统,我多么希望那时就能读到这本书,那样就可以解答当时的种种疑惑,并避免一路上所犯的错误和付出的昂贵代价了。
——孙晓光,知乎搜索技术架构Leader

BiliBili正尝试在自己的持续集成系统、分布式文件系统、KV系统、缓存系统中使用 Rust语言开发一些组件。Rust本身具备的线程安全、零成本、便利的FFI等特性,使之非常适合开发一些系统底层组件和基础系统。但是,Rust的学习曲线颇陡,需要一本讲解细致、逻辑清晰的书籍作为指导。张老师的这本《Rust编程之道》就非常适合Rust的初学者,值得每一位想了解或深入学习Rust的程序员细细品读。同时也希望Rust在中国乃至世界范围内的影响力越来越大,生态越来越好。
——赵雪松(wayslog),BiliBili高级工程师

一年以来,汉东的《Rust每日新闻》为大家提供了极丰富的信息,大大推动了国内Rust社区的发展。《Rust编程之道》正是汉东多年深入探索Rust语言本身以及通用编程之道的匠心之作。愿本书的出版能成为Rust语言在国内推广普及的重要里程碑。感谢汉东的工作!
——唐刚,Rust Web框架Sapper作者

Rust语言内存安全,拥有强大的类型系统、高度的抽象表达能力以及方便的FFI,这些特点让它成为了一门前景光明的编程语言。一门好的语言自然需要一位好的引路人,《Rust编程之道》从设计哲学出发,结合代码实践,层次分明、逻辑通透,能帮助读者形成更系统化的理解,是一本优秀的Rust中文书籍。
—— LeetCode(领扣网络)

作者简介

张汉东,80后,资深软件工程师、企业独立咨询师、技术作者译者。爱好读书、写作,喜欢研究技术、学习之道,以及心智和认知开发模式。曾在互联网行业沉浮十余载,先后效力于电商、社交游戏、广告和众筹领域。作为企业独立咨询师,先后为思科、平安科技和闪迪等公司提供咨询服务。目前在心智教育及创客领域开疆拓土。是《Ruby原理剖析》一书的译者。喜欢Rust语言,为Rust语言提交了三次编译器Bug,并协助修复其中之一。为官方Rust 2018 Guide做过贡献,并数次提出改进意见。参与了国内Rust社区的管理和运营,在2018年打造了《Rust每日新闻》频道,深受Rustacean们的喜爱。为初学者精心打造了Rust必学第一课:知乎Live《如何系统地学习Rust语言》,获得五星好评。

目录

第1 章 新时代的语言 .................................................................................................. 1
1.1 缘起 ........................................................................................................................... 1
1.2 设计哲学 ................................................................................................................... 3
1.2.1 内存安全....................................................................................................... 3
1.2.2 零成本抽象 ................................................................................................... 4
1.2.3 实用性 .......................................................................................................... 5
1.3 现状与未来 ............................................................................................................... 7
1.3.1 语言架构....................................................................................................... 8
1.3.2 开源社区....................................................................................................... 9
1.3.3 发展前景....................................................................................................... 9
1.4 Rust 代码如何执行 ................................................................................................ 10
1.5 小结 ......................................................................................................................... 10
第2 章 语言精要 ........................................................................................................ 11
2.1 Rust 语言的基本构成 ............................................................................................. 11
2.1.1 语言规范..................................................................................................... 11
2.1.2 编译器 ........................................................................................................ 12
2.1.3 核心库 ........................................................................................................ 12
2.1.4 标准库 ........................................................................................................ 12
2.1.5 包管理器..................................................................................................... 13
2.2 语句与表达式 ......................................................................................................... 13
2.3 变量与绑定 ............................................................................................................. 14
2.3.1 位置表达式和值表达式 ............................................................................. 15
2.3.2 不可变绑定与可变绑定 ............................................................................. 15
2.3.3 所有权与引用 ............................................................................................. 16
2.4 函数与闭包 ............................................................................................................. 17
2.4.1 函数定义..................................................................................................... 17
2.4.2 作用域与生命周期 ..................................................................................... 18
2.4.3 函数指针..................................................................................................... 19
2.4.5 CTFE 机制 .................................................................................................. 20
2.4.6 闭包 ............................................................................................................ 20
2.5 流程控制 ................................................................................................................. 22
2.5.1 条件表达式 ................................................................................................. 22
2.5.2 循环表达式 ................................................................................................. 23
2.5.3 match 表达式与模式匹配 .......................................................................... 24
2.5.4 if let 和while let 表达式 ............................................................................ 25
2.6 基本数据类型 .........................

序言


当我2015 年开始学习Rust 的时候,我绝对没有想过要写一本Rust 编程的书。
缘起
当时我刚刚翻译完《Ruby 原理剖析》一书,开始对底层开发产生了一点点兴趣。从2006年入行以来,我就一直和动态语言打交道。虽然自己也想学习底层开发,但能选择的语言几乎只有C++。我在学校里浅浅地学过C++这门语言,也许是第一印象作怪,总难以提起对C++的兴趣。
当Rust 1.0 发布时,我去官方网站了解了一下Rust 语言,发现它的主要特点有以下几方面:
? 系统级语言
? 无GC
? 基于LLVM
? 内存安全
? 强类型+静态类型
? 混合编程范式
? 零成本抽象
? 线程安全
我一下子就被这些鲜明的特性“击中”了,从此开始了Rust 的学习。
再一次爱上编程
第一次爱上编程是在上小学时。父亲给我买回来一台金字塔学习机,这台学习机有两种功能,一种是学习Logo 语言,另一种是玩卡带游戏。编写Logo 语言就是用小海龟画图,也许是因为太早了,也许是因为没有人引导,那时的我选择了痛快地玩游戏。总想着先玩游戏,再去学怎么编程,然后还幻想着能不能用Logo 语言编写一个游戏。其实这时候的我对编程更多的是一种憧憬,并没有在学习编程上付出更多的实际行动。
第二次爱上编程是在大学初次学习C 语言的时候。我本可以选择计算机科学专业,但是最后还是选了电子信息科学与技术专业。这样选是因为我想把软硬件都学了。想法是好的,可惜实施起来并不容易。最后的结果就是,软硬件都没学好。
第三次爱上编程是在遇到Ruby 语言的时候。当时我在用Java,并且已经完全陷入了Java语言和Web 框架纷繁复杂的细节中,痛苦不堪。Ruby on Rails 框架的横空出世,把我从这种状态中解救了出来。Ruby 语言的优雅和自由,以及“让程序员更快乐”的口号深深地吸引了我。这一次我是真正爱上了编程,并且积极付诸行动去学习和提升自己。此时也恰逢互联网创业大潮的开始,Ruby 语言的开发效率让它迅速成为创业公司的宠儿,因此,我也借着Ruby
这门语言参与到了这股创业洪流中。
第四次爱上编程是在遇到Rust 的时候。此时,创业洪流已经退潮。技术圈有句话,叫“十年一轮回”。当年喜欢Ruby 给开发过程带来的快乐,但是随着时代的变革和业务规模的增长,我不禁开始重新思考一个问题:何谓快乐?真正的快乐不仅仅是写代码时的“酸爽”,更应该是代码部署到生产环境之后的“安稳”。Rust 恰恰可以给我带来这种“双重快乐”体验。
为什么是Rust
社区中有人模仿阿西莫夫的机器人三大定律,总结了程序的三大定律:
? 程序必须正确。
? 程序必须可维护,但不能违反第一条定律。
? 程序必须高效,但不能违反前两条定律。
程序的正确性,一方面可以理解为该程序满足了实际的问题需求,另一方面是指满足了它自身的程序规约。那么如何保证程序的正确性呢?首先,可以通过对程序的各种测试、断言和错误处理机制,来保证其满足实际的问题需求。其次,在数学和计算机科学已经融合的今天,通过较为成熟的类型理论即可保证程序自身的规约正确。
以我最熟悉的Ruby 语言为例,程序的正确性必须依赖于开发者的水平,并需要大量的测试代码来保证正确性。即便在100%测试覆盖率的条件下,也经常会遇到NilError 之类的空指针问题。也就是说,Ruby 程序自身的正确性还没有得到保证。以此类推,C、C++、Python、Java、JavaScript 等语言都有同样的问题。
而函数式编程语言在这方面要好很多,尤其是号称纯函数式的Haskell 语言,它具有融合了范畴理论的类型系统,利用了范畴理论自身的代数性质和定律保证了程序自身的正确性。然而,Haskell 也有比较明显的缺点,比如它不满足上述第三条定律,运行效率不高。
反观Rust 语言,对程序的三定律支持得恰到好处。它借鉴了Haskell 的类型系统,保证了程序的正确性。但还不止于此,在类型系统的基础上,Rust 借鉴了现代C++的内存管理机制,建立了所有权系统。不仅保证了类型安全,还保证了内存安全。同时,也解决了多线程并发编程中的数据竞争问题,默认线程安全。再来看代码的可维护性,Rust 代码的可读性和抽象能力都是一流的。不仅拥有高的开发效率,还拥有可以和C/C++媲美的性能。当然,没有银弹,但Rust 就是我目前想要的语言。
目前Rust 被陆续应用在区块链、游戏、WebAssembly 技术、机器学习、分布式数据库、网络服务基础设施、Web 框架、操作系统和嵌入式等领域。时代在变化,未来的互联网需要的是安全和性能并重的语言,Rust 必然会在其中大放异彩。
学习Rust 带来了什么收获
Rust 是一门现代化的语言,融合了多种语言特性,而且Rust 语言可以应用的领域范围非常广泛。在学习Rust 的过程中,我发现自己的编程能力在很多方面存在短板。突破这些短板的过程实际上就是一次自我提升的过程。
Rust 是一门成长中的新语言,学习Rust,跟随Rust 一起成长,可以体验并参与到一门真正工业化语言的发展进程中,感觉就像在创造历史。虽然我并未给Rust 语言提交过PR,但也为Rust 语言和社区多次提交过Bug,以及文档和工具的改进意见。
Rust 自身作为一个开源项目,算得上是开源社区中的“明星”项目了。学习Rust 的过程加深了我对开源社区的认识,也开拓了我的眼界。
为什么要写这本书
在学习Rust 一年之后,我写下了《如何学习一门新语言》一文,其中记录了我学习Rust的心得,这篇文章颇受好评。也正因为这篇文章,电子工业出版社的刘恩惠编辑找到了我,并询问是否可以出一本Rust 编程的书籍。我当时也正想通过一本书来完整地表达自己的学习心得,再加上中文社区中没有较全面系统的Rust 书籍,于是,一拍即合。
写书的过程可以形容为痛并快乐着。Rust 语言正值成长期,很多语言特性还在不断地完善。举一个极端的例子,比如写下某段代码示例并成功编译后,过了三天却发现它无法编译通过了。于是,我再一次跟进Rust 的RFC、源码、ChangeLog 去看它们的变更情况,然后再重新修订代码示例。这个过程虽然痛苦,但改完之后会发现Rust 的这个改进确实是有必要的。
在这个过程中,我看到了Rust 的成长,以及Rust 团队为保证语言一致性和开发者的开发体验所付出的努力,让我感觉自己花再多时间和精力去修改本书的内容都是值得的。
话说回来,任何人做事都是有动机或目的的,我也不例外。我写这本书的目的主要有以下三个。
? 为Rust 中文社区带来一本真正可以全面系统地学习Rust 的书。
? 以教为学。在写作的过程中,让自己所学的知识进一步内化。
? 传播一种自学方法。本书内容以Rust 语言的设计哲学为出发点,按照从整体到细节的思路逐个阐述每个语言特性,希望读者可以产生共鸣。
结语
我自己作为本书的第一位读者,目前对这本书是非常满意的。衷心希望每一位读者都能从本书中收获新知。当然,我也知道不可能让每一位读者都满意。在我看来,写书不仅是在传播知识和思想,更是一种交流和沟通。所以,当你不满意的时候,可以来找我交流,提出更多建设性意见,帮助我成长。我争取在写下一本书的时候,让更多的人满意。而且,如果你的建议确实中肯,让我得到了成长,我也为你准备了不错的小礼物。

前言
在我刚开始学习Rust 的时候,在社区里听到最多的声音就是“Rust 学习曲线陡”。已经有一定编程经验的人在学习一门新语言时,都喜欢直接上手写代码,因为这样可以快速体验这门语言的特色。对于大多数语言来说,这样确实可以达到一定的学习目的。但是当他们在初次学习Rust 的时候,就很难通过直接上手来体验这种快感。
我第一次学习Rust 时就遇到了这样的情况。我按以往的编程经验直接写下了代码,但是编译无法通过;可是有时候简单调换两行代码的顺序,程序就能顺利编译成功了,这让我非常困惑。我想这也是大多数人感觉“Rust 学习曲线陡”的原因吧。经过和Rust 编译器的多次“斗争”之后,我不得不重新反思自己的学习方法。看样子,Rust 编译器暗含了某种规则,只要程序员违反了这些规则,它就会检查出来并阻止你。这就意味着,作为程序员,你必须主动理解并遵守这些规则,编译器才能和你“化敌为友”。
所以,我就开始了对Rust 的第二轮学习,忘掉自己以往的所学,抱着初学者的心态,从零开始系统地学习Rust。然而,事情并没有这么简单。
Rust 官方虽然提供了Rust Book,但是内容的组织非常不友好,基本就是对知识点的罗列,系统性比较差。后来官方也意识到了这个问题,推出了第2 版的Rust Book,内容组织方面改善了很多,对学习者也非常友好,但系统性还是差了点。后来又看了国内Rust 社区组织群友们合著的Rust Primer,以及国外的Programming Rust,我才对Rust 建立了基本的认知体系。
直到此时,我才意识到一个重要的问题:Rust 学习曲线陡的根本原因在于Rust 语言融合了多种语言特性和多种编程范式。这就意味着,Rust 涉及的知识范围非常广泛,涵盖了面向对象、函数式、泛型、底层内存管理、类型系统、设计模式等知识。从底层到上层抽象,从模式到工程化健壮性,无所不包。可以说,Rust 是编程语言发展至今的集大成者。对于大多数Rust 语言的初学者来说,他掌握的知识体系范围是小于Rust 所包含的知识量的,所以在学习Rust 的过程中会遇到无法理解的内容。
我在学习Rust 之前,所掌握的编程语言知识体系大多是和拥有GC 的动态语言相关的,对于底层内存管理知之甚少。所以在我学习Rust 所有权的时候,就很难理解这种机制对于内存安全的意义所在;而我所认识的一些拥有C 语言编程经验的朋友,在学习Rust 时面临的问题是,难以理解Rust 支持的上层抽象,对他们来说,
ISBN9787121354854,7121354853
出版社电子工业出版社
作者张汉东
尺寸16