Smalltalk的早期历史

2020-11-07 11:20:53

允许免费复制本材料的全部或部分内容,前提是复制不是为了直接商业利益而制作或分发,ACM版权声明和出版物的标题及其日期出现,并通知复制是经计算机械协会许可的。以其他方式复制或重新发布,需要付费和/或特定许可。HOPL-II/4/93/MA,美国©1993ACM 0-89791-571-2/93/0004/0069...$1.5。

大多数想法都来自之前的想法。60年代,特别是在ARPA社区,通过交互式分时计算机、图形屏幕和定点设备,引发了一系列关于人机共生的概念。高级计算机语言被发明来模拟复杂的系统,如炼油厂和半智能行为。现代个人计算、重叠的窗口界面和面向对象设计的范式转变,来自于将60年代的工作视为比旧的东西更好的东西。这不仅仅是一种更好的方式:进行大型机计算;让最终用户调用功能;让数据结构变得更加抽象。相反,计算量/美元/体积呈指数级增长的前景要求将60年代视为几乎是一个新事物,并找出真正的新事物可能是什么。例如,一个人可以用手持的动态计算机进行计算,这种方式在共享大型机上是不可能实现的;数以百万计的潜在用户意味着用户界面必须成为蒙台梭利(Montessori)和布鲁纳(Bruner)那样的学习环境;大范围、低复杂性和终端用户识字的需求将要求数据和控制结构被废除,取而代之的是一种更具生物性的方案,即受保护的通用细胞只通过能够模仿任何所需行为的消息进行交互。

早期的Smalltalk是第一个完全实现这些新观点的人,因为它的许多前辈在硬件、语言和用户界面设计方面都是这样做的。它成为新计算的典范,部分原因是我们实际上是在尝试信仰结构的质的转变-一种新的库恩范式,其精神与印刷机的发明相同-因此采取了非常极端的立场,几乎迫使这些新风格被发明出来。

-SketchPad、Joss、LISP和SIMULA,60年代的四大编程概念。

我是在35000英尺高空的飞机上写这篇简介的。我腿上放着一台重达5磅的笔记本电脑--1992年的临时动态笔记本电脑,到年底它的售价还不到700美元。它有一个扁平、清晰、高分辨率的位图屏幕,重叠的窗口,图标,一个定点设备,相当大的存储和计算能力,它最好的软件是面向对象的。它内置了先进的网络,而且已经有了无线网络的选项。Smalltalk在这个系统上运行,是我目前与儿童一起工作时使用的主要系统之一。在某些方面,这不仅仅是一个动态博克(在数量上),而在某些方面(在质量上)还不是很到位。总而言之,基本上就是60年代末的想法。

Smalltalk是ARPA以及后来的施乐帕洛阿尔托研究中心(Xerox Parc)这一更大追求的一部分,我称之为个人计算机。每个阶段都有太多来自研究界的人参与,因此为想法准确分配信用是一件非常困难的事情。相反,正如鲍勃·巴顿(Bob Barton)喜欢引用歌德(Goethe)的话那样,我们应该分享发现的兴奋,而不是徒劳地试图声称拥有优先权。

我将试图展示大多数影响来自哪里,以及它们是如何在新的个人计算机隐喻形成的磁场中转变的。正是先驱们的态度和伟大的想法帮助Smalltalk问世。当时我最钦佩的许多人--比如伊万·萨瑟兰(Ivan Sutherland)、马文·明斯基(Marvin Minsky)、西摩·帕普特(Seymour Papert)、戈登·摩尔(Gordon Moore)、鲍勃·巴顿(Bob Barton)、戴夫·埃文斯(Dave Evans。狭隘的头脑试图形成宗教,伟大的头脑只是想要更好的上山路线。牛顿说,他站在巨人的肩膀上看得更远,而计算机科学家经常站在彼此的脚趾上。近视仍然是一个问题,因为有巨人可以站在他们的肩膀上--远视比洞察更好--但如果戴上对美学和批评高度敏感的眼镜,近视的问题就可以最小化。

编程语言可以按多种方式分类:命令式语言、应用型语言、基于逻辑的语言、面向问题的语言等等。但它们似乎都不是特性的集合体,就是功能的集合体。

SmallTalk的设计--以及它的存在--源于这样一种见解,即我们所能描述的一切都可以由一种行为构建块的递归组合来表示,这种行为构建块将状态和流程的组合隐藏在其内部,并且只能通过消息交换来处理。从哲学上讲,Smalltalk的物件与莱布尼茨(Leibniz)的单子以及20世纪物理和生物学的概念有许多相似之处。它制造物品的方式相当柏拉图式的,因为其中一些物品是概念的理想化--思想--可以从这些理想化的概念中创造出各种表现形式。如果认为观念本身就是(观念-观念)的表现,而观念-观念是一种--表现--观念--也就是--它本身就是一种--这样的系统是完全自我描述的--那么柏拉图就会把它当作一个极其恶作剧的笑话来欣赏[柏拉图]。

在计算机术语中,Smalltalk是对计算机本身概念的递归。每个Smalltalk对象都是对计算机全部可能性的递归,而不是把计算机东西分成不同于整体的东西--比如编程语言中常见的数据结构、过程和函数。因此,它的语义有点像成千上万台计算机通过一个非常快的网络连接在一起。因此,具体表示的问题几乎可以无限期地推迟,因为我们主要关心的是计算机的行为是否恰当,只有在结果关闭或返回得太慢的情况下,我们才会对特定的策略感兴趣。

尽管Smalltalk确实有高贵的祖先,但它的贡献是一种新的设计范式--我称之为面向对象--它解决了专业程序员的大问题,并为新手用户提供了小问题的可能。面向对象的设计是一次成功的尝试,它从质量上提高了对硅爆炸带来的越来越复杂的动态系统和用户关系建模的效率。

在这段历史中,我将努力忠实于汉明的要求,因为霍布斯的观察缓和了这一要求。我之前试图写关于Smalltalk的文章时遇到过困难,因为我的情感投入一直集中在将个人电脑作为人类触角的放大器,而不是编程系统设计上,而我们还没有做到这一点。虽然我是Smalltalk的发起人和最初的设计者,但它一直更属于那些让它成功并让它走出家门的人,特别是丹·英戈尔斯和阿黛尔·戈德堡。每一位LRGER都以深刻而非凡的方式为这个项目做出了贡献,我希望有足够的篇幅来公平地对待他们。但我想我们都会同意,在Smalltalk的大部分开发过程中,Dan是核心人物。从本质上讲,编程是一门实用的艺术,真正的东西是在其中构建的,因此必须存在真正的实现。事实上,今天使用的语言即使不是大多数,也有很多,不是因为它们有任何真正的优点,而是因为它们存在于一台或多台机器上,它们可以被引导,等等。但Dan不仅仅是一个伟大的实现者,随着Smalltalk进入实际世界,他也成为了越来越多的设计者,不仅是语言的设计者,也是用户界面的设计者。

在这里,我将集中关注导致Smalltalk-72的事件,以及它向现代形式Smalltalk-76的过渡。大多数想法都是在这里产生的,而许多OOP的早期阶段在几乎不可能找到的参考文献中记录得很少。

这段历史太长了,但令我惊讶的是,有那么多有影响力的人和制度只出现在阴影中,或者根本就没有。很抱歉,我不能说更多关于鲍勃·巴尔泽、鲍勃·巴顿、丹尼·鲍勃罗、史蒂夫·卡尔、韦斯·克拉克、芭芭拉·多伊奇、彼得·多伊奇、比尔·杜瓦尔、鲍勃·弗莱格、劳拉·古尔德、布鲁斯·霍恩、巴特勒·兰普森、戴夫·利德尔、威廉·纽曼、比尔·帕克斯顿、特里格夫·雷斯考格、戴夫·罗布森、道格·罗斯、保罗·罗夫纳、鲍勃·斯普罗尔、丹·斯温哈哈尔更糟糕的是,我忽略了许多我讨厌的系统的设计,但这产生了相当有用的想法和态度。换句话说,我们不应该非常认真地相信历史,而应该认为这是演员在离开舞台很久之后才做出的无力的手势。

感谢众多评审员忍受了他们不得不评论的许多草稿。特别感谢迈克·马奥尼如此温和地帮助我,让我很好地听取了他的建议,以至于他们极大地改进了这篇文章--也要感谢我的老朋友让·萨米特(Jean Sammet),他确实吓坏了我,让我写完了这篇文章--我不想知道如果我迟到了会发生什么。雪莉·麦克洛夫林和金·罗斯在收集所有材料方面帮了大忙。

虽然面向对象

无论是从内部还是外部,新想法都会经历接受的阶段。在内部,这个序列从几乎看不到一个模式几次,然后注意到它,但没有意识到它的宇宙意义,然后在几个领域操作地使用它,然后是一个大旋转,这个模式成为一种新的思维方式的中心,最后,它变成了它最初脱离的那种僵化的宗教。正如叔本华所指出的,从外部来看,这个新想法首先被指责为疯子的作品,几年后它被认为是显而易见和平凡的,最后最初的批评者将声称它是发明的。

和舞台一样,1961年在空军当程序员的时候,我几乎看不到这个想法。第一个是在Burroughs 220上,以一种将文件从一个空军训练司令部设施传输到另一个空军训练司令部设施的形式。当时还没有标准的操作系统或文件格式,所以一些(直到今天还不为人所知的)设计师决定巧妙地解决这个问题,把每个文件分成三个部分。第三部分是任意大小和格式的所有实际数据记录。第二部分包含知道如何获取记录和字段以复制和更新第三部分的B220过程。第一部分是指向第二部分中过程入口点的数组或相对指针(初始指针以标准顺序表示标准含义)。不用说,这是一个伟大的想法,并在后来的许多系统中使用,直到强制使用COBOL将其赶尽杀绝。

第二次几乎看不到这个想法发生在稍晚一点的时候,当时ATC决定用B5000取代220。当时我并没有真正欣赏它,但我确实注意到了它的分段存储系统、HLL编译和字节编码执行的效率、子例程调用和多进程切换的自动机制、共享的纯代码、它的保护机制等等。而且,我看到对它的Program Reference Table的访问符合220文件系统为模块提供程序接口的方案。然而,这个时候我在这台机器上最受欢迎的不是OOP的想法,而是对HLL翻译和评估的一些见解。[Barton,1961][Burroughs,1961]。

从空军毕业后,我在大学的其余部分一直在为国家大气研究中心(National Center for大气Research)编写大量天气数据的检索系统。总的来说,我对模拟很感兴趣--尤其是一台机器对另一台机器的模拟--但除了在CDC 6600上做一维版本的位场块传输(Bitblt)来模拟各种机器的字长外,我的大部分注意力都被学校分散了注意力,或者我应该说是学校的剧院。在奇佩瓦瀑布帮助调试6600时,我读到了戈登·摩尔(Gordon Moore)的一篇文章,文章预测,芯片上集成的硅将在未来许多年内在密度和成本方面成倍提高[摩尔65]。1965年的那个时候,站在房间大小的氟利昂冷却的10MIP6600旁边,他令人震惊的预测几乎没有投射到我的视野中。

由于一连串的侥幸,我最终在1966年秋天就读于犹他大学(University Of Utah)的研究生院,对此一无所知。也就是说,我从未听说过ARPA或其项目,也从未听说过犹他州在这个社区的主要目标是解决3D图形中的隐藏线问题,直到我真正走进戴夫·埃文斯(Dave Evans)的办公室,寻找一份工作和一张办公桌。戴夫的桌子上放着一叠一英尺高的棕色封面文件,他递给我其中一份:拿着这个看一看。

每个新来的人都有一个。书名是《画板:人机图形交流系统》(萨瑟兰出版社,1963)。它能做的事情是相当了不起的,对我所遇到的任何一台计算机的使用都是完全陌生的。最容易理解的三个大概念是:它是现代交互式计算机图形学的发明;通过绘制可以生成实例图形的母版图纸来描述事物;控制和动态由同样以图形形式提供的约束来提供,这些约束可以应用于母版以形成相互关联的部分。它的数据结构很难理解--唯一不太熟悉的结构是嵌入指向过程的指针,并使用一个称为反向索引的过程跳转到例程,比如220文件系统[Ross,1961]。它是第一个拥有裁剪和缩放功能的窗口--在方圆约1/3英里的虚拟床单上画出了一个草图!。

我转了转头,找到了我的办公桌。上面有一堆录像带和清单,还有一张纸条:这是1108的阿尔戈尔。这不管用。普莱

最后,我和另一名研究生在大厅里80英尺的地方打开了列出的程序,然后爬过它,向对方大声喊出了自己的发现。最奇怪的部分是存储分配器,它不像ALGOL那样遵守堆栈规则。几天后,这提供了线索。Simula分配的是与Sketchpad实例非常相似的结构。有一些描述就像大师一样,他们可以创建实例,每个实例都是一个独立的实体。Sketchpad所称的主机和实例,Simula将其称为活动和流程。此外,Simula是一种用于控制类似画板的对象的过程性语言,因此比约束具有更大的灵活性(尽管在优雅上有一些代价)[Nygaard,1966,Nygaard,1983]。

这是一部轰动一时的电影,从那以后我就不一样了。我认为,这部热门影片之所以有如此大的影响力,是因为我已经以不同的形式多次看到了这个想法,以至于最终的认可是如此笼统,以至于有一种顿悟的性质。我的数学专业集中在抽象代数上,它们的几个运算一般适用于许多结构。我的生物学专业专注于细胞新陈代谢和更大规模的形态发生,它的概念是控制复杂过程的简单机制,以及一种能够分化为所有需要的积木的积木。220文件系统、B5000、Sketchpad,最后是Simula,都将相同的理念用于不同的目的。B5000的主要设计者、犹他州教授鲍勃·巴顿(Bob Barton)几天前在他的一次演讲中说:递归设计的基本原则是使各个部分具有与整体相同的能力。我第一次把整体看作是整台计算机,并想知道为什么有人要把它分成更弱的东西,称为数据结构和过程。为什么不把它分成几台小电脑呢?因为分时技术开始兴起了。但不是几十个。为什么不是成千上万个,每个都模拟一个有用的结构呢?

我回想起莱布尼茨(Leibniz)的单调派,柏拉图(Plato)的自然分割论,以及其他解析复杂性的尝试。当然,哲学是关于观点的,工程学是关于行动的,科学是介于两者之间的快乐媒介。可以毫不夸张地说,从那时起,我的大部分想法都植根于西穆拉,但并不是为了改进它。这是一种全新的计算结构方式的承诺,吸引了我的想象力。事实证明,要理解如何运用这些见解并设计出有效的机制来执行它们,需要相当长的时间。

戴夫·埃文斯(Dave Evans)不太相信研究生院是一个机构。与ARPA的许多承包商一样,他希望他的学生做的是实实在在的事情,他们应该尽快读完研究生;他们的论文应该提高最先进的水平。戴夫经常给他的学生找咨询工作,1967年初,他把我介绍给了埃德·钱德尔(Ed Cheadle),他是当地一家航空航天公司的友好硬件天才,当时正在研发一台小型机器。这并不是第一台个人电脑--那是韦斯·克拉克的LINC--但埃德想让非计算机专业人士使用它,特别是他想用一种更高级的语言来编程,比如BASIC。我说,乔斯怎么办?他说:当然,不管你怎么想,这是一个非常愉快的合作的开始,我们称之为FLEX机器。随着设计的深入,我们意识到我们想要动态模拟和扩展,这两种语言Joss(或者我所知道的任何现有语言)都不是特别擅长。这台机器对西穆拉来说太小了,所以出了问题。乔斯的美丽之处在于。

.