在大学时代,有幸参加了关于编译器的讲座,这激发了对编译器、解释器和编写解析器的浓厚兴趣。一群同学甚至梦想着创造一种全新的编程语言来改变世界,虽然这个梦想并没有实现,但认为每个软件开发者都应该经历学习如何编写解析器或构建编译器的思考过程。理解语言实现中的常见模式,能让成为一名更优秀的程序员。
正如Eric Lippert曾经所说:“很多人看待编程语言就像看待魔法一样。当在聚会上告诉别人设计编程语言并实现编译器和工具时,很多人——甚至是专业的程序员——会说‘哇,从未想过,确实得有人设计这些东西’。他们好像认为语言是完全成形地突然出现,并且周围已经围绕着工具基础设施。”
编程语言的设计就像设计任何其他产品一样:需要在竞争的可能性之间仔细做出一系列权衡。编译器和工具的构建就像构建任何其他专业的软件产品一样:通过分解问题,一行一行地编写代码,然后对生成的程序进行严格的测试。
如果对设计一种语言感兴趣,一个好的起点是思考已经知道的某种语言的不足之处。设计决策通常源于考虑另一个产品的缺陷。
一直在寻找一本关于创建编程语言的书,这本书不应该太深奥,应该直截了当,并且没有多余的术语。找到了Marc-Andre的《Create Your Own Freaking Programming Language eBook》。这本书没有让失望,也不会让任何对语言应用感兴趣的程序员失望。
购买这本电子书主要是因为它得到了Ruby的创造者Matz的推荐,而且这本书也被用来编写流行的语言CoffeeScript。这些理由足以让投资40美元,而且它还提供退款保证!
Marc很好地解释了创建自己的语言的不同方法。他首先展示了如何使用纯Ruby的词法分析器、解析器和解释器创建一个类似Ruby的语言,名为“Awesome”,并使用Python的缩进。所有这些工具都包含在书的配套中。第二种方法是在JVM(Java虚拟机)上托管的更全面的执行环境,可以在此基础上构建一个高性能的语言。
书中还有一个10分钟的屏幕录像,展示了如何扩展JVM语言。书中的每一章都有小练习,帮助练习所学的内容。作为一个喜欢实际操作的人,喜欢查看实际的代码并进行实践。
这本电子书适合任何大学生或像这样的专业人士,他们想要了解最受欢迎的编程语言是如何创建的。它涵盖了重要的部分和细节。然而,这不是一本关于实现细节的书。需要事先了解一些概念,并熟悉书中使用的术语。如果正在创建一个编译器,一个好的起点是Jack Crenshaw的《Let's Build a Compiler》。
以39.99美元的价格,将得到一本60页的电子书PDF,练习和解决方案,一个展示如何扩展JVM语言的屏幕录像,以及两种语言在Ruby和Java中的完整源代码。如果能买到印刷版,会毫不犹豫地付钱!写得好,非常有趣!
编程语言设计不仅仅是理论,它需要实践。通过阅读和实践,可以更深入地理解语言设计的原理和技巧。以下是一些关键的实践步骤:
1. **理解语言的基本概念**:在设计语言之前,需要了解语言的基本概念,包括语法、语义和执行模型。
2. **学习编译器和解释器的工作原理**:编译器和解释器是语言实现的核心。了解它们的工作原理对于设计语言至关重要。
3. **实践编写解析器**:解析器是编译器的一部分,用于将源代码转换为抽象语法树(AST)。通过编写解析器,可以更好地理解语言的语法结构。
4. **实践编写编译器**:编译器将抽象语法树转换为目标代码。编写编译器可以帮助理解语言的语义和执行模型。
5. **实践编写解释器**:解释器直接执行源代码或抽象语法树。编写解释器可以让更直观地理解语言的执行过程。
6. **实践语言的优化**:优化是提高语言性能的关键。通过实践语言的优化,可以了解如何提高语言的执行效率。
7. **实践语言的扩展**:语言的扩展性是其灵活性的体现。通过实践语言的扩展,可以了解如何为语言添加新的特性和功能。
8. **实践语言的测试**:测试是确保语言正确性和稳定性的关键。通过实践语言的测试,可以了解如何为语言编写测试用例和测试框架。
9. **实践语言的文档编写**:文档是语言使用者的指南。通过实践语言的文档编写,可以了解如何为语言编写清晰、准确的文档。