Smalltalk
编程范型 | |
---|---|
Alan Kay、Dan Ingalls、Adele Goldberg | |
Alan Kay、Dan Ingalls、Adele Goldberg、Ted Kaehler、Diana Merry、Scott Wallace、Peter Deutsch、Xerox PARC其 | |
发行时间 | 1972 |
| |
词法( | |
Xerox Alto[2][3] | |
Amber, Dolphin, GemStone/S, GNU Smalltalk, Pharo, Smalltalk/X, Squeak, VisualAge, VisualWorks | |
衍生 | |
Self, GNU Smalltalk | |
Lisp,[4] Simula,[4] Euler,[4] IMP,[4] Planner,[4] Logo[5],Sketchpad,[4] ARPAnet,[4] Burroughs B5000[4] | |
AppleScript, CLOS, Dart, Dylan, Erlang, Etoys, Falcon, Go, Groovy, Io, Ioke, Java, Lasso, Logtalk, Newspeak, NewtonScript, Object REXX, Objective-C, PHP 5, Perl 6, Python, Ruby, Scala, Scratch, Self | |
Smalltalk
Smalltalk对其它众
概 述
[编辑]Smalltalk
- 一种面向对象的程序设计语言:它是一种面向对象的语言,
包含 语言的 语法和 语义。一些编译器可以透过Smalltalk源 程 序 产生可 执行文 件 。这些编译器 通常 产生一 种能在 虚 拟机上 运行的 二 进制代 码。Smalltalk语言本身 非常 精 炼。
- 一种程序设计环境:这里
指 的 是 一 种提供 许多对象的 系 统,而不是 某 种特殊 的 开发环境。和 许多语言不同 (包括 C++),Smalltalk附 带有一 个巨大 的 、相当 标准的 类库。这些类使 得 开发Smalltalk程 序 的 效率 非常 高 。在 其它语言(例 如Ada、C和 Pascal)中 ,通常 被 作 为语言 的 一 部分 的 功 能 (例 如条件 判断 ,循环等 ),在 Smalltalk由 特定 的 类提供 。
- 一个应用开发环境(ADE):
由 于Smalltalk的 历史原因 ,它具有 一个非常优秀的高度集成、开放的 应用开发环境。由 于开发环境 中 的 浏览器 、监视器 以及调试器 ,都 由 同 样的源 程 序 衍生出来 的 ,不同 的 版本 之 间也具有 相当 好 的 兼 容 性 。此外,这些工具 的 源 程 序 都 可 以在ADE直接 存 取 。
历史
[编辑]开发环境
采 取 ASCII码字符 集 ,摒弃了 原 先 在 Smalltalk-72和 Smalltalk-76中 使用 的 特殊 字 符 。取消 了 原始 方法 直接 存 取 内 存 的 能力 。取 而代之 的 是 引入一系列的原始方法提供相应的功能。- 引入
了 元 类的 概念 [9]。 - 引入MVC(
模型 -视图-控 制 器 )系 统以方便 交互 式 应用软件的 开发。
Smalltalk-80
1988
两个
面 向 对象编程
[编辑]如同其他
Smalltalk对象确切
持 有 状 态(引用 到 其他对象)。接收 消息 自 本身 或 其他对象。在 处理一个消息的过程中,发送消息 至 本身 或 其他对象。
一个对象持有的状态总是私有于这个对象。其他对象
Smalltalk
Metaclass
(Metaclass class
(
Hello, World!例 子
[编辑]Hello, World!show:
Transcript
,'Hello, World!'
show:
'Hello, World!'
,显示
Transcript show: 'Hello, World!'.
语法
[编辑]Smalltalk-80语法true
、false
、nil
、self
、super
thisContext
。它们true
、false
nil
伪变self
super
,super
thisContext
谚语“Smalltalk语法适合
exampleWithNumber: x
| y |
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
#($a #a 'a' 1 1.0)
do: [ :each |
Transcript
show: (each class name);
show: (each printString);
show: ' ' ].
^x < y
文字
[编辑]数 和字 符
[编辑]42
-42
123.45
1.2345e2
2r10010010
16rA000
r
36rSMALLTALK
80738163270632
。
$A
字 符 串
[编辑]'Hello, world!'
'I said, ''Hello, world!'' to them.'
'I said, "Hello, world!" to them.'
两个
符号
[编辑]Symbol
)
#
跟随
#'foo'
如果一个序列不包含空白或标点字符,还可以写为:
#foo
数 组
[编辑]#(1 2 3 4)
很多实现ByteArray
)
#[1 2 3 4]
其他
[编辑][... 一 些smalltalk代 码 ...]
很多Smalltalk
变量声明
[编辑]| index |
index
,nil
。
| index vowels |
index
vowels
。null
0
ByteArray
,此外nil
。
按
赋值
[编辑]变量:=
语法
vowels := 'aeiou'
'aeiou'
vowels
变量。这个
_
)←
)
消息
[编辑]一元 消息
[编辑]factorial
42
:
42 factorial
42
factorial
42
aRatherBigNumber := 42 factorial
factorial
关键字 消息
[编辑]2 raisedTo: 4
2
4
16
。这种
'hello world' indexOf: $o startingAt: 6
它的o
6
开始查找。这个indexOf:startingAt:
,构成
这种关键
new Rectangle(100, 200);
Rectangle width: 100 height: 200
这个Rectangle
类,
二元 消息
[编辑]3 + 4
它发送+
给3
,4
7
)。类似
3 > 4
>
发送给3
4
(false
)。
+
>
而定义并>
a > b
表 达式
[编辑]一元消息可以一个接一个的写成
3 factorial factorial log
它发factorial
3
,factorial
6
,log
720
,产生2.85733
。
一个表达式可以包括多次消息发送。
3 factorial + 4 factorial between: 10 and: 100
3
接收 消息 factorial
并回答 6
4
接收 消息 factorial
并回答 24
6
接收 消息 +
具有 24
作 为实际参数 并回答 30
30
接收 消息 between:and:
具有 10
和 100
作 为实际参数 并回答 true
组合
[编辑](3 factorial + 4) factorial between: 10 and: 100
3 factorial + 4
产生10
。10
factorial
3628800
。3628800
between:and:
,false
。
3 + 4 * 5
(3 + 4) * 5
,产生35
。23
,必须
3 + (4 * 5)
复合
[编辑]以点
Window
| window |
window := Window new.
window label: 'Hello'.
window open
级联
[编辑]如果
Window new
label: 'Hello';
open
这种Window
类发送new
,new
label:
open
。
yourself
代 码块
[编辑]块
[ :params | <消息 表 达式> ]
这里:params
[:x | x + 1]
块可以通过发送给它们value
value:
,value:value:
,以此类推valueWithArguments:
并将
[:x | x + 1] value: 3
块返^
块的if…then…else
expr ifTrue: [ expr为真时求值的语句 ] ifFalse: [ expr为假时求值的语句 ]
select:
:
positiveAmounts := allAmounts select: [:anAmount | anAmount isPositive]
select:
控 制 结构
[编辑]Boolean
ifTrue:
、ifFalse:
、ifTrue:ifFalse:
ifFalse:ifTrue:
ifTrue:
result := a > b
ifTrue: [ 'greater' ]
ifFalse: [ 'less or equal' ]
块也
迭代
[编辑]| aString vowels |
aString := 'This is a string'.
vowels := aString select: [:aCharacter | aCharacter isVowel].
aString
发送select:
[:aCharacter | aCharacter isVowel]
true
,aCharacter
,应当
String
响应select:
select:
Collection
select:
aBlock
;aBlock
do:
value:
aBlock
ifTrue:
true
,则将这个
String
响应do:
do:
Iterable
SequenceableCollection
Iterable
类的String
类的
异常处理
[编辑]SmalltalkException
类及其子类比如Error
类,类似于CLOS
[ 一 些运算 .
Error signal: 'an error occurred'.
另一些运算
] on: Error do: [ :ex |
处理器 代 码.
ex return ]
异常处理ex
实际ex proceed
、ex reject
、ex restart
ex return
类
[编辑]类通过实
定 义
[编辑]Object subclass: #MessagePublisher
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Smalltalk Examples'
Object
类的MessagePublisher
Object
类在subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:
Object class
Class
类中找到对应
SharedPool
category
package
,
count
类
方法
[编辑]为一个类增加方法涉及到Behavior
类,其中compile:
CompiledMethod
类的实例;addSelector:withMethod:
Behavior
类的ClassDescription
类中,compile:classified:
对象负责publish
,并且这个publish
publish
Transcript show: 'Hello World!'
#quadMultiply:and:
quadMultiply: i1 and: i2
"这个方法 将 给定的 两个数 相乘 并对结果乘 以4."
| mul |
mul := i1 * i2.
^mul * 4
执行^
(↑
)
实例化
[编辑]为一个类新建一个实例,new
Behavior
类中。
MessagePublisher new
MessagePublisher
类的
publisher := MessagePublisher new
MessagePublisher new publish
类方法
[编辑]Collection
with:
、with:with:
[22]、with:with:with:with:with:with:
with:with:
OrderedCollection
,它是SequenceableCollection
类的
| rectangles aPoint collisions |
rectangles := OrderedCollection
with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
aPoint := Point x: 20 y: 20.
collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].
反射
[编辑]Method
类的
Smalltalk-80CompiledMethod
Smalltalk-80还thisContext
。thisContext
,一个方法活动可以提问比如:“谁给你发送
SmalltalkdoesNotUnderstand:
Message
Array
。doesNotUnderstand:
Notifier
)
doesNotUnderstand:
doesNotUnderstand:
基 于映像 的 持久 存 储
[编辑]Smalltalk
实现列 表
[编辑]OpenSmaltalk
[编辑]OpenSmaltalk VM(OS VM)
JavaScript VM
[编辑]其他
[编辑]- Amber Smalltalk,
通 过转译运行 在 JavaScript上 。 - Cincom Smalltalk,
包含 下 列 产品:VisualWorks、ObjectStudio和 WebVelocity。 - Visual Smalltalk Enterprise,
一 个家族 ,包括 Smalltalk/V。 - Smalltalk/X[38],
由 Claus Gittinger开发。 - F-Script,
在 2009年 写 的 只 用 于macOS的 实现。 - GemStone/S,GemTalk
系 统出品 。 - GNU Smalltalk,Smalltalk
的 无头(缺 少 GUI)实现。 - StepTalk,GNUstep
脚本 框 架 ,它在Objective-C运行时上使用 Smalltalk语言。 - VisualAge Smalltalk。
- VAST
平台 (VA Smalltalk)[39],Instantiations公司 开发。 - Little Smalltalk。
- Dolphin Smalltalk,Object Arts
出品 。 - Smalltalk MT,Object Connect
出品 的 Windows平台 Smalltalk。 - Pocket Smalltalk,运行于Palm Pilot。
- SmallJ[40],一个开源的基于Java
的 Smalltalk,派生 自 SmallWorld[41]。 - Etoys,
用 于学习的可 视编程 系 统。 - Strongtalk,
提供 可 选的强 类型。 - TruffleSqueak[42],
用 于GraalVM的 一 个Squeak/Smalltalk VM和 Polyglot编程环境(更 多 基 于GraalVM的 Smalltalk实现可 见于官 网[43])
参 见
[编辑]引用
[编辑]- ^ https://wiki.squeak.org/squeak/172.
- ^ Alto I Schematics (PDF). Bitsavers: 54. [21 July 2016]. (
原始 内容 (PDF)存 档于2021-02-24). - ^ History of Computers and Computing, Birth of the modern computer, Personal computer, Xerox Alto. [2016-04-19]. (
原始 内容 存 档于2020-12-05). - ^ 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 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). - ^ 5.0 5.1 Alan Kay. The Early History of Smalltalk. 1993 [2021-03-06]. doi:10.1145/155360.155364. (
原始 内容 存 档于2011-04-29).What Sketchpad called masters and instances, Simula called activities and processes. Moreover, Simula was a procedural language for controlling Sketchpad-like objects, thus having considerably more flexibility than constraints (though at some cost in elegance) ……. ……
This Smalltalk language (today labeled -71) was very influenced by FLEX, PLANNER, LOGO, META II, and my own derivatives from them. ……
One of the styles retained from Smalltalk-71 was the comingling of function and class ideas. In other works, Smalltalk-72 classes looked like and could be used as functions, but it was easy to produce an instance (a kind of closure) by using the objectISNEW
. ……
Overlapping windows were the first project tackled (With Diana Merry) after writing the code to read the keyboard and create a string of text. ……
One of the next classes to be implemented on the Interim Dynabook (after the basics of numbers, strings, etc.) was an object-oriented version of the LOGO turtle implemented by Ted. ……
Our early “LISP-pair” definition is an example of an abstract data type because it preserves the “field access” and “field rebinding” that is the hallmark of a data structure. …… What I got from Simula was that you could now replace bindings and assignment with goals. ……
Where does the special efficiency of object-oriented design come from? …… Four techniques used together – persistent state, polymorphism, instantiation, and methods-as-goals for the object – account for much of the power. None of these require an “object-oriented language” to be employed – ALGOL 68 can almost be turned to this style – and OOPL merely focuses the designer’s mind in a particular fruitful direction. ……
Simula-I had neither classes as objects nor inheritance. Simula-67 added the latter as a generalization to the ALGOL-60 <block> structure. ……
On the other hand, since things can be done with a dynamic language that the difficult with a statically compiled one, I just decided to leave inhertance out as a feature in Smalltalk-72, knowing that we could simulate it back using Smalltalk’s LISPlike flexibility. ……
By the time Smalltalk-76 cam along, Dan Ingalis had come up with a scheme that was Simula-like in its semantics but could be incrementally changed on the fly to be in accord with our goals of close interaction. - ^ Where Did Refactoring Come From?. sourcemaking.com. [17 December 2013]. (
原始 内容 存 档于2016-03-31). - ^ Carl Hewitt; Peter Bishop, Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence (PDF). IJCAI. 1973 [2022-04-11]. (
原始 内容 (PDF)存 档于2021-02-25).Alan Kay whose FLEX and SMALLTALK machines have influenced our work. Alan emphasized the crucial importance of using intentional definitions of data structures and of passing messages to them. This paper explores the consequences of generalizing the message mechanism of SMALLTALK and SIMULA-67; …….
- ^ Learning Research Group. How To Use the Smalltalk-76 System (PDF) (报告). Xerox Palo Alto Research Center. October 1979 [2022-03-12]. (
原始 内容 (PDF)存 档于2022-04-12).To define a new class, select a class category in the first pane of the browse window. This selection specifies the category to which the new class will be added, and causes a template to appear in the largest pane of the browse window, the code pane. ……
The template presented in the code pane looks as follows
Class new title: ’NameofClass’
subclassof: Object
fields: ’names of fields’
declare: ’names of class variables’ - ^ Alan Kay. The Early History of Smalltalk. [2021-03-06]. (
原始 内容 存 档于2011-04-29).The most puzzling strange idea – at least to me as a new outsider – was the introduction of metaclasses (really just to make instance initialization a little easier – a very minor improvement over what Smalltalk-76 did quite reasonably already).
Peter’s 1989 comment is typical and true: “metaclasses have proven confusing to many users, and perhaps in the balance more confusing than valuable.” In fact, in their PIE system, Goldstein and Bobrow had already implemented in Smalltalk on “observer language”, somewhat following the view-oriented approach Ihad been advocating and in some ways like the “perspectives” proposed in KRL [Goldstein *].
Once one can view an instance via multiple perspectives even “sem-metaclasses” like Class Class and Class Object are not really necessary since the object-role and instance-of-a-class-role are just different views and it is easy to deal with life-history issues includeding instantiation. This was there for the taking (along with quite a few other good ideas), but it wsn’t adopted. My guess is that Smalltalk had moved into the final phase I memntioned at the beginning of this story, in which a way of doing things finally gets canonized into an inflexible belief structure. - ^ 10.0 10.1 Smalltalk-80 v2 image. [2022-02-16]. (
原始 内容 存 档于2022-03-20). - ^ Draft American National Standard for Information Systems - Programming Languages - Smalltalk (PDF). squeak.org. [2022-02-09]. (
原始 内容 (PDF)存 档于2021-10-20). - ^ Apple Smalltalk 80. [2022-05-22]. (
原始 内容 存 档于2022-05-30). - ^ Squeak V1 Sources. [2022-02-24]. (
原始 内容 存 档于2017-06-27). - ^ Kay, Alan. Prototypes vs Classes (e-mail on Squeak list). October 10, 1998 [2021-03-06]. (
原始 内容 存 档于2021-02-16). - ^ Goldberg, Adele; Robson, David. Smalltalk-80 The Language. Addison Wesley. 1989: 31, 75–89. ISBN 0-201-13688-0.
- ^ Squeak: A minimalist syntax! (PDF). [2021-03-06]. (
原始 内容 (PDF)存 档于2018-06-13).
Object-Oriented Design with Smalltalk — a Pure Object Language and its Environment (PDF). [2021-03-06]. (原始 内容 (PDF)存 档于2021-01-21). - ^ Goldberg, Adele; Robson, David. Smalltalk-80 The Language. Addison Wesley. 1989: 17–37. ISBN 0-201-13688-0.
- ^
Collection Method Definitions:
select: aBlock "Answer a new instance of a Collection containing all the elements in the receiver which, when passed to aBlock, answer true" | newCollection | newCollection := self copyEmpty. self do: [:element | (aBlock value: element) ifTrue: [newCollection add: element]]. ^newCollection
- ^
Iterable Method Definitions:
do: aBlock "Enumerate each object of the receiver, passing them to aBlock" self subclassResponsibility
- ^
SequenceableCollection Method Definitions:
do: aBlock "Evaluate aBlock for all the elements in the sequenceable collection" 1 to: self size do: [:i | aBlock value: (self at: i)]
Interval Method Definitions:
do: aBlock "Evaluate the receiver for each element in aBlock" | i | i := start. step > 0 ifTrue: [[i <= stop] whileTrue: [aBlock value: i. i := i + step]] ifFalse: [[i >= stop] whileTrue: [aBlock value: i. i := i + step]]
- ^ Goldberg, Adele; Robson, David. Smalltalk-80 The Language. Addison Wesley. 1989: 39–53. ISBN 0-201-13688-0.
- ^
Collection Method Definitions:
Collection class >> with: firstObject with: secondObject "Answer a collection whose only elements are the parameters in the order they were passed" ^(self new) add: firstObject; add: secondObject; yourself
- ^ Clark, A.N. Metaclasses and Reflection in Smalltalk. 1997.
- ^ Ducasse, Stéphane; Lienhard, Adrian; Renggli, Lukas. Seaside – A Multiple Control Flow Web Application Framework (PDF). scg.unibe.ch. Software Composition Group Institut fur Informatik und angewandte Mathematik Universitaat Bern, Switzerland. [16 December 2013]. (
原始 内容 (PDF)存 档于2020-01-31). - ^ Foote, Brian; Johnson, Ralph. Reflective Facilities in Smalltalk-80. Oopsla '89. 1–6 October 1989: 327–335 [16 December 2013]. ISBN 0897913337. doi:10.1145/74877.74911. (
原始 内容 存 档于2021-03-24). - ^ Smith, Brian C. Procedural Reflection in Programming Languages. MIT Technical Report. 1982-01-01, (MIT-LCS-TR-272) [16 December 2013]. (
原始 内容 存 档于2015-12-13). - ^ Denker, Marcus; Peck, Mariano Martinez; Bouraqadi, Noury; Fabresse, Luc; Ducasse, Stéphane. Efficient Proxies in Smalltalk (PDF). [2021-03-07]. (
原始 内容 (PDF)存 档于2021-03-03). - ^ Image-Based Persistence. book.seaside.st. [17 December 2013]. (
原始 内容 存 档于2013-12-17). - ^ Kay, Allen. FLEX – A flexible extendable language. University of Utah MSC Thesis. 1968 [2021-03-08]. (
原始 内容 存 档于2018-07-18). - ^ Fowler, Martin. Memory Image. martinfowler.com. [17 December 2013]. (
原始 内容 存 档于2021-05-07). - ^ OpenSmalltalk/opensmalltalk-vm, OpenSmalltalk, 2020-11-03 [2020-11-08], (
原始 内容 存 档于2021-03-10) - ^ Slang. wiki.squeak.org. [2020-11-08]. (
原始 内容 存 档于2021-06-08). - ^ A Guide to the S-Lang Language (v2.3.0): Preface. jedsoft.org. [2020-11-08]. (
原始 内容 存 档于2019-08-27). - ^ Cuis Smalltalk. [2022-02-16]. (
原始 内容 存 档于2022-02-07). - ^ Haver-Smalltalk. [2022-02-12]. (
原始 内容 存 档于2022-02-12). - ^ PharoJS. [2022-05-17]. (
原始 内容 存 档于2022-05-01). - ^ SqueakJS. [2022-05-17]. (
原始 内容 存 档于2022-05-01). - ^ Smalltalk/X. [2022-02-12]. (
原始 内容 存 档于2022-04-13). - ^ VA Smalltalk. [2022-02-25]. (
原始 内容 存 档于2022-04-13). - ^ SmallJ. [2022-05-17]. (
原始 内容 存 档于2021-03-01). - ^ SmallWorld. [2021-03-07]. (
原始 内容 存 档于2009-02-26). - ^ TruffleSqueak. [2022-02-12]. (
原始 内容 存 档于2022-04-16). - ^ www.graalvm.org. [2022-02-12]. (
原始 内容 存 档于2022-03-17).
延伸 阅读
[编辑]- Adele Goldberg; David Robson. Smalltalk-80: The Language and its Implementation (PDF). Addison-Wesley. May 1983 [2022-02-16]. ISBN 0-201-11371-6. (
原始 内容 (PDF)存 档于2017-08-07). - Adele Goldberg. Smalltalk-80: The Interactive Programming Environment. Addison-Wesley. December 1983 [2022-02-09]. ISBN 0-201-11372-4. (
原始 内容 存 档于2022-02-09). - Glen Krasner (编). Smalltalk-80: Bits of History, Words of Advice. Addison-Wesley. August 1983 [2022-02-09]. ISBN 0-201-11669-3. (
原始 内容 存 档于2022-02-09). - Adele Goldberg; David Robson. Smalltalk 80: The Language. Addison-Wesley. 11 January 1989. ISBN 0-201-13688-0.
- Dan Ingalls. The Smalltalk-76 programming system design and implementation (PDF). Xerox Palo Alto Research Center. January 1978 [2022-03-12]. (
原始 内容 (PDF)存 档于2021-11-21). - Learning Research Group. How To Use the Smalltalk-76 System (PDF) (报告). Xerox Palo Alto Research Center. October 1979 [2022-03-12]. (
原始 内容 (PDF)存 档于2022-04-12). - Adele Goldberg; Alan Kay (编). Smalltalk-72 Instruction Manual (PDF). Xerox Palo Alto Research Center. March 1976 [2021-03-06]. (
原始 内容 (PDF)存 档于2020-11-12). - Alan Kay. The Early History of Smalltalk (PDF). ACM SIGPLAN Notices (ACM). March 1993, 28 (3): 69–95 [2021-03-06]. doi:10.1145/155360.155364. (
原始 内容 (PDF)存 档于2021-03-23). - Nierstrasz, Oscar; Ducasse, Stéphane; Pollet, Damien; Black, Andrew P. Squeak by Example. Kehrsatz, Switzerland: Square Bracket Associates. 2009-10-07 [2022-03-12]. ISBN 978-3-9523341-0-2. (
原始 内容 存 档于2022-03-18). - Nierstrasz, Oscar; Ducasse, Stéphane; Pollet, Damien; Black, Andrew P. Pharo by Example. Kehrsatz, Switzerland: Square Bracket Publishing. February 23, 2010 [2022-03-12]. ISBN 978-3-9523341-4-0. (
原始 内容 存 档于2022-02-10). - Special Issue on Smalltalk. Byte (McGraw-Hill). August 1981, 6 (8) [2013-10-18].
- Adele Goldberg. Introducing the Smalltalk-80 System. Byte (McGraw-Hill). August 1981, 6 (8) [2013-10-18].
- Dan Ingalls. Design Principles Behind Smalltalk. Byte (McGraw-Hill). August 1981, 6 (8) [2011-11-11].
- Larry Tesler. The Smalltalk Environment. Byte (McGraw-Hill). August 1981, 6 (8) [2016-05-02].
外部 链接
[编辑]- Free Online Smalltalk Books (页面
存 档备份,存 于互联网档案 馆) - Smalltalk Zoo (页面
存 档备份,存 于互联网档案 馆) - Smalltalk-80 Bluebook implementations in C++: by dbanay (页面
存 档备份,存 于互联网档案 馆) and rochus-keller (页面存 档备份,存 于互联网档案 馆) on github - A minimal Smalltalk for teaching of and research on Virtual Machines. [2022-02-09]. (
原始 内容 存 档于2022-03-28).
|
|