深度剖析Python历史诞生问题


Guido van Rossum 是Python语言的作者,Python 是一门解释性的、是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展Python历史了。

他工作的地方被叫做 Centrum voor Wiskunde en Informatica (CWI).从那时开始,Python 在开发者当中日益流行起来,这归功于 Python 简明清晰的语法和开发效率高的名声。这次访谈会分为几个部分,每周都会发布其中一篇.Van Rossum 会对下列议题给出他的真知灼见:Python 的设计目标,Python 程序员的工作效率来自何处。

弱类型意味着什么,等等.在第一篇中,Van Rossum Python 将对 Python 的历史,受到的主要影响,及其设计目标娓娓道来.Bill Venners: 如果开发者从没用过 Python,那你会怎么向他们描述这门语言呢?Guido van Rossum: 从一个方面说,你可以说 Python 是一个非常高阶的语言。

而从另一个方面来看,你可以说它是一个非常高阶的语言,它实现的方式正好让它非常注重可交互性.Python 和脚本语言之间有着很多共同点,但是和更传统的编程语言也有颇多共通之处.

ABC 对 Python 的影响Bill Venners: 您能简要介绍一下 Python 的历史么?Guido van Rossum: 在 1980 年代末,我在 Centrum voor Wiskunde en Informatica (CWI) 的一个小组里面做开发工作。

这个小组的任务是设计实现一门叫 ABC 的语言.我不清楚人们对 ABC 对Python历史的影响有多少了解.我之所以会提及 ABC 的影响,是因为我在从事这个项目的时候,所获良多,而且从共事的同事身上也学到了很多东西,我对他们非常感激。

ABC 的设计动机非常明确.ABC 希望成为一门编程语言,这门语言是为非计算机程序员或软件开发者的那种比较聪明的计算机用户而设计的。在 1970 年代末,ABC 的主设计师曾向这种用户教授一些传统的编程语言.他们的学生有各个学科的科学家:从物理学家、社会学家到语言学家。

为了使用超大型计算机,这些科学家需要帮忙.虽然这些人在自己的领域可算出类拔萃,他们还是对传统语言所有的各种局限感到诧异和不适应.根据用户的这个反馈,ABC 的设计者试图去开发一门新的语言.

另一个让 ABC 的设计者觉得失望的原因是 Basic.那时,Basic 是一门非常蹩脚的语言.虽然 Basic 也是为那种非程序员的计算机用户而设计的。但是它设计的着眼点是完全不同的。

在那时,市面上所有的 Basic 版本都非常难用.几乎所有好玩的 Basic 程序都遍布着底层的奇技淫巧,比如说,如果要把屏幕背景色变成黄色的话,就需要修改内存的第 714 字节。Bill Venners: 这个我也有印象.您是什么时候搞 ABC 的?Guido van Rossum: ABC 的作者在 70年代晚期和 80年代初期,开始这门语言的设计工作。

我于 1983 年加入这个小组.我想我们一直干到了 1986 年还是 1987 年.因为种种原因,ABC 项目并没有获得很大的成功.或许那时太早了,那个时候还没有因特网可做大规模的推广.

Python历史的诞生

Guido van Rossum: 1986 年,我转向了 CWI 的另一个叫 Amoeba (阿米巴虫) 的项目.Amoeba 是一个分布式操作系统。直到 1980年代末,我们意识到需要一个脚本语言.在那个项目中,我享有很大的自由度,所以我启动了一个迷你项目,这个小项目是服务于当时的我们手头的 Amoeba 项目的。

那时,我对在 ABC 上获得的经验教训记忆犹新.我决定,想办法设计一门简单的脚本语言,它将拥有 ABC 的优点,但却没有他的缺点.所以,我挽起袖子开始打键盘了.我实现了一个简单的虚拟机,一个简单的 parser,还有一个简单的运行时库.ABC 中每一个我欣赏的部分我都重新实现了一把。

  • 浅读Python语言特点说明
  • 正群调整Python 编写速度
  • 正确连接Python数据库说明
  • 探秘丰富多彩的Python语言
  • 详细解读Python项目内部构解

我还设计了一种基本的语法,它用缩进来表示语句之间的结合关系,而不是用花括号或者 begin-end 块来表示程序结构。同时,我开发了几个功能强大的数据结构:哈希表 (用来实现 dictionary,我们这样称呼它),列表,字符串,以及数字类型。

ABC 的设计者放弃了用来读写文件的 IO 的方法,他们转而在程序里使用一些全局变量.他们的用户对全局变量的概念应该了然于胸.所以 ABC 的设计者让那些全局变量能持久化。

如果你退出一次编程会话,你所有的全局变量就被系统存到磁盘上的一个文件里.等到你下次启动另一个会话,你所有的全局变量就会恢复回来.在某种程度上说,这一套运作得很好.这和 workspace 有几分相像,比如说 Smalltalk 里的 workspace 就和这个差不多。

ABC 里有一个 print 语句,可以让你在屏幕上输出,还有一个 input 语句,让你可以从键盘上读入,但是 ABC 却没有办法可以把 IO 重定向到文件,或者从文件重定向到 IO.实际上,可以说他们根本就没有提供任何 IO 功能。

评论关闭