不是烂书,但不够好
全书围绕名为Stone的语言展开。使用Java设计实现了一个支持变量、函数、闭包、类的脚本语言。并且在靠后的章节设计实现了一个简单的虚拟机,然后也涉及了编译成Java字节码的实现。
内容比较丰富,也比较实用。对于很多特性的实现原理也描述得还算比较清楚。但是我认为最大的问题是,很多部分用了一些现成的库,本身应该是讲解、学习原理的书,但还是用了一些库把细节隐藏了。
实现过程中还使用了一个GluonJ的库用来在Java上实现类似ruby的open class,在不修改原本类定义的情况下增加特性。这个库本身感觉还是有点意思,主要是为了实现对各种特性支持程度不同的解释器复用一部分代码然后共存,但是你用在这样的教程里面实在是增加了代码的复杂程度(用了这个库之后,作者的代码增加了一些可读性极低的名称,并且使用特定的类中定义的实现还需要强制转换)而且需要额外的学习成本。还有个问题就是这个GluonJ是Java5写的,我在Java13上似乎在build时有点问题,最后直接没用这个库手动撸代码上去。Parser部分也用了现成的库,不过这个在后面有讲解。
实现的思路还是说得比较清楚,比如设计到闭包、类的章节都挺不错的。不过就个人来说,看了一些日本人的写的计算机专业书,给人的感觉是努力想把很多专业性的东西讲得生动形象但是讲着讲着就崩了的感觉🤣。
总的来说,内容丰富扎实,看完照着撸一遍,然后换个语言再自己撸一遍改进一下,然后尝试实现书中留白的语言特性。是一定会有收获的。但是也切勿完全照着书抄代码(因为很有可能你照着抄是跑不了的,作者的代码习惯也不是特别值得学习),学习思路,自己写代码。也不要当作编译原理来看。
有关键情节透露