当前位置:首页>python>ABC 语言与 Python 的关系

ABC 语言与 Python 的关系

  • 2026-10-11 06:54:28
ABC 语言与 Python 的关系

聚焦伴读:本文是《编程语言谱系总报告》中"Python 受 ABC 启发"这一句的深度展开。 数据来源:CWI(荷兰数学与计算机科学研究中心)官方 ABC 页面、Guido van Rossum 自述与访谈、Artima/Inference Review 等公开资料。

一、ABC 是什么

ABC 是一门为"个人计算"设计的命令式通用编程语言 + 集成环境,诞生于荷兰CWI(Centrum Wiskunde & Informatica,数学与计算机科学研究中心)。

项目
内容
主导设计者
里奥·格茨(Leo Geurts)、兰伯特·梅尔滕斯(Lambert Meertens)、史蒂文·彭伯顿(Steven Pemberton)
时间线
设计始于 1970 年代末;首个实现在 1980 年代初;ABC 1.0 约 1987 年(Pemberton 在 IEEE Software 1987 年 1 月发表介绍论文)
初衷
作为 BASIC 的"好替代品"——先对"编程这件事"做任务分析(task analysis),再据此设计语言
目标用户
最初面向编程初学者,后来也用于专家
关键身份
Python 最直接的前身(most direct predecessor)
CWI 官方介绍原文:"ABC is an interactive programming language and environment for personal computing, originally intended as a good replacement for BASIC. It was designed by first doing a task analysis of the programming task."

一个有意思的更深的源头:ABC 本身又受到 SETL(SET Language,纽约大学 Jack Schwartz 在 1960–70 年代设计的"集合论"超高级语言)的启发。所以真正的远祖链是:

SETL(集合论超高级语言,NYU)
        └─► ABC(CWI,1980s,教学/易用)
                └─► Python(Guido,1991)

二、ABC 的核心特性(也是它的"遗产")

CWI 官方列出的 ABC 特性:

只用 5 种强大数据类型,可轻松组合(数字、字符串、列表、集合/collection、表/table)

强类型,但无需声明变量(Strong typing, yet without declarations)——不必写 int x; 之类

用缩进表示嵌套(nesting by indentation)

无人为上限(如整数无最大限制,直到内存耗尽)

支持自顶向下(top-down)编程

交互式环境:退出登录后过程和函数、全局变量仍然保留("no need for files")

统一的用户界面:执行命令、编辑、输入数据时用同一个一致界面

通用的撤销(undo)机制

程序通常只有等效 Pascal/C 程序的 四分之一到五分之一 大小

一段 ABC 代码示例(统计文档中所有单词的集合):

HOW TO RETURN words document:
   PUT {} IN collection
   FOR line IN document:
      FOR word IN split line:
         IF word not.in collection:
            INSERT word IN collection
   RETURN collection

可以看到:缩进组织块、无类型声明、PUT ... IN、FOR ... IN、集合操作——这些气质在 Python 里都找得到影子。

三、ABC 与 Python 的关系:Guido 是"内部人"

关系本质:Python 是 ABC 的"精神继承者 + 工程修正版",而设计者 Guido van Rossum 本人就是 ABC 团队的一员。

关键事实:

Guido 亲手参与过 ABC 的开发(他在自己的 GitHub abc-unix 仓库里写明:"ABC was Python's most direct predecessor; I worked on it from around 1983–1986.")

之后 Guido 在 CWI 参与 Amoeba 分布式操作系统项目,需要用一门脚本语言去处理异常、并与 Amoeba/系统交互——而 ABC 做不到这点。

于是他在 1989 年底(圣诞假期)动手设计一门新语言,明确把它定位为 ABC 的继任者(successor),保留 ABC 的优点、修补 ABC 的致命缺陷。1991 年发布 Python 0.9.0。

Guido 本人自述(关于 Python 特性来源):

"我在 CWI 的 ABC 部门时在实现解释型语言方面积累了丰富经验,通过与这个部门成员的协同工作,我学到了大量有关语言设计的知识。这是许多 Python 特性的最初来源,包括使用缩进来组织语句
,以及包含非常高层级的数据结构。"

Python 从 ABC 直接继承的特性

ABC 的设计
在 Python 中的对应
用缩进表示嵌套(nesting by indentation)
Python 强制缩进作为语法(最标志性的继承)
强类型但无需变量声明
Python 动态类型标注前也是强类型、无需声明
5 种高层内置数据类型
Python 内置 list / tuple / dict / set / str / number 等高层结构
交互式环境
Python 的 REPL(>>> 提示符)
程序简短(Pascal/C 的 1/4~1/5)
Python 以简洁著称
FOR x IN collection 遍历
Python 的 for x in ... 迭代模型
集合/表等高层抽象
Python 的 set、dict 等
注:缩进作为语法并非 ABC 的原创——Donald Knuth 早就在倡导,occam 语言也用过。但是 ABC 把它认真做成一门语言的统一风格,再由 Python 发扬光大。

四、最关键的一段:ABC 为什么失败,Python 又改了什么

这是理解"ABC 与 Python 关系"最有价值的部分——Python 不是凭空更好,而是精准修补了 ABC 的失败。

ABC 失败的若干原因(据 Guido 与社区总结)

不可扩展(not extensible):语言是单体(monolithic)的,用户很难甚至无法编写扩展模块去加新功能。

无法与系统/操作系统真正交互:很难访问文件系统、调用系统能力——而真实工程离不开这些。

平台迁移能力弱:难以方便地移植到多平台。

只盯初学者:只专注教学场景,没把有经验的程序员纳入用户群,天花板低。

开放性不足:早期不够开放,传播受限。

Python 对应的"修正手术"

极易写扩展模块:设计了干净的 C API,能用 C/C++ 给 Python 写扩展(这是 Python 后来庞大的科学计算生态——NumPy 等——的根基)。

能对接系统:支持异常处理(exception handling)、能直接与 Amoeba/Unix 系统交互、操作文件。

跨平台:从一开始就面向多平台运行。

同时讨好新手与专家:保留 ABC 的易读易学,又不牺牲专家需要的控制力与生态。

开源开放:1991 年即以开源方式发布,借助社区滚雪球。

一句话:ABC 证明了"极简、高层、可读"是正确方向,却在"工程可用性"上摔了跤;Python 接住了 ABC 的方向盘,又给车装上了引擎(扩展性、系统交互、跨平台、开源社区)。

五、结论

ABC 是什么:CWI 在 1980 年代设计的一门"替代 BASIC"的教学型超高级语言,以缩进、强类型无声明、5 种高层内置类型、交互环境为标志,受 SETL 启发。

它和 Python 的关系:Python 是 ABC 的直接继任者;设计者 Guido 本人就是 ABC 团队核心成员,Python 的缩进风格与高层数据结构直接源自 ABC 的熏陶;而 Python 的成功,恰恰在于它保留了 ABC 的优雅,又补上了 ABC 缺失的工程能力(可扩展、可对接系统、跨平台、开源)。

谱系上的精确定位: SETL → ABC → Python,其中 ABC 是 Python 的"最近、最直接的祖先",Python 则是 ABC 理想在真实世界里的"成功转世"。

最新文章

随机文章