A clean innovative, open-source...

58
http://www.pharo-project.org A clean, innovative, open-source Smalltalk

Transcript of A clean innovative, open-source...

Page 1: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

http://www.pharo-project.org

A clean, innovative, open-source Smalltalk

Page 2: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Roadmap

Short intro

User community

Look at syntax and runtime

Coding Session

Future

Page 3: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

In a nutshellPharo = language + IDE + update mechanism

Pure object-oriented programming language

Dynamically typed and trait-based

Open and flexible environment

Platform for Seaside and Aida/Web web frameworks

Page 4: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Pharo?A progressive, open-source Smalltalk platform

for professional use.

StableBugs fixed fastBut innovative

Page 5: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming
Page 6: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Pier

Page 7: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Pier

Page 8: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

iPhone

Page 9: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Smalltalk with OO-Database

Pharo is the IDE

Page 10: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Companies

netstyle.ch

cmsbox.com

Pinesoft

Smallworks

Agilitic.be

Inceptive.be

GemStone

SW Gmb

Denker2Denker

...

Page 11: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Universities

Annecy

Lugano

Bern

Douai

Lille

Santiago

Bruxelles

...

Page 12: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Getting started

Model

Tools

Syntax

Page 13: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

A Simple and Pure Model

Everything is an object instance of a class

Public methods

Protected attributes

Single inheritance

Page 14: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Everything happens by sending messages to objects 1000 factorial / 999 factorial (Smalltalk isCool) ifTrue: [‘Yeahh’] #(1 -2 3) collect: [ :each | each abs ]

Page 15: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Running Pharo

Page 16: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Do it, print it

You can evaluateany expression

anywherein Pharo

Page 17: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Standard development tools

Page 18: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Standard development tools

Page 19: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Debugger, explorer, inspector

Page 20: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Syntax in a nutshell

Page 21: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

3 kinds of messages

Unary messages

Binary messages

Keywords messages

5 factorialTranscript cr

3 + 4

3 raisedTo: 10 modulo: 5

Transcript show: 'hello world'

Page 22: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

From Java to Smalltalk

postman.send(mail,recipient);

Page 23: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Removing

postman.send(mail,recipient);

Page 24: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Removing unnecessary

postman send mail recipient

Page 25: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

But without losing information

postman send mail to recipient

Page 26: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

postman send: mail to: recipientpostman.send(mail,recipient);

Page 27: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

(Msg) > Unary > Binary > Keywords

from left to right

No mathematical precedence

Precedence

Page 28: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

2 + 3 squared

28

Page 29: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

2 + 3 squared> 2 + 9

29

Page 30: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

2 + 3 squared> 2 + 9> 11

30

Page 31: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Color gray - Color white = Color black

31

Page 32: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Color gray - Color white = Color black

32

Page 33: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Color gray - Color white = Color black> aColor = Color black

33

Page 34: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Color gray - Color white = Color black> aColor = Color black> true

34

Page 35: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

| p pen |p := [email protected] := Pen new.pen up.pen goto: p; down; goto: p+p

Statement and cascades

Temporary variablesStatement

Cascade

Page 36: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Block Closures: aka Function

fct(x) = x * x + x

|fct|fct:= [:x | x * x + x].

36

Page 37: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

Function Application

fct (2) = 6fct (20) = 420

fct value: 2 > 6fct value: 20 > 420[:x | x * x + x] value: 2>6[:x | x * x + x] value: 20>420

37

Page 38: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

#(15 10 19 68) do: [:i | Transcript show: i ; cr ]

38

Page 39: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

#(15 10 19 68) do: [ :i | Transcript show: i ; cr ]

39

Page 40: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

1 to: 100 do: [ :i | Transcript show: i ; space]

40

Page 41: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

1 to: 100 do: [ :i | Transcript show: i ; space]

41

Page 42: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

1 to: 100 by: 3 do: [ :i | Transcript show: i ; space]

42

Page 43: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

S.Ducasse

RMod

1 to: 100 by: 3 do: [ :i | Transcript show: i ; space]

43

Page 44: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

<= aPoint ! "Answer whether the receiver is neither! below nor to the right of aPoint."

! ^ x <= aPoint x and: [y <= aPoint y]

A typical method in Point

Method name Argument Comment

Return Binary messageKeyword messageInstance variable

Block

(2@3) <= (5@6) true

Page 45: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Creating classes

Send a message to a class (!)

Number subclass: #Complex! instanceVariableNames: 'real imaginary'! ...! category: 'ComplexNumbers'

Page 46: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Future

Page 47: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

...cleaner

started to run SmallLint... and fix

Page 48: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

...smaller

small image is 2 Mb

Page 49: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

...faster

Page 50: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Update ~1000 Bug-reports closed

470 Updates

Release Candidate Planned: October 2009 ;)

Page 51: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Past Actions+ Major Cleanups (MVC, eToys)+ New UI Look / TrueType+ Tools+ Block Closures+ Lots of bugfixes and small improvements+ Preferences clean up+ MIT license clean

Page 52: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

What we dream about

Better toolsnext generation refactoring

Better infrastructureAnnouncements

New compilers

First class packages

Minimal core

Logging

Integration Server....

So that people can invent their future

A flexible infrastructure to be able to reinvent itself

Page 53: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Everybody can help

Reporting bugsConfirming bugsWriting testsWriting examplesWriting commentsSimple contributing fixesDeep discussion...

Page 54: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

ProcessFIX/

ENHANCEMENTIn PharoInbox or

Changesets

Discussed on Mailing-

list

BUG Tracker

Integrated Rejected

BUG

Discussed on

Discussed on

Described

Described

Other version

Page 55: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Pharo SprintsMay 2008 BernJuly 2009 BernOctober 2009 LilleNovember 2009 Buenos Ares

Free accessPossible funding support for October 2009

Page 56: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Books

Pharo by example is out

Pharo by example vol. 2 on preparation

Page 57: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

ThanksHans Beck

Alexandre Bergel Cedric Beler

Torsten Bergmann Matthias Berth Ralph Boland

Noury Bouraqadi Brian Brown

Gwenael Casaccio Damien Cassou Nicolas Cellier Gary Chambers

Miguel Coba Gabriel Cotelli Carlos Crosetti Cyrille Delaunay Simon Denier

Marcus Denker Ramiro Diaz Trepat Stephane Ducasse

Morales Durand Hernan Stephan Eggermont

Luc Fabresse

Matthew Fulmer Hilaire Fernandes

Julian Fitzell Tudor Girba Sean Glazier

Norbert Hartl Dale Henrichs Reinout Heeck

Eric Hochmeister Keith Hodges

Henrik Sperre Johansen Pavel Krivanek Adrian Kuhn

Adrian Lienhard Andreas Leidig

Mariano Martinez Peck Dave Mason

John McIntosh Johnaton Meichtry

Eliot Miranda Hernan Morales Durand

Philipp Marshall Jannick Menanteau

Yann Monclair Oscar Nierstrasz

David J Pennell Joseph Pelrine Alain Plantec Damien Pollet Lukas Renggli Jorge Ressia

Mike Roberts Robert Rothwell

David Rotlisberger Michael Rueger

Bill Schwab Niko Schwarz Igor Stasenko

Francois Stephany Serge Stinckwich

Mathieu Suen Lawrence Trutter Andrew Tween

martin von loewis Juan Vuletich Steven Wirts

Hernan Wilkinson

Page 58: A clean innovative, open-source Smalltalksdmeta.gforge.inria.fr/Presentations/PharoForNonSmalltalker.pdf · Pharo = language + IDE + update mechanism Pure object-oriented programming

Join Us!

Creating good energy, software quality,learning and having fun

http://pharo-project.org