classes are premature optimization - wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 ·...

158
Classes Are Premature Optimization Justin Love http://www.delicious.com/rauros/prototypal http://www.delicious.com/rauros/oop (recent) http://spkr8.com/t/4808

Upload: others

Post on 10-Apr-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classes Are Premature Optimization

Justin Lovehttp://www.delicious.com/rauros/prototypal

http://www.delicious.com/rauros/oop (recent)http://spkr8.com/t/4808

Page 2: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Justin [email protected]

http://JustinLove.name

@wondible

Page 3: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Outline

• OOP

• Classical

• Prototypal

• Performance

• What can we do better?

• Review

Page 4: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

class ____ { ...}

Page 5: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

object ____ { ...}

Page 6: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Class Oriented?

class ____ { ...}

Page 7: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

OOP-or-

COP?

Page 8: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

OOP

Page 9: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Those who do not remember history are condemned to repeat it.

George Santayana

Page 10: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

(Chances are I’m repeating it right now.)

Page 11: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Alan Kay

Page 12: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

EncapsulationLocal

RetentionProtection

Hidingof State-process

Page 13: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Genericity

Commonly, PolymophisimAlan Kay spoke of Algebras

Extreme late binding

Page 14: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Messaging

Object decides how to react.

Page 15: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Self Contained Tapes

Page 16: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

OOP

EncapsulationGenericityMessaging

Page 17: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classes

Page 18: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Inheritance

Page 19: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

“Five words

objectmessageclassinstancemethod

make up the vocabulary with which Smalltalk

is discussed.”

Smalltalk-80, The Language, p.51

Page 20: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Smalltalk 71727680

Classes

Inheritance

Metaclasses

Page 21: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Alan Kay2003

“So I decided to leave out inheritance as a built-in feature until I understood it better.”

Page 22: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Alan Kay2003

“[...] backslid towards Simula and did not replace the extension mechanisms with safer ones that were anywhere near as useful.”

Page 23: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classical

Page 24: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sketchpad

1963

Page 25: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Generalvs.

Specific

Page 26: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Simula-67

C++Javaetc.

Page 27: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classes Instances

Page 28: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Segregation

Page 29: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Plato

Formvs.

Matter

Page 30: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Descriptionvs.

Representation

Page 31: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 32: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Metaclass

“Class of classes”

Page 33: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 34: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 35: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

RubyRuby Logo © 2006, Yukihiro Matsumoto

Page 36: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

I’m not smart enough for Ruby’s

object system.

Page 37: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Peter DeutschThe Past, Present, and Future of Smalltalk

1989

“metaclasses have proven confusing to many users, and perhaps in the balance more confusing than valuable.”

Page 38: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Accidental Complexity

Page 39: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

William of Ockham

“entia non sunt multiplicanda praeter necessitatem”

Page 40: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

William of Ockham

“entities must not be multiplied beyond necessity”

Page 41: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Prototypal

Page 42: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Henry LiebermanOOPSLA 1986

http://web.media.mit.edu/~lieber/Lieberary/OOP/Delegation/Delegation.html

Using Prototypical Objects to Implement Shared Behavior in Object Oriented Systems

Page 43: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Self

1987

Page 44: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 45: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 46: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 47: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The
Page 48: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Abstractions

Objects

(Classes)

Page 49: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Objects

Abstractions?

Page 50: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

one

one = object.clone

Page 51: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

one two

two = one.clone

Page 52: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

P

one two three .....

one = proto.clonetwo = proto.clone

three = proto.clone

Page 53: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

YouAin’tGonnaNeed It

Page 54: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Singleton

Page 55: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Singleton (in JS)

var singleton = { ...};

Page 56: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Ex-Nihilo

“Out of Nothing”

Page 57: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Singleton: Self

clone = (self)

Page 58: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Prototypal Singleton

singleton.clone = function() { return this;};

Page 59: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Hard-core Singleton

function Singleton() { return Singleton.prototype;}

Page 60: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near Miss

Page 61: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near Miss

Page 62: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near MissDay

Kin

Page 63: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near Miss

var kin = day.clone("Kin");

Page 64: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near Miss

clone: function(name) { var o = Object.create(this); o.name = name; ... return o;},

Page 65: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Near Miss

... // independent existence. o.scale = 0; o.position = 0; o.time = 0; ...

Page 66: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object.create()

• ES5

• Firefox 4

• Safari 5

• Chrome 5+

• http://kangax.github.com/es5-compat-table/

Page 67: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object.create()

Object.create = function(o) { function F() {}; F.prototype = (o || {}); return new F();}

http://javascript.crockford.com/prototypal.html

Page 68: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

But Wait!

Page 69: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object

Foo

obj

def obj.bounce “whee!”end

Ruby

Page 70: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object

Foo

<***> obj

def obj.bounce “whee!”end

Page 71: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object

Foo

<***> obj

def obj.bounce “whee!”end

obj.class

Page 72: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object

Foo

<***> obj

def obj.bounce “whee!”end

lookup chain

Page 73: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Object

Foo

<***> obj

def obj.bounce “whee!”end

AccidentalComplexity

Page 74: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Nested Context

Page 75: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Nested Context

Like {block scope}.

(Or function scope in Javascript.)

Page 76: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Nested Context

under: function(path, f) { var m = Object.create(this); m.cd(path); f(m);},

Page 77: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Performance

Page 78: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Structured Memory

Page 79: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Programming as Experience:The Inspiration for Self

1995

Self runs

“2.3 times slower than optimized C++.”

Page 80: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Self includes: SmalltalkMario Wolczko

“all [sample] Smalltalk programs run faster in the the Self system, some significantly more so.”

Page 81: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Omega

1990Statically-typed prototypes

Page 82: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Design-Timevs.

Run-Time

Page 83: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Kevo

1993Concatative

‘Clone families’

Page 84: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Lisaac

2003Compiled.

44% slower to 17% fasterthan c.

http://www.lisaac.org/documentation/benchmarks

Page 85: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Duck TypesNot

Responsibility

Page 86: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

V8 Logo © 2006 Google

V82008

Page 87: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

V8 Logo © 2006 Google

Generated Code

Page 88: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

V8 Logo © 2006 Google

Hidden Classes

Page 89: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Javascript

1996

Page 90: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Javascript

Is not an Object-Oriented Programming Language

Page 91: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Genericity

PASS

Page 92: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Messaging

FAIL*Partial support in ES5 and Harmony

Page 93: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Encapsulation

FAIL*Work-around with closure.

Page 94: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Peter DeutschThe Past, Present, and Future of Smalltalk

1989

“inheriting implementation [...] tends to create difficulties in subsequent evolution and often reflects insufficient understanding.”

Page 95: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Copyvs.

Delegation

Page 96: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Data

Page 97: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Data

Page 98: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Data

Page 99: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Data

......

...

...

......

Page 100: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Seph

Stateless Delgation

http://olabini.com/blog/2010/07/preannouncing-seph/

Page 101: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objects

Page 102: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objects

Page 103: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objects

new Disk('Minute', unit.MS_S, 1, T("seconds/minute"), { colors: '#d22'})

Page 104: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objectsnew Disk('Solar Year', unit.MS_D, T("days/~month"), 12, { colors: ['blue', 'green', 'orange', 'brown'], ...

Page 105: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objects

... majorNames: ['~January'...], subDivide: 4, major: 3*4, median: 1*4, ...

Page 106: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Sparse Objects

... render: function(context) { context.save(); context.rotate( 6.28 * -9 / 365); ...

Page 107: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

Page 108: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

Page 109: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

Page 110: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

Page 111: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

item: function(d) { var i = Object.create(this); i.dot = d; return i;},

Page 112: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behavior

Page 113: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behavior

Page 114: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behavior

Page 115: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behaviormint: function( head, pattern, action) { var my = this.dup(); my.head = head; my.pattern = pattern; my.action = action; return my;},

Page 116: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behavior

dup: function() { return Object.create(this);},

Page 117: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

*

*

*

Page 118: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Prototype

Instances

Page 119: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Do I use class patterns?

Page 120: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

YES

Page 121: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Do I use class patterns

for everything?

Page 122: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

NO

Page 123: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

a

Objects

Classes

Page 124: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

a

Self

Smalltalk

Page 125: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classesare aUsefulPattern

Page 126: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

But notthe onlyPattern

Page 127: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Use Classes

Because You Want To

Page 128: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Use Classes

Because You Have To

Not

Page 129: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Language Designers

Considerprototypal

Page 130: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Monoculture

Page 131: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Language Designers

Don’t(blindly)

EmulateJavascript

Page 132: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

What Might we Do Better?

Page 133: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Multiple Inheritance

Page 134: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Multiple InheritanceDelegates

Page 135: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Multiple Del.: Self

parent* = defaultBehaviorclonable* = Traits clonable

Page 136: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

IO

2003

Page 137: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

http://iolanguage.com/

Io is a prototype-based programming language inspired by Smalltalk (all values are objects, all messages are dynamic), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), LISP (code is a runtime inspectable/modifiable tree) and Lua (small, embeddable).

Page 138: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Multiple Del.: IO

obj appendProto(Foo)obj prependProto(Bar)

Page 139: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Alan Kay

“But no comprehensive and clean multiple inheritance scheme appeared that was compelling enough to surmount Dan's original Simula-like design.”

Page 140: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Super

Page 141: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

The Stripetalk Papers (1989), referencing

The Learnability of Object-Oriented Programming Systems (1986)

“this construct is known to be confusing to novices.”

Page 142: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Kevo

1993Concatative

‘Clone families’

Page 143: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Constraint Systems

Page 144: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Review

Page 145: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

History

Page 146: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

OOP

Page 147: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Classical

Page 148: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Prototypal

Page 149: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Performance

Page 150: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

We’re Stuck with

Javascript

Page 151: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Learn How to Use It

Page 152: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Prototype

Instances

Page 153: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Behavior

Page 154: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Shared Data

Page 155: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Singleton

Page 156: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Flyweight

Page 157: Classes Are Premature Optimization - Wondiblewondible.com/pub/protoint-sl.pdf · 2011-09-23 · Classes Are Premature Optimization Justin Love ... object system. Peter Deutsch The

Nested Context