返回介绍

9.1 概念笼子:十个或是更多

发布于 2024-12-15 23:01:47 字数 1490 浏览 0 评论 0 收藏 0

我们已经在讨论一种具体的语言实现形式,即所谓“静态的、编译型”语言。这事实上涉及到两种语言的分类法,其一是静态与动态的,其二是编译与解释的。

在计算机语言实现中的所谓“编译”,是不同于 翻译(translation) 的。从本质来说,我们所使用的任何计算机语言编写的代码都需要通过 翻译 才能交由计算机执行,因为计算机最终是只能理解开关状态的电子电路。但是在最终抵达目标语言——即机器语言,或称之为电子电路的序列行为——之前,我们事实上会经过不止一次的翻译过程。在这些翻译过程中, 编译(compile)解释(interpret) ,都不过是其中的“某一个过程,或包括多个过程的阶段”的代名词而已。

问题是这个翻译过程可能有相当多的步骤,而且今后步骤还将有增减(或因系统复杂而变多,或因优化而变少),所以几年前作为名称的“编译或解释(这些过程)”与今天就可能根本不同。为了避免这类问题,我们采用两种极端的方法来定义它们,即对于一门语言翻译结果的 执行体

  • 如果是可以直接指示 CPU 行为的指令,则我们称之为 编译型语言 ;否则(必然地),
  • 它需要被某个软件再经过(至少一次)翻译才能得出上述指令的,我们称之为 解释型语言

而“静态与动态”这样的分类法,则是源起于语法与语义之间的绑定关系。其中所谓的语义包括数、数据与逻辑等。一般来说,语言中会通过“有值但没有标识”的数据来表达 “数” 这一概念,即 1

  • 对于没有标识的代码(这种数据),我们称为 匿名函数 (或 匿名方法 等);一般性的没有标识的数据,我们称为 直接量 (或 字面量立即值 )。

接下来,我们前面所谈到的数据结构最终被表示为(语言中的)数据类型,数据类型也因此可以理解为数据在语言中的性质——除非一个数据是无结构的。那么将语义绑定于标识时 2 ,事实上语法元素就有了对这些值、数据类型以及对逻辑(代码、执行体)这一特殊数据的考量。作为一个约定,如果在代码执行之前

  • 代码与该段代码的标识是绑定的,并且
  • 任何上述代码所使用的数据的标识具有确定的数据类型含义 3

则我们称该语言是一个 静态语言

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文