跳转到内容

Smalltalk

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由InternetArchiveBot留言 | 贡献2020年12月9日 (三) 21:08 (补救5个来源,并将0个来源标记为失效。) #IABot (v2.0.7)编辑。这可能和当前版本存在着巨大的差异。

Smalltalk
编程范型面向对象
設計者艾伦·凯Dan Ingalls英语Dan IngallsAdele Goldberg英语Adele Goldberg (computer scientist)
實作者艾伦·凯Dan Ingalls英语Dan IngallsAdele Goldberg英语Adele Goldberg (computer scientist)、Ted Kaehler、Diana Merry英语Diana Merry、Scott Wallace、彼得·多伊奇Xerox PARC
发行时间1972年,​52年前​(1972
(開發始於1969年)
当前版本
  • ANSI Smalltalk (1998年5月19日)[1]
編輯維基數據鏈接
型態系統動態
操作系统跨平台
主要實作產品
Amber英语Amber Smalltalk, Dolphin Smalltalk英语Dolphin Smalltalk, GemStone/S英语Gemstone (database), GNU Smalltalk, Pharo, Smalltalk/X, Squeak, VA Smalltalk英语IBM VisualAge, VisualWorks英语VisualWorks
啟發語言
Lisp,[2] Simula,[2] Euler英语Euler (programming language),[2] IMP英语IMP (programming language),[2] Planner英语Planner (programming language),[2] Logo,Sketchpad,[2] ARPAnet,[2] Burroughs B5000英语Burroughs B5000,[2] 细胞[2]
影響語言
AppleScript, Common Lisp Object System英语Common Lisp Object System, Dart, Dylan英语Dylan (programming language), Erlang, Etoys英语Etoys (programming language), Falcon, Go, Groovy, Io, Ioke英语Ioke (programming language), Java, Lasso英语Lasso (programming language), Lisaac英语Lisaac, Logtalk英语Logtalk, Newspeak, NewtonScript, Object REXX英语Object REXX, Objective-C, PHP 5, Perl 6, Python, Ruby, Scala, Scratch, Self

Smalltalk是一种面向对象的、动态类型编程语言。Smalltalk由艾伦·凯,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。

Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:C++C#Objective-CActorJavaRuby等。90年代的许多软件开发思想得利于Smalltalk,例如设计模式敏捷编程代码重构等。

什么是Smalltalk

Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。下面从几个不同的角度来解释Smalltalk。

  • 一种面向对象的程序设计语言:它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以透过Smalltalk源程序产生可执行文件。这些编译器通常产生一种能在虚拟机上运行的二进制代码。Smalltalk语言本身非常精炼。
  • 一种程序设计环境:这里指的是一种提供许多对象的系统,而不是某种特殊的开发环境。和许多语言不同(包括C++),Smalltalk附带有一个巨大的、相当标准的类库。这些使得开发Smalltalk程序的效率非常高。在其它语言(例如AdaCPascal)中通常被作为语言的一部分的功能(例如条件判断,循环等),在Smalltalk由特定的类提供。
  • 一个应用开发环境(ADE):由于Smalltalk的历史原因,它具有一个非常优秀的高度集成、开放的应用开发环境。由于开发环境中的浏览器、监视器以及调试器都由同样的源程序衍生出来的,不同的版本之间也具有相当好的兼容性。此外,这些工具的源程序都可以在ADE直接存取。

Smalltalk中的对象

在Smalltalk中所有的东西都是对象,或者应该被当作对象处理。例如下面的表达式:

2 + 3.

应当被理解为:向对象2发送消息+,参数为对象3。

纯面向对象使得Smalltalk在语言结构方面有许多与其他语言不同的特点,例如在Smalltalk语言中没有条件语句,取而代之的是一些发送给对象true或者false的消息,因此它们不属于语言部分,而属于Smalltalk的类库;也没有循环重复语句(C语言中的for, while),Smalltalk用向数字对象或块对象发送消息来实现重复执行。

Smalltalk的历史

最早的Smalltalk原型由艾伦·凯于70年代初提出。类(来自Simula-67)、海龟绘图(来自MIT的LOGO)以及图形界面等概念的有机组合,构成了Smalltalk的最初的蓝图。

Smalltalk-71與Smalltalk-72

在1971年到1975年之间,艾伦·凯在Xerox PARC的小组设计并实现了第一个真正的Smalltalk语言系统,編譯器由Dan Ingalls負責主要實作。这个系统具有以下几个技术创新:

  • 语言完全基于Simula的类和消息的概念。
  • 语言没有固定的语法,语法分析由类本身完成。

开发环境的革新相当迅速。虽然当时的位图显示器十分昂贵,但是艾伦·凯却说服了PARC让他使用这些位图显示器,这使得艾伦·凯和他的小组能够实现不同大小和字体的文字,使用多窗口环境,以及一些对图像处理的高端支持。

Smalltalk-76

1975-76年间,艾伦·凯小组认识到应当对执行效率和规模进行优化。于是他们在许多重要方面重新设计了Smalltalk系统,在语言上:

  • 引入了继承和子类的概念。
  • 确定了语言的语法,这使得编译器能够产生高效、可执行、精炼的二进制代码。
  • 拉里·泰斯勒(Larry Tesler)设计了浏览器,这极大地提高了Smalltalk程序员的编程效率。

前述的所有Smalltalk系统都是在特殊的硬件上实现的,直到1977-78年,Bruce Horn和Ted Kaehler把Smalltalk-76移植到由Intel 8086处理器和自定显示器所组成的硬件环境(被称为NoteTaker)上。虽然这种硬件环境只生产了10台,但是它证明了在通常的处理器上实现Smalltalk的可能性。

Smalltalk-80

在1979-80年,部分受NoteTaker项目的影响,Smalltalk小组的注意力转移到Smalltalk的销售可行性上。小组设计并实现了新一代的Smalltalk系统,这次修改的目标着重于在标准硬件上的移植性等方面,包括:

  • 采取ASCII码集,摒弃了原先在Smalltalk-72和-76中使用的特殊字符。
  • 取消了原始(primitive)方法直接存取内存的能力。取而代之的是引入一系列的原始方法提供相应的功能。
  • 引入了元类的概念。
  • 引入MVC(Model-View-Controller)系统以方便交互式应用软件的开发。

程序实例

数学计算

(15 * 19) + (37 squared)

可以理解为:向15发送消息'*',参数为19;向37发送消息squared;最后向15*19的结果发送消息'+',参数为37 squared的结果。

参考资料

  1. ^ https://wiki.squeak.org/squeak/172.
  2. ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Kay, Alan; Stefan Ram. E-Mail of 2003-07-23. Dr. Alan Kay on the Meaning of “Object-Oriented Programming”. 2003-07-23 [2009-01-03]. (原始内容存档于2020-09-16). 

外部链接