1 of 70

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.

2 of 70

Timeline

Timeline

3 of 70

Timeline

1992

2016

1960

4 of 70

5 of 70

Timeline

1992

2016

1960

6 of 70

7 of 70

Timeline

1992

2016

1960

8 of 70

9 of 70

Timeline

1992

2016

1960

10 of 70

11 of 70

Timeline

1992

2016

1960

12 of 70

13 of 70

Timeline

1992

2016

1960

14 of 70

15 of 70

Timeline

1992

2016

1960

16 of 70

17 of 70

Timeline

1992

2016

1960

18 of 70

19 of 70

Timeline

1992

2016

1960

20 of 70

21 of 70

Timeline

1992

2016

1960

22 of 70

23 of 70

Timeline

1992

2016

1960

24 of 70

25 of 70

26 of 70

Timeline

1992

2016

1960

27 of 70

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

28 of 70

Timeline

1992

2016

1960

29 of 70

Timeline

1992

2016

1960

Smalltalk-80

1993: HOPL II

Smalltalk-72

30 of 70

What is Smalltalk?

What is Smalltalk?

31 of 70

What is Smalltalk?

What is Smalltalk?

What is OO?

What is OO?

32 of 70

What is object-oriented programming?

Encapsulation

Access control

Polymorphism

Inheritance

Message passing

Classes / prototypes / objects / instances

Methods

Virtual dispatch / late binding

33 of 70

Influences

Influences

34 of 70

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

35 of 70

What influenced Smalltalk?

36 of 70

The Sketchpad [1963]

The Sketchpad [1963]

37 of 70

The Sketchpad [1963]

  • “the invention of modern interactive computer graphics”
  • “master drawings” and “instance drawings”
  • “control and dynamics were supplied by ‘constraints’”
  • “clipping and zooming windows”

38 of 70

Simula [1966]

Simula [1966]

39 of 70

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”

40 of 70

Burroughs B220 and B5000

Burroughs B220 and B5000

41 of 70

Burroughs B220 and B5000

Tape storage layout:

42 of 70

“Personal” computers

“Personal” computers

43 of 70

Kids!

44 of 70

LOGO

45 of 70

Guiding principles

Guiding principles

46 of 70

Simplicity and consistency

Simplicity and consistency

47 of 70

LISP special forms

(+ 4 5)

(+ (* 2 4) 8)

(or (= 4 4) (> 2 (/ 10 0)))

48 of 70

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

49 of 70

Beauty

Beauty

50 of 70

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”

51 of 70

GUIs

52 of 70

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)

53 of 70

GUIs in the 1960s and 1970s

Bitmapped displays

The mouse

Multiple overlapping windows

“Multimedia” documents

Clipped and zoomable windows (infinite scroll?)

54 of 70

The Dynabook!!

The Dynabook!!

55 of 70

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

56 of 70

What is Smalltalk?

What is Smalltalk?

57 of 70

What is object-oriented programming?

Encapsulation

Access control

Polymorphism

Inheritance

Message passing

Classes / prototypes / objects / instances

Methods

Virtual dispatch / late binding

58 of 70

What is object-oriented programming?

Encapsulation

Access control

Polymorphism

Inheritance

Message passing ←

Classes / prototypes / objects / instances

Methods

Virtual dispatch / late binding

59 of 70

Message passing

Message passing

60 of 70

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?”

61 of 70

Late-bound syntax

62 of 70

Final thoughts

Final thoughts

63 of 70

Distributed systems

Distributed systems

64 of 70

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”

65 of 70

Roving bands of agents

Roving bands of agents

66 of 70

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?

67 of 70

Popularity

Popularity

68 of 70

Popularity

“the most widely used system that claims to be object-oriented”

69 of 70

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

70 of 70

What’s next?

What’s next?