- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
9.1 概念笼子:十个或是更多
我们已经在讨论一种具体的语言实现形式,即所谓“静态的、编译型”语言。这事实上涉及到两种语言的分类法,其一是静态与动态的,其二是编译与解释的。
在计算机语言实现中的所谓“编译”,是不同于 翻译(translation) 的。从本质来说,我们所使用的任何计算机语言编写的代码都需要通过 翻译 才能交由计算机执行,因为计算机最终是只能理解开关状态的电子电路。但是在最终抵达目标语言——即机器语言,或称之为电子电路的序列行为——之前,我们事实上会经过不止一次的翻译过程。在这些翻译过程中, 编译(compile) 与 解释(interpret) ,都不过是其中的“某一个过程,或包括多个过程的阶段”的代名词而已。
问题是这个翻译过程可能有相当多的步骤,而且今后步骤还将有增减(或因系统复杂而变多,或因优化而变少),所以几年前作为名称的“编译或解释(这些过程)”与今天就可能根本不同。为了避免这类问题,我们采用两种极端的方法来定义它们,即对于一门语言翻译结果的 执行体 :
- 如果是可以直接指示 CPU 行为的指令,则我们称之为 编译型语言 ;否则(必然地),
- 它需要被某个软件再经过(至少一次)翻译才能得出上述指令的,我们称之为 解释型语言 。
而“静态与动态”这样的分类法,则是源起于语法与语义之间的绑定关系。其中所谓的语义包括数、数据与逻辑等。一般来说,语言中会通过“有值但没有标识”的数据来表达 “数” 这一概念,即 1 :
- 对于没有标识的代码(这种数据),我们称为 匿名函数 (或 匿名方法 等);一般性的没有标识的数据,我们称为 直接量 (或 字面量 、 立即值 )。
接下来,我们前面所谈到的数据结构最终被表示为(语言中的)数据类型,数据类型也因此可以理解为数据在语言中的性质——除非一个数据是无结构的。那么将语义绑定于标识时 2 ,事实上语法元素就有了对这些值、数据类型以及对逻辑(代码、执行体)这一特殊数据的考量。作为一个约定,如果在代码执行之前
- 代码与该段代码的标识是绑定的,并且
- 任何上述代码所使用的数据的标识具有确定的数据类型含义 3 ,
则我们称该语言是一个 静态语言 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论