写点什么

攻克编译器技术

作者:刘旭东
  • 2022 年 4 月 18 日
  • 本文字数:2312 字

    阅读完需:约 8 分钟

攻克编译器技术

编译器作为软件由代码至可执行文件的中间过程,是软件研发非常重要的技术。在软件开发人员中,仅有极少数的人能够真正的了解相关技术。最近非常偶然看到一本关于编译器技术的数据,非常适合进行相关技术的学习,相关的数据如下:

本系列的文章将对本书进行相关的解读和翻译,对相关的技术在我可以理解的情况下进行说明,对于有兴趣了解编译器的工程师,将会有很大的帮助。


前言


我真的很兴奋我们将一起踏上这段旅程。这是一本关于为编程语言实现解释器的书。这也是一本关于如何设计一种值得实现的语言的书。这是我刚开始接触编程语言时希望拥有的书,也是我近十年来一直在脑海中构思的书。

本书中,我们将逐步介绍两个完整的解释器,以实现功能齐全的编程语言。我假设这是您第一次涉足语言领域,因此我将介绍构建一个完整、可用、快速的语言所需的每个概念和代码。

为了在一本书中塞入两个完整的实现,而且避免这变成一个门槛,本文在理论上比其他文章更轻松。在我们构建系统的每一部分时,我将介绍它背后的历史和概念。我尽力让你熟悉这些术语,这样如果你发现自己参加了一个充满 PL(编程语言)研究人员的鸡尾酒会,也能融入其中

我们主要会费尽脑汁来让这个语言运转起来。 这并不是说理论不重要。 能够准确而正式地推理语法和语义是研究语言时的一项重要技能。 但是,就个人而言,我通过实践学习效果最好。 我很难通过充满抽象概念的段落真正理解它们。 但是,如果我编写了一些代码、运行并调试代码,那么我就理解了。

这就是我给你设定目标。 我希望你能直观了解到真正的编程语言是如何生活和呼吸的。 我希望,当你以后再读其他理论性更强的书时,这些概念会牢牢地印在你的脑海里,附着在这个有形的基础上。

 

1.1 为什么要学习这些内容?

每本编译器书籍的介绍似乎都有这一章节。 我不知道为什么编程语言会引起这种观念存在性的怀疑。 我不认为鸟类学书籍会担心证明鸟类的存在。 他们假设读者喜欢鸟类,并开始教授内容。

但是编程语言有点不同。 我认为,对于我们中的任何人来说创建一种广泛成功的通用编程语言的可能性确实很小。 世界上广泛使用的编程语言的设计者一辆大众巴士就能装得下,甚至都不需要加装额外的露营车。 如果加入这个精英群体是学习语言的唯一原因,那将很难证明其合理性。 幸运的是,事实并非如此。

 

1.1.1 小型语言无处不在

对于每一种成功的通用语言,对应着都有一千种成功的小众语言。 我们曾经称它们为“小众语言”,但术语泛滥的今天产生了“特定领域语言”的名称。 这些是为特定任务量身定制的 混合语言,如应用程序脚本语言、模板引擎、标记格式和配置文件。

 

几乎每个大型软件项目都需要一些这样的语言。 如果可以,最好重用现有的,而不是实现自己的。 如果你考虑到文档、调试器、编辑器支持、语法高亮和所有其他可能存在的问题,自己实现就变成很艰巨的任务了。

但是,当前没有库符合现有需求时,仍然很有可能会发现自己需要开发解析器或其他工具。 即使你重用了一些现有的实现,最终也不可避免地需要调试和维护它们,并在它们内部进行探索。

 

1.1.2 语言是很好的练习方式

长跑运动员有时会将重物绑在脚踝上,或在空气稀薄的高海拔地区进行训练。 随后当他们卸下这些负担时,轻巧的四肢和富含氧气的空气带来了相对轻松的舒适度,使他们能够跑得更远更快。

实现一种语言是对编程技能的真正考验。 代码复杂且性能至关重要。 您必须掌握递归、动态数组、树、图形和哈希表。 您可能至少在日常编程中使用哈希表,但您真的了解它们吗? 好吧,等我们从头开始完成自己的作品之后,我保证你会的理解的。

虽然我打算向您展示解释器并不像想象的那样令人生畏,但实现一个解释器仍然是一个挑战。 坚持下去,你会成为一个更强大的程序员,并且在你日常工作中也能更加聪明的使用数据结构和算法。

 

1.1.3 另一个原因

最后一个原因我很难承认,因为它是我内心的理由。自从我小时候学会编程以来,我就觉得语言有一些神奇的东西。当我第一次编写 BASIC 程序时,我无法想象 BASIC 本身是如何制作出来的。

后来,当我的大学朋友谈论他们的编译器课程时,他们脸上敬畏和恐惧的表情,足以让我相信语言黑客是另一种人,—某种被授予访问通向神秘艺术特权的巫师。

这是一个令人着迷的场景,但它也有阴暗的一面。我不觉得自己像个巫师,所以我觉得我缺乏加入这个团体所需的与生俱来品质。虽然自从我在学校笔记本上涂鸦些关键词后,就对语言着迷,但我花了几十年的时间才鼓起勇气尝试真正学习它们。那种“神奇”的品质,那种排他性的感觉,把我排除在外。

当我终于开始拼凑我自己的小编译器时,我很快就意识到,根本没有魔法。它只是代码,而掌握语言的人也只是人。

有一些技术你在语言之外不经常遇到,有些部分有点困难。但并不比克服的其他障碍更困难。我希望,如果你对编程语言感到恐惧,这本书可以帮助你克服这种恐惧,也许我会让你比以前更勇敢一点。

而且,谁知道呢,也许你会创造下一个伟大的编程语言。毕竟总有人这样做。


1.2 本书的组织方式

本书分为三个部分。你现在正在阅读第一部分。这部的几章可以让你掌握大方向,教你一些语言黑客使用的术语,并向你介绍我们要实现的语言 Lox。

其他两部分中则分别构建了一个完整的 Lox 解释器。在这些部分中,每个章节的结构都相同。每一章选择一个语言功能点,向您介绍其背后的概念,并逐步完成实现。

我花了很多时间试错,设法将两个解释器按章节组织,每一章建立在前面的章节之上,但不需要后面章节的内容。从第一章开始,您将拥有一个可以运行和使用的程序。随着每一章的深入,它的功能越来越丰富,直到你最终拥有一门完整的语言。

除了丰富、精彩纷呈的内容外,每一章节还有其他一些令人愉悦的方面:


未来系列文章将会进一步进行说明

发布于: 刚刚阅读数: 3
用户头像

刘旭东

关注

一个乐于思考的工程师 2017.11.10 加入

七年就是一辈子,交个朋友!

评论

发布
暂无评论
攻克编译器技术_编程语言_刘旭东_InfoQ写作平台