- Rust编程:入门、实战与进阶
- 朱春雷
- 2379字
- 2021-04-30 12:37:20
前言
为什么要写这本书
虽然对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章开始学习。
勘误和支持
由于笔者的水平有限,加之时间仓促,疏忽和不足之处在所难免,恳请读者批评指正。笔者在GitHub上创建了一个Resposity,读者可以在这里找到书中的全部源代码,同时可以将书中的错误(请标明具体的页码和错误信息)直接提交issues,笔者将会及时发布更新修订。如果你有更多的宝贵意见,也欢迎提交issues。期待能得到你的支持与反馈。
此外,笔者会长期运营公众号“冲鸭Rust和区块链”,分享Rust、算法和区块链开发的原创技术。考虑到本书定位于快速入门实战,没有涉及Rust宏和Unsafe编程,笔者后续计划从Substrate和libp2p源码解析的角度写一些进阶版实战系列来讲解这些知识点,并会分享在公众号上供大家参考。
随书源码地址:https://github.com/inrust/Rust-Programming-in-Action。
致谢
首先要感谢Rust社区为全球开发者提供的高质量文档和相关资料,感谢Gavin Wood博士为Rust贡献了诸多优秀的开源代码,感谢张汉东老师等国内Rust布道者,本书是站在巨人的肩膀上完成的。
其次要感谢机械工业出版社华章公司策划编辑杨福川和责任编辑董惠芝在这近半年时间里始终支持我的写作,你们的鼓励和帮助使我得以顺利完成全部书稿。
还要感谢Web 3基金会、“一块+”区块链技术社区的同人以及在写书过程中给予指导的各位老师,你们的支持和推荐使得书稿最终顺利完成。特别感谢同窗好友叶毓睿同学,你的引荐促成了这本书的出版。
最后要感谢我的家人,因为有了你们的信任和支持,我才能够安心、坚持不懈地做自己想做的事。