Pharo

Open-source Smalltalk environment


title: "Pharo" type: doc version: 1 created: 2026-02-28 author: "Wikipedia contributors" status: active scope: public tags: ["programming-languages", "object-oriented-programming-languages", "class-based-programming-languages", "dynamically-typed-programming-languages", "smalltalk-programming-language-family", "cross-platform-free-software", "free-and-open-source-compilers", "programming-languages-created-in-2008", "2008-software", "software-using-the-mit-license", "software-using-the-apache-license", "articles-with-example-smalltalk-code"] description: "Open-source Smalltalk environment" topic_path: "technology/programming-languages" source: "https://en.wikipedia.org/wiki/Pharo" license: "CC BY-SA 4.0" wikipedia_page_id: 0 wikipedia_revision_id: 0

::summary Open-source Smalltalk environment ::

::data[format=table title="Infobox programming language"]

FieldValue
namePharo
logoPharo Logo v3.0.svg
logo_size200px
logo captionPharo logo with lighthouse
screenshotPharo 6.0.jpg
screenshot_size250px
paradigmobject-oriented
familySmalltalk: Squeak
developerPharo community
released
latest release version
latest release date
latest preview date
typingdynamic
programming languageSmalltalk
operating systemWindows, Linux, macOS, others
platformARM, IA-32, x86-64
licenseMIT, partly Apache 2.0
website
influenced bySmalltalk (Squeak)
::

| name = Pharo | logo = Pharo Logo v3.0.svg | logo_size = 200px | logo caption = Pharo logo with lighthouse | screenshot = Pharo 6.0.jpg | screenshot_size = 250px | paradigm = object-oriented | family = Smalltalk: Squeak | developer = Pharo community | released = | latest release version = | latest release date = | latest preview version = | latest preview date = | typing = dynamic | programming language = Smalltalk | operating system = Windows, Linux, macOS, others | platform = ARM, IA-32, x86-64 | license = MIT, partly Apache 2.0 | website = | influenced by = Smalltalk (Squeak) | influenced =

Pharo is a cross-platform implementation of the classic Smalltalk-80 programming language and runtime system. It is based on the OpenSmalltalk virtual machine (VM) named Cog, which evaluates a dynamic, reflective, and object-oriented programming language with a syntax closely resembling Smalltalk-80. It is free and open-source software, released under a mix of MIT, and Apache 2 licenses.

Pharo is shipped with source code compiled into a system image that contains all software needed to run Pharo. Like the original Smalltalk-80, Pharo provides several live programming features such as immediate object manipulation, live updates, and just-in-time compilation (JIT). The system image includes an integrated development environment (IDE) to modify its components.

Pharo was forked from Squeak v3.9 in March 2008.

Overview

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

The name Pharo comes from the French word "phare" () 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 just-in-time compilation (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

::figure[src="https://upload.wikimedia.org/wikipedia/commons/a/a7/Pharo_syntax_postcard.svg" caption="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 during program execution ::code[lang=smalltalk] {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 ::code[lang=smalltalk] 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 one double quote character that is part of the content of the comment

The Pharo language syntax is supposed to be very simple and minimalist. The basic language elements are often presented on one 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 serializing format.

History

::figure[src="https://upload.wikimedia.org/wikipedia/commons/f/f0/Pharo_look_history.png"] ::

Pharo emerged as a fork of Squeak, an open-source Smalltalk environment created by the original Smalltalk-80 team (Dan Ingalls and Alan Kay). Pharo was created by S. Ducasse http://stephane.ducasse.free.fr and M. Denker in March 2008. It focuses on modern software engineering and development techniques. Pharo is supported by the Pharo consortium (for legal entities) http://consortium.pharo.org and the Pharo association for physical persons http://association.pharo.org. ::data[format=table]

Pharo versionRelease dateMajor features
March 16, 2008Fork of Squeak environment
1.0April 15, 2010real closures, EToys and MVC removed
1.1July 26, 2010Cog JIT VM, Settings framework
1.2March 29, 2011new Finder, Recent changes tool, improved Help, better themes
1.3August 2011Zinc, headless images
1.4April 2012Ring metamodel, better code simulator
2.0March 18, 2013browser improvements, QA tools, Fuel serializer, better files API
3.0April 2014new modular compiler (Opal) and debugger, continuations
4.0April 2015GTools, slots
5.0May 2016Spur VM, UFFI, improved reflectivity
6.06 June 201764-bit and Git support
6.124 July 2017improved Git support
7.022 January 2019bootstrapping, new code browser (Calypso), stateful traits
8.020 January 2020improved support of Git, testing, refactoring and Windows
9.015 July 2021GTK3 support, object-centric debugger and inspector, refactorings, official ARM VMs
10.05 April 2022Cleanups, modularization, many rewritten and improved tools
11.011 May 2023Ephemerons, SIMD, more efficient closures, improved tools
12.026 May 2024New debug points system, new class definitions, permanent space
21 May 2025HDPI support, Zoomable UI, New Process Browser, Organic window manager, Async IO using epoll on unixes
26 June 2025Improvements merged since version 13.0
::

Use of Pharo

Companies and consultants

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

The Pharo consortium was created for companies wishing to support the Pharo project. The Pharo association was created in 2011 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. Beginning in 2008, a new virtual machine (Cog) for Squeak, Pharo and Newspeak has been developed that performs nearly as well as the fastest Smalltalk virtual machine. 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.

References

References

  1. [https://pharo.org/license Pharo license information]
  2. (October 28, 2009). "Pharo by example".
  3. "OpenSmalltalk".
  4. (2021-11-23). "OpenSmalltalk/opensmalltalk-vm". OpenSmalltalk.
  5. "Cog Blog: About Cog".
  6. (October 28, 2009). "Pharo by Example". Lulu.com.
  7. "DevelopOnTheWeb".
  8. "The Rise and Fall of Commercial Smalltalk".
  9. (May 29, 2018). "Pharo got 10 years". Pharo-project.org.
  10. (April 17, 2012). "Pharo Open Source Smalltalk — Release 1.4". Pharo-project.org.
  11. (March 18, 2013). "Pharo Open Source Smalltalk — Release 2.0". Pharo-project.org.
  12. (April 30, 2014). "Pharo Open Source Smalltalk — Release 3.0". pharo.org.
  13. (April 15, 2015). "Pharo Open Source Smalltalk — Release 4.0". pharo.org.
  14. (May 12, 2016). "Pharo Open Source Smalltalk — Release 5.0". pharo.org.
  15. (June 6, 2017). "Pharo Open Source Smalltalk - Release 6.0". pharo.org.
  16. (July 24, 2017). "Pharo 6.1 released". pharo.org.
  17. (January 22, 2019). "Pharo 7.0 released". pharo.org.
  18. (January 20, 2020). "Pharo 8.0 Released!". pharo.org.
  19. (July 15, 2021). "Pharo 9.0 Released!". pharo.org.
  20. (April 5, 2022). "Pharo 10.0 Released!". pharo.org.
  21. (May 11, 2023). "Pharo 11.0 Released!". pharo.org.
  22. (May 26, 2024). "Pharo 12.0 Released!". pharo.org.
  23. (May 21, 2025). "Pharo 13.0 Released!". pharo.org.
  24. (June 26, 2025). "Pharo 13.1 Released!". pharo.org.
  25. "Pharo Open Source Smalltalk — Success stories". Pharo-project.org.
  26. (March 18, 2007). "Home". seaside.st.
  27. "Zinc HTTP Components". Zn.stfx.eu.
  28. "Home". Moose technology.
  29. "Agile Visualization". Object Profile.
  30. (March 31, 2013). "web: Pharo Consortium". Consortium.pharo.org.
  31. "association: Pharo Association". Association.pharo.org.
  32. "Annonce JOAFE n°1025 de la parution n°20110013 du 26 mars 2011". Journal-officiel.gouv.fr.
  33. "Cog Blog". Mirandabanda.org.
  34. (February 6, 2014). "7-point summary of the Spur memory manager". Clément Béra.

::callout[type=info title="Wikipedia Source"] This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page. ::

programming-languagesobject-oriented-programming-languagesclass-based-programming-languagesdynamically-typed-programming-languagessmalltalk-programming-language-familycross-platform-free-softwarefree-and-open-source-compilersprogramming-languages-created-in-20082008-softwaresoftware-using-the-mit-licensesoftware-using-the-apache-licensearticles-with-example-smalltalk-code