1.2 编程语言与库的差别

当库可以完成某项工作时,不用构造编程语言。库是迄今为止扩展现有编程语言以执行新任务的最常用方法。是一组可以一起用于为某些硬件或软件技术编写应用程序的函数或类。很多编程语言(包括C和Java)几乎完全围绕一组丰富的库设计。该语言本身非常简单和通用,而开发人员开发应用程序必须学习的大部分内容包括如何使用各种库。

库可以完成以下任务:

❑引入新的数据类型(类),并提供用于操作这些数据类型或类的公共函数(API)。

❑在一组硬件或操作系统调用的基础上提供抽象层。

库不能完成以下任务:

❑引入新的控制结构和语法,以支持新的应用程序域。

❑在现有编程语言运行系统中嵌入/支持新的语义。

库在某些方面做得很糟糕,正因为如此,我们可能最终更喜欢创建一种新的语言:

❑库往往会变得更大、更复杂,但不是必要的。

❑与编程语言相比,库的学习曲线更陡峭,文档更差。

❑库经常与其他库发生冲突,版本不兼容常常会破坏使用库的应用程序。

从库到编程语言有一条自然的进化路径。构建新语言以支持应用程序域的一种合理方法是首先制作或购买该应用程序域可用的最佳库。如果结果不支持所在领域,以及在简化为该领域编写程序的任务方面也不符合我们的要求,那么我们就有一个强有力的论据来证明:我们需要设计一种新的编程语言。

本书主要讲解构建自己的编程语言,而不仅仅是构建自己的库。事实证明,学习这些工具和技术在其他情况下是有用的。