Pharo

From HandWiki
Pharo
Pharo Logo v3.0.svg
Pharo 6.0.jpg
ParadigmObject-oriented
DeveloperPharo community
First appeared2008; 16 years ago (2008)
Typing disciplineDynamic
Implementation languageSmalltalk
OSWindows, Linux, macOS, others
LicenseMIT license, partly Apache License 2.0[1]
Websitepharo.org
Influenced by
Smalltalk (Squeak)

Pharo is an open source, cross-platform implementation of the classic Smalltalk-80 programming language and runtime.[2] It is based on the OpenSmalltalk virtual machine called Cog (VM), [3][4][5][6](p16) which evaluates a dynamic, reflective, and object-oriented programming language with a syntax closely resembling Smalltalk-80.

Pharo is shipped with source code compiled into a system image that contains all software necessary to run Pharo.[6]:16 Like the original Smalltalk-80, Pharo provides several live programming features such as immediate object manipulation, live updates, and just-in-time compilation. The image includes an IDE-like software to modify its components.

Pharo was forked from Squeak v3.9 in March of 2008.[7][2][6][6]:10[8]

Overview

Pharo is a pure object-oriented dynamically typed and reflective language. The stated goal of Pharo is to revisit Smalltalk design and enhance it.

The name Pharo comes from the French word "phare" (French pronunciation: ​[faʁ]) which means lighthouse. This is why the Pharo logo shows a drawing of a lighthouse inside the final letter O of the name.

Key features

Virtual machine

  • Multiplatform virtual machine with JIT, combined generational garbage collector, ephemerons, forwarders
  • Fast object enumeration
  • Easy call stack manipulation
  • AST metalinks
  • Relatively low memory consumption
  • Customizable compiler
  • Optional complete object memory persistence
  • Resumable exceptions
  • Fast object serialization

Built-in software

Language features

  • Simple syntax
  • Object-oriented programming
  • Immediate object identity swapping
  • Dynamic inheritance
  • Objects as methods
  • Optional Green threads
  • Customizable metaclasses
  • Easy to use proxy objects

Relation to Smalltalk

Pharo is based on general concepts of Smalltalk but seeks to improve on them so does not limit itself to them. The basic syntax of the language has a close resemblance to Smalltalk. However, the way classes are defined in Pharo differs from other Smalltalk dialects.

Language syntax

Pharo syntax postcard

The Pharo syntax is based on Smalltalk-80 language syntax with several extensions. Some of these are common among modern Smalltalk dialects.

  • literals for dynamic arrays. The expressions that specify the array content are evaluated in time of the program execution
{1. 2. 1+2}
  • literals for byte arrays that can be composed only of integer numbers in the range from 0 to 255
#[1 2 3 4]
  • literals for scaled decimals, a representation of fixed point decimal numbers able to accurately represent decimal fractions
3.14s2
  • pragmas. In Smalltalk-80 the pragmas are used only for primitive methods. In Pharo they are fully capable method annotations
<gtInspectorPresentationOrder: 30>
  • two double quotes inside a comment are interpreted as a single double quotes character that is part of the content of the comment

The Pharo language syntax is supposed to be very simple and minimalistic. The basic language elements are often presented on a single postcard as a showcase for the language's brevity. The grammar is classified as LL(1).

The language grammar does not specify directly how the code should be stored in files. Pharo uses Tonel as the preferred code serialization format.

History

Pharo emerged as a fork of Squeak, an open-source Smalltalk environment created by the Smalltalk-80 team (Dan Ingalls and Alan Kay). Pharo was created by S. Ducasse [1] and M. Denker in March 2008. It focuses on modern software engineering and development techniques.[citation needed] Pharo is supported by the Pharo consortium (for legal entities) [2] and the Pharo association for physical persons [3].


Pharo look history.png
Version Release date Major features
March 16, 2008 [9] Fork of Squeak environment
Pharo 1.0 April 15, 2010 real closures, EToys and MVC removed
Pharo 1.1 July 26, 2010 Cog JIT VM, Settings framework
Pharo 1.2 March 29, 2011 new Finder, Recent changes tool, improved Help, better themes
Pharo 1.3 August 2011 Zinc, headless images
Pharo 1.4 April 2012[10] Ring metamodel, better code simulator
Pharo 2.0 March 18, 2013.[11] browser improvements, QA tools, Fuel serializer, better files API
Pharo 3.0 April 2014.[12] new modular compiler (Opal) and debugger, continuations
Pharo 4.0 April 2015.[13] GTools, slots
Pharo 5.0 May 2016. [14] Spur VM, UFFI, improved reflectivity
Pharo 6.0 6 June, 2017. [15] 64-bit and Git support
Pharo 6.1 24 July, 2017. [16] improved Git support
Pharo 7.0 22 January, 2019. [17] bootstrapping, new code browser (Calypso), stateful traits
Pharo 8.0 20 January, 2020. [18] improved support of Git, testing, refactoring and Windows
Pharo 9.0 15 July, 2021. [19] GTK3 support, object-centric debugger and inspector, refactorings, official ARM VMs
Pharo 10.0 5 April, 2022. [20] Cleanups, modularization, many rewritten and improved tools
Pharo 11.0 11 May, 2023. [21] Ephemerons, SIMD, more efficient closures, improved tools


Use of Pharo

Companies and consultants

Some companies use Pharo for their development projects.[22] In particular, they use:

  • Seaside for dynamic web development[23]
  • Zinc for server architectures[24]
  • Moose[25] to analyse data and software from all programming languages
  • Graphic libraries for evolved user interfaces
  • Roassal to visualize data[26]

The Pharo consortium[27] was created for companies wishing to support the Pharo project. The Pharo association[28] was created in 2011[29] for users wishing to support the project.

Performance and virtual machine (VM)

Pharo relies on a virtual machine that is written almost entirely in Smalltalk itself. Beginning in 2008, a new virtual machine (Cog) for Squeak, Pharo and Newspeak has been developed that has a level of performance close to the fastest Smalltalk virtual machine.[30] In 2014/2015 the VM community is working on Spur, a new Memory Manager for Cog that should again increase performance and provide better 64-bit VM support.[31]

See also

References

  1. Pharo license information
  2. 2.0 2.1 Pharo by example. Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet, Damien Cassou, Marcus Denker. [Kehrsatz] Switzerland. October 28, 2009. ISBN 978-3-9523341-4-0. OCLC 957555627. https://www.worldcat.org/oclc/957555627. 
  3. "OpenSmalltalk". https://opensmalltalk.org/. 
  4. OpenSmalltalk/opensmalltalk-vm, OpenSmalltalk, 2021-11-23, https://github.com/OpenSmalltalk/opensmalltalk-vm, retrieved 2021-11-24 
  5. "Cog Blog :: About Cog". http://www.mirandabanda.org/cogblog/about-cog/. 
  6. 6.0 6.1 6.2 6.3 Black, Andrew P.; Ducasse, Stéphane; Nierstrasz, Oscar; Pollet, Damien (October 28, 2009). Pharo by Example. Samuel Morello. ISBN 978-3-9523341-4-0. https://www.researchgate.net/publication/40637510. 
  7. "DevelopOnTheWeb". http://developontheweb.co.uk/pharo.html. 
  8. "The Rise and Fall of Commercial Smalltalk" (in en-US). http://www.wirfs-brock.com/allen/posts/914. 
  9. "Pharo got 10 years". Pharo-project.org. https://pharoweekly.wordpress.com/2018/05/29/pharo-got-10-years/. Retrieved May 31, 2018. 
  10. "Pharo Open Source Smalltalk — Release 1.4". Pharo-project.org. April 17, 2012. http://www.pharo-project.org/pharo-download/release-1-4. Retrieved April 5, 2013. 
  11. "Pharo Open Source Smalltalk — Release 2.0". Pharo-project.org. March 18, 2013. http://www.pharo-project.org/pharo-download/release-2-0. Retrieved April 5, 2013. 
  12. "Pharo Open Source Smalltalk — Release 3.0". pharo.org. April 30, 2014. http://pharo.org/news/pharo-3.0-released. 
  13. "Pharo Open Source Smalltalk — Release 4.0". pharo.org. April 15, 2015. http://pharo.org/news/pharo-4.0-released. 
  14. "Pharo Open Source Smalltalk — Release 5.0". pharo.org. May 12, 2016. http://pharo.org/news/pharo-5.0-released. 
  15. "Pharo Open Source Smalltalk - Release 6.0". pharo.org. June 6, 2017. http://pharo.org/news/pharo6.0-released. 
  16. "Pharo 6.1 released". pharo.org. July 24, 2017. http://pharo.org/news/pharo6.1-released. 
  17. "Pharo 7.0 released". pharo.org. January 22, 2019. https://pharo.org/news/pharo7.0-released. 
  18. "Pharo 8.0 Released!". pharo.org. January 20, 2020. https://pharo.org/news/pharo8.0-released. 
  19. "Pharo 9.0 Released!". pharo.org. July 15, 2021. https://pharo.org/news/pharo9-released.html. 
  20. "Pharo 10.0 Released!". pharo.org. April 5, 2022. https://pharo.org/news/pharo10-released.html. 
  21. "Pharo 11.0 Released!". pharo.org. May 11, 2023. https://pharo.org/news/pharo11-released.html. 
  22. "(Press Release) Pharo Open Source Smalltalk — Success stories". Pharo-project.org. http://www.pharo-project.org/about/success-stories. Retrieved April 5, 2013. 
  23. "Home". seaside.st. March 18, 2007. http://www.seaside.st. Retrieved April 5, 2013. 
  24. "Zinc HTTP Components". Zn.stfx.eu. http://zn.stfx.eu/zn/index.html. Retrieved April 5, 2013. 
  25. Girba, Tudor. "Home". Moose technology. http://www.moosetechnology.org. Retrieved April 5, 2013. 
  26. "Agile Visualization". Object Profile. http://agilevisualization.com. Retrieved May 31, 2018. 
  27. "web: Pharo Consortium". Consortium.pharo.org. March 31, 2013. http://consortium.pharo.org. Retrieved April 5, 2013. 
  28. Ducasse, Stephane. "association: Pharo Association". Association.pharo.org. http://association.pharo.org. Retrieved April 5, 2013. 
  29. "Annonce JOAFE n°1025 de la parution n°20110013 du 26 mars 2011". Journal-officiel.gouv.fr. https://www.journal-officiel.gouv.fr/pages/associations-detail-annonce/?q.id=id:201100131025. Retrieved May 1, 2022. 
  30. "Cog Blog". Mirandabanda.org. http://www.mirandabanda.org/cogblog/. Retrieved April 5, 2013. 
  31. "7-point summary of the Spur memory manager". Clément Béra. https://clementbera.wordpress.com/2014/02/06/7-points-summary-of-the-spur-memory-manager/. Retrieved April 17, 2015. 

External links