诸如 Fortran,Algol 和 Lisp 这种早期语言使用“高级别”这个术语是因为有别于汇编这种硬件相关语言,它们的语法和语义更加抽象。抽象使得它们可以写出应用于多种机器的程序,也使得程序更加容易让人类理解。机器无关性很重要,不过更重要的是编程易用推动了现代编程语言的发展。本章是首次涉及到语言设计(剩下的在6-10章)。大多数将围绕 name
name 是用于指代某些事物的助记字符串。在大多数语言中 name 作为 identifiers (包括字母和数字的 token),即使比如 + := 也可以作为 name。name 允许我们关联到 variable,constant,operations,types,以及底层的概念 address。name 也有上下文的第二个含义抽象。在这种含义下,抽象是指程序员将编译后的代码片段(funtion)与 name 关联的过程。通过隐藏不相关细节,抽象降低了概念的复杂性,开发者可以在特定时间只关注程序的一个子集。Subroutines 是control abstractions:允许程序员将复杂的实现隐藏在简单的接口后面。Class 是 data abstractions:允许程序员将数据隐藏在一系列操作之后。
我们将要看到 name 相关的几个主要问题。3.1 介绍了 binding time的概念,不仅仅是 name 如何关联起表示的东西,还包括解决任何设计实现。3.2 描述了几种分配释放对象存储空间的机制,然后区分了对象的生命周期和binding name 到对象的生命周期。大多数高级语言 name-to-object 绑定只会在限定 scope 生效。3.3 探索了 scope 规则来定义 region。3.4 考虑它们的实现。
在程序中给定点的完整绑定集合为看作当前的 referencing environment. 3.5 讨论 alias,更多的是一个 name 在给定 scope 关联一个 object,以及重载(在给定 scope 一个 name 可以关联多个 object),这取决于上下文。3.6 通过提出一个 referencing environment 可能绑定了subroutine 的参数,函数返回值或者存储的 variable, 扩展了 scope 规则的概念。3.7 讨论宏扩展,通过文本替换引入新 name,有时与语言的其他部分有点奇怪。最后,3.8 讨论了集中编写。