From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Pharo 6.0.jpg
Developer Pharo community
First appeared 2008; 10 years ago (2008)
Stable release
6.1 / July 24, 2017; 15 months ago (2017-07-24)
Implementation language Smalltalk
OS Windows, Linux, macOS, others
License MIT license, partly Apache License 2.0[1]
Influenced by
Smalltalk (Squeak)

Pharo is an open source dynamic and reflective language inspired from the programming language and integrated development environment (IDE) Smalltalk. Pharo offers strong live programming features such as immediate object manipulation, live update and hot recompiling. The live programming environment is at the heart of the system.


Pharo is a pure object-oriented dynamically typed and reflective language. It was influenced by Smalltalk. The goal of Pharo is to revisit Smalltalk design and enhance it. Pharo syntax fits on a single postcard. The object model is simple: only objects. Methods are virtual public (dynamically looked up). Fields are protected (only visible from class and subclasses). There is single inheritance between classes. A class can also be composed of traits, which are a group of methods. Fields are first class entities, named slots.

A full massive open online course (MOOC) is available to learn Pharo.[1] Several books are available on-line.[2]

An industrial consortium has been created to sustain the development of Pharo.[3] An association gathers Pharo enthusiasts.[4]

Pharos is a Greek word (Φάρος) which means lighthouse. The Pharo logo shows a drawing of a lighthouse inside the final letter O of the name.

Key features

Pharo benefits from an elegant design that enables relatively simple implementation of many advanced programming techniques.

  • optional fusion of developed program and development environment
  • advanced run-time reflectivity
  • pure object-oriented approach
  • simple language syntax
  • immediate objects identity swapping
  • fast resumable exceptions
  • live customizable objects inspection
  • run-time classes and objects migration
  • dynamic inheritance
  • advanced fast multiplatform virtual machine with JIT, combined generational garbage collector, ephemerons, forwarders
  • virtual machine written mostly in the language itself
  • easy call stack manipulation
  • continuations
  • fast objects enumeration
  • objects as methods
  • traits
  • optional Green threads
  • AST metalinks
  • first-class customizable instance variables
  • customizable metaclasses
  • relatively low memory consumption
  • platform independent user interface
  • customizable compiler
  • moldable development tools
  • optional complete object memory persistence
  • integrated Git support
  • fast objects serialization
  • easy use of proxy objects
  • simple connection to native libraries

Relation to Smalltalk

Pharo is a standalone language. It is not supposed to be an implementation of Smalltalk-80 nor ANSI Smalltalk. Pharo is based on general concepts of Smalltalk but does not want to be limited by them. The basic syntax of the language shares most of the elements with Smalltalk, however, the Smalltalk syntax provides only a frame for construction of custom languages. So for example, the way how classes are defined in Pharo differs from other Smalltalk dialects although they use the same or very similar language grammar.

Language syntax

Pharo syntax postcard

The Pharo syntax is based on Smalltalk-80 language syntax with several extensions. Some of them are common for most of the 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
  • 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. 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.


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 [5] 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) [6] and the Pharo association for physical persons [7].

Pharo look history.png
Version Release date Major features
March 16, 2008 [2] 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[3] Ring metamodel, better code simulator
Pharo 2.0 March 18, 2013.[4] browser improvements, QA tools, Fuel serializer, better files API
Pharo 3.0 April 2014.[5] new modular compiler (Opal) and debugger, continuations
Pharo 4.0 April 2015.[6] GTools, slots
Pharo 5.0 May 2016. [7] Spur VM, UFFI, improved reflectivity
Pharo 6.0 6 June, 2017. [8] 64-bit and Git support
Current stable version: Pharo 6.1 24 July, 2017. [9] improved Git support
Pharo 7.0 end of 2018 bootstrapping, new code browser (Calypso), stateful traits

Use of Pharo

Companies and consultants

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

  • Seaside for dynamic web development[11]
  • Zinc for server architectures[12]
  • Moose[13] to analyse data and software from all programming languages
  • Graphic libraries for evolved user interfaces
  • Roassal to visualize data[14]

The Pharo consortium[15] was created for companies wishing to support the Pharo project. The Pharo association[16] was recently created for users wishing to support the project.

Universities and schools

  • University of Bern, Switzerland
  • University of Buenos Aires, Argentina
  • Vrije Universiteit Brussels, Belgium
  • University de Bretagne Occidentale, France
  • University Catholic of Argentina, Argentina
  • Federal University of Espírito Santo (UFES), Brazil
  • University of Chile at Santiago, Chile
  • Czech Technical University, Czech Republic
  • CULS Prague, Czech Republic
  • DCyT - Universdad Nacional de Quilmes, Argentina
  • Ecole des Mines de Douai, France
  • ENSTA Bretagne, France
  • University of Hagen, Germany
  • HackBo, Hackerspace en Bogotá, Colombia
  • Ivan Franko Nat. Uni. of Lviv, Ukraina
  • Université de Montpellier, France
  • IAE Savoie Mont-Blanc, France
  • University de Maroua, Cameroon
  • Aalborg University, Denmark
  • Northern Michigan University, USA
  • University Policnica de Catalunya, Spain
  • University of La Plata, Argentina
  • University of 20 Aout 55-Skikda, Algeria
  • University Technologica Nacional at Buenos Aires, Argentina
  • University Technologica Nacional at Cordoba, Argentina
  • University Nacional de San Martin, Argentina
  • Tomsk State University, Russia
  • Université de Louvain la neuve, Belgium
  • Université de Yaounde, Cameroon
  • Universite di Cagliari, Italy
  • Ryerson University, Canada

In the past

  • University of Brescia, Italy

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.[17] 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.[18]

See also


  1. ^ Pharo license information
  2. ^ "Pharo got 10 years". Retrieved May 31, 2018.
  3. ^ "Pharo Open Source Smalltalk — Release 1.4". April 17, 2012. Retrieved April 5, 2013.
  4. ^ "Pharo Open Source Smalltalk — Release 2.0". March 18, 2013. Retrieved April 5, 2013.
  5. ^ "Pharo Open Source Smalltalk — Release 3.0". April 30, 2014.
  6. ^ "Pharo Open Source Smalltalk — Release 4.0". April 15, 2015.
  7. ^ "Pharo Open Source Smalltalk — Release 5.0". May 12, 2016.
  8. ^ "Pharo Open Source Smalltalk - Release 6.0". June 6, 2017.
  9. ^ "Pharo 6.1 released". July 24, 2017.
  10. ^ "(Press Release) Pharo Open Source Smalltalk — Success stories". Retrieved April 5, 2013.
  11. ^ "Home". March 18, 2007. Retrieved April 5, 2013.
  12. ^ "Zinc HTTP Components". Retrieved April 5, 2013.
  13. ^ Girba, Tudor. "Home". Moose technology. Retrieved April 5, 2013.
  14. ^ "Agile Visualization". Object Profile. Retrieved May 31, 2018.
  15. ^ "web: Pharo Consortium". March 31, 2013. Retrieved April 5, 2013.
  16. ^ Ducasse, Stephane. "association: Pharo Association". Retrieved April 5, 2013.
  17. ^ "Cog Blog". Retrieved April 5, 2013.
  18. ^ "7-point summary of the Spur memory manager". Clément Béra. Retrieved April 17, 2015.

External links

  • Official website
Retrieved from ""
This content was retrieved from Wikipedia :
This page is based on the copyrighted Wikipedia article "Pharo"; it is used under the Creative Commons Attribution-ShareAlike 3.0 Unported License (CC-BY-SA). You may redistribute it, verbatim or modified, providing that you comply with the terms of the CC-BY-SA