玩具式语言的设计与实现._自制编程语言书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 自制编程语言 > 玩具式语言的设计与实现.
zèt 自制编程语言 的书评 发表时间:2013-12-03 01:12:42

玩具式语言的设计与实现.

同事买了一本,我借过来翻了几天看完了。
这本书的内容正如书名和我的标题,就是作者自己设计与实现语言。本书包含的两门语言都是玩具式的。跟实现一门实用的编程语言(类似于C或者Perl那种)之间还是有不小的差距。而且两门语言的实现都是解释执行的,只不过第一门是一个赤果果的解释器,第二门加了一个虚拟机。但是请注意所有的一切:从语言到虚拟机都是玩具式的。实现的代码说实话质量一般。所以只适合完全没有基础的初学者。我突然想到一本类似的书 - 虚拟机的设计与实现http://book.douban.com/subject/1231974/ 虚拟机这本更差,作者以作者的认识很浅显地实现了一堆宏大的主题,然后告诉你:"喏,这就是虚拟机还有汇编器和连接器的呦,你看这些东西是很简单的嘛。"
下面的所有讨论实用的编程语言就是指C语言,而且不讨论语言的优劣只是讨论实现相关的一些情况。
对于编译器的编写,个人认为为这种自己设计的无类型而且还是解释执行的语言写实现是最简单的。静态编译的语言要复杂一些,比如编写一个C的编译器会涉及到汇编代码的生成,需要纠结类型的检查和类型转换,需要在语法分析阶段就要考虑根据变量的linkage和storage的差别来决定存储在什么地方需要使用什么样子的伪指令,尤其是C语言这种declaration语法复杂到坑爹地步的语言,parse的编写着实是头等大事(可能你会提到可以使用flex/bison,确实parse的编写会简单一些,但是你不觉得写一个很有挑战的parse也是一件很有趣的事情吗? :)。实际的语言一般会有一个语言设计者编写的language specification(但是我知道Matz的Ruby是没有的,来自二次元世界的东西果然是很特别的),这样你写编译器需要读懂specification(做编译器的前端)然后就是需要对目标机器非常熟悉(后端的代码选择和指令调度),还有同样需要熟悉的就是assembler的伪指令和目标机器的ABI(除非自己实现标准库),linker和OS熟悉最好。我写了怎么多你看到了吗?实现一门实用的语言真的需要知道很多东西,因为你要跟一堆现有的东西来接口。
对于这种偏编译器实践的书籍我看过一些,这些书几乎都是为了教学而编写的,真正接近工业级别的只有A Retargetable C Compiler - http://book.douban.com/subject/1610344/ 这本书描述的编译器是lcc,实现代码非常优秀,个人认为是唯一能媲美UNIX V6系代码的,简洁清晰,当你跟我一样天天的工作就是面对一坨14W行代码的而且代码风格极其鬼畜的C编译器做优化的时候,当你再看看lcc你会感慨世界上居然会有这么清新的东西。但是缺点是lcc没有全局优化,对于工业用途的编译器来说是不可接受的,但是当你能完全读懂lcc我相信根据一些专门讲解优化的书籍或者paper编写优化算法绝对是可以的。
另外个人认为最好的用于教学的两本书:一本是Compiler Construction - http://book.douban.com/subject/3152162/ 全书的描述逻辑异常清晰,简明扼要。个人认为是偏于教学这种书里最优秀的。很可惜国内没有引进。另外一本是Compiler design in C - http://book.douban.com/subject/1453167/ 这本书真是太TM厚了,而且这本书居然是实现了一堆的工具程序,说实话不推荐。
最后,这种偏实践的书籍如果只选择一本果断是A Retargetable C Compiler,如果再加一本是Compiler Construction,如果你实在没有基础那么看看本书-自制编程语言也是一个不错的选择。

have fun with compiler implementation, enjoy..

展开全文
有用 54 无用 2

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“玩具式语言的设计与实现.”的回应

rasefon 2013-12-12 13:29:05

基本上讲parser的编译的书,除了那本英文版的parsing tech,就算龙书最详细了,但实际上还是有很多没提到,比如cyk这种不太有实用价值的算法,并且有些步骤还有跳跃,比如LR(0)项集计算的时候,隐含了同类项合并的步骤,不仔细看还真不会去注意。

lakuxin 2013-12-05 14:14:54

好赞,这么快就看完了……

小小的寂寞 2013-12-03 16:27:59

要优化动态语言才困难。。。

[已注销] 2013-12-03 11:56:20

不好意思,看到ls我笑了……23333333333333333333

E.T 2013-12-03 11:18:41

其实忽悠能力才是推广语言的关键?比如 Go 语言……

zèt 2013-12-03 10:41:34

@owsama
你听说过GLR(安)和LALR(利)吗?
;D

[已注销] 2013-12-03 10:35:09

当年看懂LR之后我长叹一口气:编译原理是巨坑啊。然后就再没往后看。

思寇特牌搬砖工 2013-12-03 07:30:38

我还买了这书,还没有看。

Sinclair 2013-12-03 02:34:27

我还偏偏就没看龙书。。。因为没出kindle版

E.T 2013-12-03 02:01:52

但是现在有 LLVM IR 啦

zèt 2013-12-03 01:50:24

@jgs
parse那部分我认真看的只有龙书,就那么使劲啃,一章啃一个月不是盖的..

Sinclair 2013-12-03 01:47:27

那可能是我个人能力的问题。基本上有名的编译书我都草草翻了一下,反正kindle买书七天包退。parser这一块我就没搞懂过,感觉概念跳跃的太快,跟不上。md可能太老了,脑子迟钝了。最后看了parsing tech,终于可以看懂了。

zèt 2013-12-03 01:38:37

@jgs
我倒是认为parse的东西不用学那么多只要熟悉LL(1)足矣,应该花大力气的是后端优化里成吨的paper.

Sinclair 2013-12-03 01:36:08

你觉不觉得只有一本书完整的介绍了parser的理论,就是parsing techniques。其它所有讲编译原理的书都讲的只鳞片爪,看起来很不爽。