迫不及待的书评
这本书的每一个章节似乎是相对独立的,换句话说,你可以随便翻开一章阅读而不会遭遇阻滞。因此,首先可以将本书想象成一个多面体,每一个章节就是其中的一面,每一面都反应了编程语言的一类问题。Rust处在这个多面体的核心位置,通过把每一个侧面都观察一遍,了解它独特的解决问题的方法,就可以对Rust有一个全面的概览。
在观察了几个面之后,不难发现作者的写作风格非常统一。他遵循一种从普遍性到特殊性的讲解过程。大多数章节在一开始会给你最广阔的世界观,例如兔市分定、建筑中的斗拱结构、抗震大楼、餐厅点菜、宇宙飞船,这些例子超越了编程语言的范畴,但蕴含的道理可以普适到编程语言中。然后,作者会介绍每一类问题的通用概念,这些概念不局限于Rust,乃是语言设计背后的理论基础。然后,作者才开始讲解Rust对一类问题的独特解决之道。有些章节在最后还讲解了其解决方案的不足之处。这一写作风格令我读起来非常顺畅。
作者以前翻译过《Ruby原理剖析》,可能是受了其思维方式的影响,写起Rust来也是不局限于讲解表面语法。比如所有权系统,和官方网站提供的教学文档比起来,就多出了很多干货。 因此,比起《电视机的三十二种拍打修理法》,这本书更像是《电视机原理和结构》。即便是不想用Rust编程的人,阅读此书也能得到超越Rust的收获。
Rust据说非常难学,听说随便一个bug就要花掉半天,也听说有人怼编译器怼得非常痛苦,以至于我把它叫做《七伤拳》(正所谓“一练七伤,七者皆伤”)。虽然几个小时的浏览不能让我通读本书,但是我感觉,这本书可以让我少受很多伤害。不要被金毛狮王的遭遇吓到,《七伤拳》这门武功,只要内力充足、循序渐进,练习它就不会受到伤害,比如张无忌、木灵子这些人就从中获得大益。这本书也会给你这样的内力。
四星好评。还差一星,说说不太好的地方。从普遍性到特殊性的讲解过程,有时候读起来也费事。比如,3.3节(page 60)讲解泛型的时候,一开始就给出泛型的代码示例,幸好我有跳读的习惯,在读到61页的代码清单3-20的时候,才明白泛型函数经过编译后会变成多个具体类型的函数。那么按照问题求解的思路,首先我们可以先把3-20的代码写出来,然后说“两个函数仅仅是类型定义上的区别,为了这点区别就写多个函数太费事了,应该提供一种类型抽象功能,让程序员可以写一个函数就搞定”,然后再贴出3-16的代码示例。可见,从特殊到普遍也符合人类的认知发展过程。希望作者能在新版中做出这类改进,让读者能更顺畅地阅读。