Smalltalk
引用

↑  https://wiki.squeak.org/squeak/172.
↑   (PDF). Bitsavers: 54.   [21 July 2016]. （原始内容 (PDF)存档于2021-02-24）.
↑  .   [2016-04-19]. （原始内容存档于2020-12-05）.
1 2 3 4 5 6 7 8  Kay, Alan; Stefan Ram. . Dr. Alan Kay on the Meaning of “Object-Oriented Programming”. 2003-07-23  [2009-01-03]. （原始内容存档于2020-09-16）.
1 2  Alan Kay. . 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 object ISNEW. ……
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.
↑  . sourcemaking.com.   [17 December 2013]. （原始内容存档于2016-03-31）.
↑  Carl Hewitt（英语：）; Peter Bishop, Richard Steiger.  (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; …….  引文使用过时参数coauthors (帮助)
↑  Learning Research Group.  (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. .   [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.
1 2  .   [2022-02-16]. （原始内容存档于2022-03-20）.
↑   (PDF). squeak.org.   [2022-02-09]. （原始内容 (PDF)存档于2021-10-20）.
↑  .   [2022-05-22]. （原始内容存档于2022-05-30）.
↑  .   [2022-02-24]. （原始内容存档于2017-06-27）.
↑  Kay, Alan. . October 10, 1998  [2021-03-06]. （原始内容存档于2021-02-16）.
↑  Goldberg, Adele; Robson, David. . Addison Wesley. 1989: 31, 75–89. ISBN 0-201-13688-0.
↑   (PDF).   [2021-03-06]. （原始内容 (PDF)存档于2018-06-13）. 
 (PDF).   [2021-03-06]. （原始内容 (PDF)存档于2021-01-21）.
↑  Goldberg, Adele; Robson, David. . 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. . 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. . 1997.
↑  Ducasse, Stéphane; Lienhard, Adrian; Renggli, Lukas.  (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. . Oopsla '89. 1–6 October 1989: 327–335  [16 December 2013]. ISBN 0897913337. doi:10.1145/74877.74911. （原始内容存档于2021-03-24）.
↑  Smith, Brian C. . 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.  (PDF).   [2021-03-07]. （原始内容 (PDF)存档于2021-03-03）.
↑  . book.seaside.st.   [17 December 2013]. （原始内容存档于2013-12-17）.
↑  Kay, Allen. . University of Utah MSC Thesis. 1968  [2021-03-08]. （原始内容存档于2018-07-18）.
↑  Fowler, Martin. . martinfowler.com.   [17 December 2013]. （原始内容存档于2021-05-07）.
↑  , OpenSmalltalk, 2020-11-03  [2020-11-08], （原始内容存档于2021-03-10）
↑  . wiki.squeak.org.   [2020-11-08]. （原始内容存档于2021-06-08）.
↑  . jedsoft.org.   [2020-11-08]. （原始内容存档于2019-08-27）.
↑  .   [2022-02-16]. （原始内容存档于2022-02-07）.
↑  .   [2022-02-12]. （原始内容存档于2022-02-12）.
↑  .   [2022-05-17]. （原始内容存档于2022-05-01）.
↑  .   [2022-05-17]. （原始内容存档于2022-05-01）.
↑  .   [2022-02-12]. （原始内容存档于2022-04-13）.
↑  .   [2022-02-25]. （原始内容存档于2022-04-13）.
↑  .   [2022-05-17]. （原始内容存档于2021-03-01）.
↑  .   [2021-03-07]. （原始内容存档于2009-02-26）.
↑  .   [2022-02-12]. （原始内容存档于2022-04-16）.
↑  .   [2022-02-12]. （原始内容存档于2022-03-17）.
Smalltalk-76
VisualWorks（英语：），派生于Smalltalk-80 v2的商业实现
Pharo，从Squeak v3.9分叉出的派生于Smalltalk-80 v1的开源实现
Smalltalk-80例子代码在Squeak下的类层级和与之并行的元类层级的示意图。其中的r是ProtoObject，c是Class，mc是Metaclass。蓝色连接表示实例联系，绿色连接表示继承联系。