View
4
Download
0
Category
Preview:
Citation preview
Pharo: un langage moderne,un environnement de live programming, une communauté qui monte
Damien Cassou and Stéphane Ducassehttp://www.pharo.org
What it is
Programming language + IDEObject-Oriented, Dynamic, Reflective
Explore + Change running systems
The Ultimate Live Programming Environment!
Pharo
MIT licenseGreat community of active doersPowerfulElegant and fun to programLiving system under your fingersMac, Linux, Android, iOS, Windows
3rd most downloaded on Inria gforge600 mailing-list members215 license agreements70 association members28 industrial consortium members
in March 2015
Pharo in numbers
Create an ecosystem where business/innovation
can bloom
A Little Journey in the Pharo Object Model
No constructors, no static methods, no operators
No interfaces, no private/protected modifiers
No type declarations, no parametrized types
No primitive types, no boxing/unboxing
Still powerful
1 class
⇒ SmallInteger
1 class
⇒ SmallInteger
1 class maxVal
⇒ 1073741823
1 class
⇒ SmallInteger
1 class maxVal
⇒ 1073741823
1 class maxVal + 1
⇒ 1073741824
1 class
⇒ SmallInteger
1 class maxVal
⇒ 1073741823
1 class maxVal + 1
⇒ 1073741824
(1 class maxVal + 1) class
⇒ LargePositiveInteger
(1/3) + (2/3)
⇒ 1
(1/3) + (2/3)
⇒ 1
2/3 + 1
⇒ 5/3
(1/3) + (2/3)
⇒ 1
2/3 + 1
⇒ 5/3
1000 factorial
4023872600770937735437024339230039857193748642107146325437999104299385123986290205920442084869694048004799886101971960586316668729948085589013238296699445909974245040870737599188236277271887325197795059509952761208749754624970436014182780946464962910563938874378864873371191810458257836478499770124766328898359557354325131853239584630755574091142624174743493475534286465766116677973966688202912073791438537195882498081268678383745597317461360853795345242215865932019280908782973084313928444032812315586110369768013573042161687476096758713483120254785893207671691324484262361314125087802080002616831510273418279777047846358681701643650241536913982812648102130927612448963599287051149649754199093422215668325720808213331861168115536158365469840467089756029009505376164758477284218896796462449451607653534081989013854424879849599533191017233555566021394503997362807501378376153071277619268490343526252000158885351473316117021039681759215109077880193931781141945452572238655414610628921879602238389714760885062768629671466746975629112340824392081601537808898939645182632436716167621791689097799119037540312746222899880051954444142820121873617459926429565817466283029555702990243241531816172104658320367869061172601587835207515162842255402651704833042261439742869330616908979684825901254583271682264580665267699586526822728070757813918581788896522081643483448259932660433676601769996128318607883861502794659551311565520360939881806121385586003014356945272242063446317974605946825731037900840244324384656572450144028218852524709351906209290231364932734975655139587205596542287497740114133469627154228458623773875382304838656889764619273838149001407673104466402598994902222217659043399018860185665264850617997023561938970178600408118897299183110211712298459016419210688843871218556461249607987229085192968193723886426148396573822911231250241866493531439701374285319266498753372189406942814341185201580141233448280150513996942901534830776445690990731524332782882698646027898643211390835062170950025973898635542771967428222487575867657523442202075736305694988250879689281627538488633969099598262809561214509948717012445164612603790293091208890869420285106401821543994571568059418727489980942547421735824010636774045957417851608292301353580818400969963725242305608559037006242712434169090041536901059339838357779394109700277534720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Language Constructs
^ return“ comments # symbol or array‘ string[] block. separator; cascade| local or block variable:= assignment$ character<...> annotation
Examplescomment: "a comment "character: $cstring: 'a string'symbol: #unix array: { 1 . 123 + 1 }literal array: #(1 2 3 (1 3) $a 4)byte array: #[1 2 3]block: [ :x | x * 2 ]numbers: 1.5 6.03e-34 4 2.4e7keywords: true false nil self super thisContext
Not Syntax
& conjunction (and)| disjunction (or)+ addition< lower thanifTrue: conditiondo: iteration...
all of these are plain methods!
Not Syntax
& conjunction (and)| disjunction (or)+ addition< lower thanifTrue: conditiondo: iteration...
Boolean>>
Boolean>>
Number>>
Magnitude>>
Boolean>>
Collection>>
their classes
3 = 2 ifTrue: [ Error signal: 'Help' ]
3 kinds of messagesUnary messages
Binary messages
Keyword messages
5 factorialTranscript cr
3 + 4
2 between: 0 and: 5
Transcript show: 'hello world'
postman.send( mail, recipient);
Keyword messages
postman.send( mail, recipient);
Keyword messages
postman send mail recipient
Keyword messages
postman send mail to recipient
Keyword messages
postman send: mail to: recipient
Keyword messages
postman send: mail to: recipient
Keyword messages
send:to: method in the Postman class
receiver argument 1 argument 2
message send
Black magic
Execution Stack as an Object
To define exceptions from within the language
Debugger support!
Advanced debugging
Continuation
thisContext
returns an object that represents the method invocationcan walk (even modify!) the stack
Serializing Continuations[ "some code causing an error" ] on: Error do: [ :error | FLSerializer serialize: error toFileNamed: 'error.fuel' ]
On a different computer open a debugger on the serialized error:
FLMaterializer materializeFromFileNamed: 'error.fuel'; debug.
Powerful Breakpoints?
Would be so good if we could say:“Stop method bar only if it is called from method named foo” i.e.,bar ... Halt whenCalledFrom: #foo. ...
Halt>> whenCalledFrom: aSelector | ctxt | ctxt := thisContext. [ ctxt sender isNil ] whileFalse: [ ctxt := ctxt sender. ctxt selector = aSelector ifTrue: [ self signal ] ]
Pointer Swapping
anObject become: anotherObject
| pt1 pt2 ref |
pt1 := 0@0.
pt2 := 100@100.
ref := pt1.
pt1 become: pt2.
self assert: ref = (100@100).
self assert: pt2 = (0@0).
self assert: pt1 = (100@100).
Pointer Swapping
Demo:
Pharo, a live programming environment
Color swapping
We are a cool community
www.10pines.comwww.2denker.dewww.agilitic.com
www.airflowing.comwww.anymorphic.comwww.ardishealth.com
www.beta9.bewww.bombardier.com
www.cmsbox.comwww.finworks.biz
seaside.gemstone.comwww.ibizlog.comwww.inceptive.bewww.jooshr.comwww.majcon.de
www.mindclue.chwww.miriamtech.com
www.myneat.orgwww.netstyle.ch
www.objectfusion.frwww.panasoft.comwww.pinesoft.co.uk
www.promedmedical.netwww.sharedlogic.ca
www.smallworks.com.arwww.trantaria.com www.square-i.net
yesplan.be
Companies
University of Bueno Aires University of Bern scg.unibe.chUniversity of Brussels soft.vub.ac.be/soft/Ecole des Mines www.ensm-douai.frUniversité de Savoie www.imus.univ-savoie.frIvan Franko National University of UkraineCzech Technical UniversityUniversity of Life Sciences in PragueNorthen Michigan University www.nmu.eduUniversity Catholic of Argentina www.uca.edu.arUniversity of Santiago www.uchile.clUniversitat Policnica de Catalunya www.upc.edu
Lectures
Lafhis (University of Bueno Aires )Software Composition Group (scg.unibe.ch)CAR (Ecole des mines www.ensm-douai.fr)RMoD (Inria)Ummisco (IRD)Reveal (University of Lugano) Lysic (University of Bretagne Occidentale)Pleiad (University of Santiago)CEA-List
Research Groups
Pharo books
Pharo by example translated to french, merci!translated to spanish, gracias!translated to japanese, ありがとう!
Deep into Pharo
http://pharobyexample.org
http://deepintopharo.com
New books are coming
Enterprise Pharo
A glimpse at VM
[...]June 2010 BruxellesJuly 2010 LondonSeptember 2010 BarcelonaSeptember 2010 LilleJanuary 2011 LilleJuly 2011 LilleOctober 2011 BruxellesFebruary 2012 BernOctober 2012 BernApril 2012 LilleAugust 2012 GhentOctober 2012 Perto MadrynJanuary 2013 SantiagoFebruary 2013 LilleApril 2013 LilleJune 2013 LilleFebruary 2014 LilleApril 2014 LilleSeptember 2014 LilleJanuary 2015 LilleApril 2015 Lille
Open Pharo Sprints
To Take AwayBecause it is simple and extensible, Pharo is a nice platform to experiment on
Use it for your own research and developments
http://www.pharo.org
Recommended