Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great...
Transcript of Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great...
![Page 1: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/1.jpg)
Pharo: Object at your FingertipsMarcus Denker http://www.pharo-project.org
![Page 2: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/2.jpg)
What is it?
Language + Environment
Simple Language (Smalltalk)
Object-Oriented, Dynamic, Reflective
Explore + Change running systems
!
The Ultimate Programming Environment!
![Page 3: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/3.jpg)
PharoMIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries
![Page 4: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/4.jpg)
Started 2008
Pharo 1.0 released October 2009 2.0 is the current stable Pharo3: Early 2014
Plan: 1 Release per year
![Page 5: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/5.jpg)
Language (in 10 minutes)
![Page 6: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/6.jpg)
Pharo started with Smalltalk-80 (Squeak)
Language still very much Smalltalk
But the goal is to develop it further
Example: Reflective Capabilities
![Page 7: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/7.jpg)
No constructors
No types declaration
No interfaces
No packages/private/protected
No parametrized types
Yet really powerful
Less is better
![Page 8: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/8.jpg)
Objects are instances of Classes
![Page 9: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/9.jpg)
Objects are instances of Classes
!
(10@200)
![Page 10: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/10.jpg)
Objects are instances of Classes
!
(10@200) class
![Page 11: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/11.jpg)
Objects are instances of Classes
!
(10@200) class
Point
![Page 12: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/12.jpg)
Classes are objects too
![Page 13: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/13.jpg)
Classes are objects too
!
Point selectors
!
![Page 14: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/14.jpg)
Classes are objects too
!
Point selectors
!> an IdentitySet(#eightNeighbors #+ #isZero #sortsBefore: #degrees #printOn: #sideOf: #fourNeighbors #hash #roundUpTo: #min: #min:max: #max #adaptToCollection:andSend: #quadrantOf: #crossProduct: #= #nearestPointOnLineFrom:to: #bitShiftPoint: #* #guarded #insideTriangle:with:with: #grid: #truncateTo: #y #setR:degrees: #normal #directionToLineFrom:to: #truncated #nearestPointAlongLineFrom:to: #theta #scaleTo: #encodePostscriptOn: #> #asPoint #extent: #r #roundTo: #max: #interpolateTo:at: #triangleArea:with: #angleWith: #dotProduct: #isSelfEvaluating #'<=' #to:intersects:to: #'//' #isInsideCircle:with:with: #< #scaleFrom:to: #corner: #to:sideOf: #x #'>=' #roundDownTo: #onLineFrom:to:within: #transposed #ceiling #angle #basicType #translateBy: #asFloatPoint #'\\' #adaptToNumber:andSend: #abs #negated #octantOf: #asIntegerPoint #flipBy:centerAt: #scaleBy: #floor #onLineFrom:to: #isPoint #reflectedAbout: #/ #dist: #asNonFractionalPoint #bearingToPoint: #reciprocal #rotateBy:centerAt: #rotateBy:about: #rounded #setX:setY: #squaredDistanceTo: #normalized #veryDeepCopyWith: #- #storeOn: #rect: #deepCopy #isIntegerPoint #min #adhereTo: #adaptToString:andSend:)
![Page 15: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/15.jpg)
Methods are public
![Page 16: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/16.jpg)
Instance variables are protected
![Page 17: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/17.jpg)
Single Inheritance
![Page 18: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/18.jpg)
Single Inheritance
Object subclass: #Point!! instanceVariableNames: 'x y'!! classVariableNames: ''!! poolDictionaries: ''!! category: 'Kernel-BasicObjects'
2 instance variables
subclass of Object
![Page 19: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/19.jpg)
3 kinds of messages
Unary messages
Binary messages
Keywords messages
5 factorial!Transcript cr
3 + 4
3 raisedTo: 10 modulo: 5!!Transcript show: 'hello world'
![Page 20: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/20.jpg)
• Anonymous method
• Passed as method argument or stored • Functions fct(x)= x*x+3, fct(2). !
fct :=[:x| x * x + 3]. fct value: 2
!
Blocks
![Page 21: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/21.jpg)
Control structuresEvery control structure is realized by message sends
4 timesRepeat: [Beeper beep]
max: aNumber!! ^ self < aNumber !! ! ifTrue: [aNumber] !! ! ifFalse: [self]
![Page 22: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/22.jpg)
<= 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 PointMethod name Argument Comment
Return Binary messageKeyword messageInstance variable
Block
(2@3) <= (5@6) true
![Page 23: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/23.jpg)
Complete Syntax on a PostCard
exampleWithNumber: x
“A method that has unary, binary, and key word messages, declares arguments and temporaries (but not block temporaries), accesses a global variable (but not and instance variable), uses literals (array, character, symbol, string, integer, float), uses the pseudo variable true false, nil, self, and super, and has sequence, assignment, return and cascade. It has both zero argument and one argument blocks.”
|y|
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
#($a #a ‘a’ 1 1.0)
do: [:each | Transcript show: (each class name); show: (each printString); show: ‘ ‘].
^ x < y
![Page 24: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/24.jpg)
Environment
![Page 25: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/25.jpg)
Language + Environment are closely linked
![Page 26: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/26.jpg)
Reflection is the basis
![Page 27: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/27.jpg)
Classes, Methods, Packages are Objects
![Page 28: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/28.jpg)
The tools manipulate these Objects
![Page 29: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/29.jpg)
Class Browser
![Page 30: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/30.jpg)
Inspector
![Page 31: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/31.jpg)
Demo: Changing a class at runtime
![Page 32: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/32.jpg)
Demo: Exploring the system
![Page 33: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/33.jpg)
Demo: Inspect World
![Page 34: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/34.jpg)
There is so much more…
![Page 35: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/35.jpg)
Pharo Books
![Page 36: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/36.jpg)
Pharo Success Stories
![Page 38: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/38.jpg)
eMCee is a montoring service for backend interfaces
- Web application to define backend interfaces
- Monitors reliability of interface periodically
- Sends warning if status of interface changes
- Provides overview graphs about reliability
- Snapshots requests for debugging purposes
![Page 39: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/39.jpg)
Sunday 20 May 12
![Page 40: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/40.jpg)
• Entry Level Track & Trace Product
• Complements T3 Full Product
• One Page Javascript HTML5 / Ajax Client
• REST Back End in Pharo Smalltalk
• Gateways to multiple data providers
Sunday 20 May 12
![Page 41: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/41.jpg)
Pharo Consortium
Managed by INRIA Who: companies, institutions, user groups Privileged access to the core development team Influence priorities of the next development
http://consortium.pharo.org
![Page 42: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/42.jpg)
![Page 43: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/43.jpg)
Future + Research
![Page 44: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/44.jpg)
Instance Variables as Objects —> Slots
!
Proxy model in the base language
!
Structuring reflective API (—> Mirrors)
More Reflection
![Page 45: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/45.jpg)
AST Everywhere
Used in Tools for Navigation
!
Do we need to store text?
!
Use for Behavioral Reflection
Beyond Text
![Page 46: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/46.jpg)
Put “virtualization” in the language
We already use “Images”
Make the Image a first class concept in the language
System - as - Objects
![Page 47: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/47.jpg)
Open Pharo SprintsMay 2008 Bern July 2009 Bern October 2009 Lille November 2009 Buenos Ares March 2010 Bern May 2010 Buenos Ares June 2010 Bern June 2010 Bruxelles July 2010 London September 2010 Barcelona September 2010 Lille January 2011 Lille July 2011 Lille October 2011 Bruxelles February 2012 Bern April 2012 Lille September 2012 Ghent October 2013 Lille November 2013 Buenos Aires
!
![Page 48: Pharo: Object at your Fingertips...Pharo MIT license Mac, Linux, Android, iOS, Windows Great community Improving steadily Many excellent libraries](https://reader033.fdocuments.us/reader033/viewer/2022060312/5f0af8fb7e708231d42e3de9/html5/thumbnails/48.jpg)