本书将带领读者从头开始制作一门语言的编译器。笔者特意为本书设计了CЬ语言,CЬ可以说是C语言的子集,实现了包括指针运算等在内的C语言的主要部分。本书所实现的编译器就是C Ь语言的编译器, 是实实在在的编译器,而非有诸多限制的玩具。另外,除编译器之外,本书对以编译器为中心的编程语言的运行环境,即编译器、汇编器、链接器、硬件、运行时环境等都有所提及,介绍了程序运行的所有环节。
作者简介:
青木峰郎
程序员,著有《Ruby程序设计268技(第2版)》《Ruby源代码完全解说》《Linux程序设计》等多部编程相关著作。并积极参与标准库维护、文档维护等各种各样的活动。
译者简介:
严圣逸
毕业于上海交通大学。8年软件开发经验,期间赴日本工作。现就职于想能信息科技(上海)有限公司,从事基于云平台的客户关系管理及各类营销自动化系统的开发工作。译有《高效团队开发:工具与方法》。
绝云
毕业于清华大学软件学院。曾在日本创意公司KAYAC从事即时通讯软件及社交游戏的开发工作,现任蚂蚁金服前端架构专家。译有《图解简单算法》等图书,曾参与《像外行一样思考,像专家一样实践(修订版)》的审校。
如果说这是一本关于“如何制作编译器”的书,那它远不止于此。它更像是一本关于“如何理解计算的本质”的书。《自制编译器》这本书,给我最大的感受是,它并没有将读者仅仅定位为“学习者”,而是鼓励我们成为“创造者”。作者在书中反复强调,理解一个概念的最好方式,就是去实践它。因此,书中大量的篇幅都用于指导读者如何动手实现编译器的各个模块。我一直对类型系统这个概念感到有些模糊,直到读到书中关于类型检查的部分,作者通过几个简单的例子,展示了不同类型之间如何进行转换和校验,以及为什么这种校验至关重要。书中还深入探讨了各种常见的编程范式,以及它们如何影响编译器的设计。这让我意识到,编译器不仅仅是代码转换的工具,它本身也是一种高度复杂的软件系统,蕴含着深刻的设计思想。我特别喜欢书中关于“语言设计”的讨论,作者指出,一个好的编译器,应该能够很好地服务于它所支持的编程语言。这种从语言本身出发,反过来思考编译器设计的思路,让我耳目一新。尽管书中的内容非常扎实,涉及的知识点也相当广泛,但我感觉自己并没有被海量的信息淹没,反而因为有了清晰的脉络和丰富的实践指导,而能够稳步前进。这本书,让我不再仅仅满足于“使用”编程语言,而是开始思考“创造”编程语言的可能性。
评分阅读《自制编译器》的过程,对我而言,简直是一场思维的盛宴。这本书的独到之处在于,它没有像许多教材那样,上来就堆砌大量的理论公式和抽象概念,而是选择了一条更加“动手实践”的路径。我印象最深刻的是,书中详细地描述了如何从零开始构建一个简单的解释器,然后再逐步演变成一个编译器。这种循序渐进的方式,让我这个初学者也能跟上节奏。作者并没有回避其中的复杂性,但却巧妙地将其分解成一个个可管理的小模块。比如,在讲解中间代码生成的部分,书中提供了详细的伪代码示例,并一步步指导读者如何将抽象的语法树转化为更接近机器的指令。我尝试着跟着书中的步骤,在自己的电脑上敲打代码,虽然过程中遇到了不少bug,但每解决一个问题,都带来巨大的成就感。书中的很多章节,都伴随着丰富的图表和流程图,极大地帮助我理解了各种抽象的概念。例如,在解释数据流分析时,书中用了一个非常形象的图示,描绘了变量在程序执行过程中的生命周期,这比单纯的文字描述要清晰得多。更重要的是,这本书不仅仅是告诉你“怎么做”,更是深入浅出地解释了“为什么这么做”。在每一个设计决策的背后,作者都给出了充分的理论依据和实际考量,这让我能够真正理解编译器的设计哲学,而不仅仅是死记硬背。虽然这本书的深度和广度都相当可观,但我感觉它为我打开了一扇通往底层计算世界的大门,让我对计算机的工作原理有了前所未有的深刻认识。
评分不得不说,《自制编译器》这本书,在知识的呈现方式上,给我带来了很大的惊喜。我之前对编译器的了解,大多停留在“它能把高级语言变成机器能懂的语言”这个层面,具体过程一直是个模糊的概念。而这本书,就像一位经验丰富的向导,带领我一步步深入探索这个神秘的领域。它并非简单地罗列技术名词,而是巧妙地将复杂的理论编织成了一个个引人入胜的故事。例如,在讲述代码优化时,作者并没有直接抛出各种优化算法,而是先通过一个生动的生活场景,比如“如何让打包行李更省空间”,来类比编译器的优化过程,一下子就点燃了我的兴趣。书中的案例分析也做得非常到位,选取了一些具有代表性的编程语言片段,然后详细剖析它们在不同编译阶段是如何被处理的。我尤其喜欢其中关于“递归下降解析”的部分,作者用非常形象的语言和精炼的代码示例,将这个原本有些抽象的解析技术讲得透彻易懂。读到后面,我甚至开始思考,自己能否用书中讲解的原理,去实现一些简单功能的语言解析器。这本书的魅力在于,它既有扎实的理论基础,又不乏实际的操作指导,让你在理论学习和动手实践之间找到一个完美的平衡点。虽然我还没有完全掌握书中的所有知识,但可以肯定的是,它已经极大地拓展了我的技术视野,让我对软件开发有了更深层次的理解。
评分这本书,我拿到的时候,说实话,心里是有些忐忑的。毕竟“自制编译器”,这几个字摆出来,就透着一股技术硬核的劲儿。我不是科班出身,平时看的也多是些应用层面的东西,对底层原理接触得比较少。所以,一开始我抱着一种“看看就好,能懂多少懂多少”的心态。翻开第一页,就被厚实的内容震撼到了,密密麻麻的公式和概念,仿佛一下子把我拉到了一个完全陌生的领域。然而,作者并没有直接把我扔进那些艰深的理论里,而是从最基础的、最直观的例子入手,一点点地剖析编译器的构成。我记得有那么一个章节,讲的是词法分析,他用了一个非常巧妙的比喻,把源代码想象成一串符号,然后编译器就像一位细心的翻译官,把这些符号按照特定的规则一个个地拆分开来,变成一个个有意义的“单词”。这个过程,我之前从来没有想过,原来我们平时敲的代码,在计算机眼里是这样的“原始”状态。接着,他又一步步地讲解如何将这些“单词”组合成“句子”,也就是语法分析。我看着那些图示和代码片段,感觉自己好像真的在构建一个微型的世界,每一个环节都充满了逻辑和秩序。这本书的语言风格也很接地气,虽然涉及很多专业术语,但作者总能用通俗易懂的方式进行解释,甚至穿插了一些有趣的段子,让我在学习的过程中不至于太枯燥。虽然我还没完全消化书中的所有内容,但至少,我不再对编译器这个东西感到那么畏惧了,反而产生了一种莫名的好奇心,想要继续探索下去。
评分《自制编译器》这本书,可以说是让我对编程语言的底层运作机制有了一个全新的认识。此前,我总以为编译器是一个黑盒子,输入代码,输出可执行文件,中间的过程对我来说是完全陌生的。然而,这本书的出现,彻底颠覆了我的认知。它并没有采用那种高高在上、脱离实际的理论讲解方式,而是从最基础的“构建一个属于你自己的语言”这个出发点,一步步引导读者去理解编译器是如何工作的。书中的章节设计非常合理,从词法分析、语法分析,到语义分析、中间代码生成、代码优化,再到目标代码生成,每一个环节都讲解得清晰透彻。我印象特别深刻的是,书中对“抽象语法树”(AST)的讲解,作者用了一个非常贴切的比喻,将AST比作一座建筑物的“蓝图”,它清晰地展现了代码的结构和逻辑关系,而编译器正是根据这张蓝图来一步步构建最终的“建筑物”。这种形象的类比,让我在理解抽象概念时少走了很多弯路。而且,书中提供的代码示例非常精炼,而且是可运行的,我尝试着去复现一些例子,虽然耗费了不少时间和精力,但每一次成功运行,都让我对编译器的工作原理有了更直观的感受。这本书的价值在于,它不仅传授了知识,更重要的是培养了一种解决问题的思维方式,让我能够更加深入地理解和分析各种编程语言的特性。
评分后端比前端复杂多了(得补补汇编了
评分好看的飞起~~~,最近正在搞JavaCC 读到 IR 就不读了 书确实不错
评分作者讲述的思路很好,编译器的基本实现流程都说到了。但可惜的Cb是用java实现的,大量的类和继承让代码显得臃肿拖沓,而即使采用了这么多类,这么大的代码量却仍然还有C的大量特性没有实现。对比之前看过的另外一个实现C11标准的编译器8cc,采用C11实现,完成基本C11特性的基础上却只有不到6000行代码量,并且代码简洁易懂,可读性和参考价值颇高。综上,这本书只能用来了解编译器的基本实现流程,代码我觉得就不用过于深究,可读性和研究的价值不大。个人见解,请勿拍砖。
评分理论居多,基本上在书中找不到可运行的代码,导致学习起来有点迷茫,好像看了半天却啥都做不出来。相比之下《两周自制脚本语言》写得注重实践部分,并且把难点放在附录中做解释。
评分写的什么东西