The Early History of Smalltalk
Papers We Love Boston • May 26th, 2016
Douglas Creager • @dcreager
AC Kay. “The Early History of Smalltalk”, HOPL II. ACM, New York, 1996.
Timeline
Timeline
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Timeline
1992
2016
1960
What a difference 50 years can make
Core memory: 10,000 44-bit words (~53kB)
Secondary storage:� magnetic tape (~12kB/s)
the “Datafile” (capacity ~10MB, avg access time 15 seconds, $25,000)
Price: $640,000 to $1,209,000
Total production: ~55 units
Core memory: 4GB
Secondary storage:
flash storage: up to 256GB
the Internet
Price: $799 to $1299
Total production: ~2.6 million units just in 2015 Q4
Timeline
1992
2016
1960
Timeline
1992
2016
1960
Smalltalk-80
1993: HOPL II
Smalltalk-72
What is Smalltalk?
What is Smalltalk?
What is Smalltalk?
What is Smalltalk?
What is OO?
What is OO?
What is object-oriented programming?
Encapsulation
Access control
Polymorphism
Inheritance
Message passing
Classes / prototypes / objects / instances
Methods
Virtual dispatch / late binding
Influences
Influences
What did Smalltalk influence?
Basically every modern programming language!
Common Lisp Object System
Objective-C
Go
Java
Python
PHP
Ruby
Actor model [Hewitt 1973] → Erlang
...and indirectly:
JavaScript
What influenced Smalltalk?
The Sketchpad [1963]
The Sketchpad [1963]
The Sketchpad [1963]
Simula [1966]
Simula [1966]
Simula [1966]
“the documentation read like Norwegian transliterated into English, which in fact is was”
“[we] unrolled the program listing 80 feet down the hall and crawled over it yelling discoveries to each other”
“most of my ideas from then on took their roots from Simula — but not as an attempt to improve it”
Burroughs B220 and B5000
Burroughs B220 and B5000
Burroughs B220 and B5000
Tape storage layout:
“Personal” computers
“Personal” computers
Kids!
LOGO
Guiding principles
Guiding principles
Simplicity and consistency
Simplicity and consistency
LISP special forms
(+ 4 5)
(+ (* 2 4) 8)
(or (= 4 4) (> 2 (/ 10 0)))
Consistency in the core language
“Why on earth call [LISP] a functional language at all?”
“Why not just...force evaluation on the receiving side when needed?”� → Haskell and other non-strict languages
“Take the hardest and most profound thing you need to do,�make it great, and then build every easier thing out of it”
Everything is an object or a message
Beauty
Beauty
Beautiful programming languages
Parsimony�Generality�Enlightenment�Finesse
needs “a good match between the degree of interestingness�and the level of complexity needed to express it”
“Nature is wonderful both at elegance and practicality”
GUIs
GUIs in the present
Turbo Vision (DOS, character-based, Borland products, mid-1990s)
MFC (Visual C++, 1992)
AWT / Swing (Java)
GNOME / GTK / GObject (Linux, C)
KDE/Qt (Linux etc, C++)
The DOM! (browsers, JavaScript)
GUIs in the 1960s and 1970s
Bitmapped displays
The mouse
Multiple overlapping windows
“Multimedia” documents
Clipped and zoomable windows (infinite scroll?)
The Dynabook!!
The Dynabook!!
The Dynabook!
Size of a notepad�Weighs less than 2 pounds�Stylus / touch and a built-in physical keyboard�Wireless connectivity (!)�Eternal battery life (!!)
Seriously it’s amazing:
20 years before first commercial laptops�30 years before Internet became widespread�40 years before iPhone, 3G, Wifi�50 years before iPad
What is Smalltalk?
What is Smalltalk?
What is object-oriented programming?
Encapsulation
Access control
Polymorphism
Inheritance
Message passing
Classes / prototypes / objects / instances
Methods
Virtual dispatch / late binding
What is object-oriented programming?
Encapsulation
Access control
Polymorphism
Inheritance
Message passing ←
Classes / prototypes / objects / instances
Methods
Virtual dispatch / late binding
Message passing
Message passing
Message passing
Late binding
Everything is an object
Ask objects to perform high-level goals
“wondered why anyone would want to divide [the computer]�up into weaker things called data structures and procedures”
“Why not divide it up into little computers...thousands of them,�each simulating a useful structure?”
Late-bound syntax
Final thoughts
Final thoughts
Distributed systems
Distributed systems
Object-oriented → Distributed systems
“Thousands of computers” connected by a “very fast network”
Tempting to reuse OO principles when designing distributed systems
But the network is unreliable!!!
OO has no concept of a “dropped message”
Roving bands of agents
Roving bands of agents
Roving bands of agents
Why does everyone always suggest this?
Objects will somehow discover the interface of the system when it arrives
Security threats?
What really happens?
Popularity
Popularity
Popularity
“the most widely used system that claims to be object-oriented”
Popularity (as of 1992)
Smalltalk-80 1980-1981
Lisp (Flavors) 1982
C++ 1983 (g++ 1987, Borland C++ 1990, MS C++ 1992)
Objective-C 1986-1988
Lisp (CLOS) 1988
Turbo Pascal 1989 (5.5)
Python 1991 (0.9.0), 1994 (1.0.0)
Perl 1993 (5)
Java 1993 (1.0)
Ruby 1995 (0.95), 1996 (1.0)
OCaml 1996
What’s next?
What’s next?