Pharo

From Wikipedia, the free encyclopedia

Template:Short description Script error: No such module "other uses". Script error: No such module "Distinguish". Template:DMCA

Page Module:Infobox/styles.css has no content.

Pharo
Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found.
Pharo logo with lighthouse
Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found.
Paradigmobject-oriented
FamilySmalltalk: Squeak
DeveloperPharo community
First appearedMarch 2008; 18 years ago (2008-03)
Template:Infobox software/simple
Typing disciplinedynamic
Implementation languageSmalltalk
PlatformARM, IA-32, x86-64
OSWindows, Linux, macOS, others
LicenseMIT, partly Apache 2.0[1]
Websitepharo.org
Influenced by
Smalltalk (Squeak)

Pharo is a cross-platform implementation of the classic Smalltalk-80 programming language and runtime system.[2] It is based on the OpenSmalltalk virtual machine (VM) named Cog,[3][4][5][6]Template:Rp 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.[6]Template:R/superscript 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.[7][2][6][6]Template:R/superscript[8]

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" (Script error: No such module "IPA".) 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.[how?]

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 during 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 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

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 [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 version Release date Major features
March 16, 2008[9] Fork of Squeak environment
1.0 April 15, 2010 real closures, EToys and MVC removed
1.1 July 26, 2010 Cog JIT VM, Settings framework
1.2 March 29, 2011 new Finder, Recent changes tool, improved Help, better themes
1.3 August 2011 Zinc, headless images
1.4 April 2012[10] Ring metamodel, better code simulator
2.0 March 18, 2013[11] browser improvements, QA tools, Fuel serializer, better files API
3.0 April 2014[12] new modular compiler (Opal) and debugger, continuations
4.0 April 2015[13] GTools, slots
5.0 May 2016[14] Spur VM, UFFI, improved reflectivity
6.0 6 June 2017[15] 64-bit and Git support
6.1 24 July 2017[16] improved Git support
7.0 22 January 2019[17] bootstrapping, new code browser (Calypso), stateful traits
8.0 20 January 2020[18] improved support of Git, testing, refactoring and Windows
9.0 15 July 2021[19] GTK3 support, object-centric debugger and inspector, refactorings, official ARM VMs
10.0 5 April 2022[20] Cleanups, modularization, many rewritten and improved tools
11.0 11 May 2023[21] Ephemerons, SIMD, more efficient closures, improved tools
12.0 26 May 2024[22] New debug points system, new class definitions, permanent space
Latest version: 13.0Page Template:Version/styles.css has no content. 21 May 2025[23] HDPI support, Zoomable UI, New Process Browser, Organic window manager, Async IO using epoll on unixes
Latest version: 13.1Page Template:Version/styles.css has no content. 26 June 2025[24] Improvements merged since version 13.0

Use of Pharo

Companies and consultants

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

The Pharo consortium[30] was created for companies wishing to support the Pharo project. The Pharo association[31] was created in 2011[32] 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.[33] 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.[34]

See also

Lua error in mw.title.lua at line 404: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

References

Page Template:Reflist/styles.css has no content.

  1. ^ Pharo license information
  2. ^ a b Page Module:Citation/CS1/styles.css has no content.Black, Andrew P.; Ducasse, Stéphane; Nierstrasz, Oscar; Pollet, Damien; Cassou, Damien; Denker, Marcus (October 28, 2009). Pharo by example. Kehrsatz, Switzerland. ISBN 978-3-9523341-4-0. OCLC 957555627.{{cite book}}: CS1 maint: location missing publisher (link)
  3. ^ Page Module:Citation/CS1/styles.css has no content."OpenSmalltalk". opensmalltalk.org. Retrieved November 24, 2021.
  4. ^ Page Module:Citation/CS1/styles.css has no content.OpenSmalltalk/opensmalltalk-vm, OpenSmalltalk, November 23, 2021, retrieved November 24, 2021
  5. ^ Page Module:Citation/CS1/styles.css has no content."Cog Blog: About Cog". Retrieved November 24, 2021.
  6. ^ a b c d Page Module:Citation/CS1/styles.css has no content.Black, Andrew P.; Ducasse, Stéphane; Nierstrasz, Oscar; Pollet, Damien (October 28, 2009). Pharo by Example. Samuel Morello. Lulu.com. ISBN 978-3-9523341-4-0.
  7. ^ Page Module:Citation/CS1/styles.css has no content."DevelopOnTheWeb". developontheweb.co.uk. Retrieved November 24, 2021.
  8. ^ Page Module:Citation/CS1/styles.css has no content."The Rise and Fall of Commercial Smalltalk". www.wirfs-brock.com. Retrieved November 24, 2021.
  9. ^ Page Module:Citation/CS1/styles.css has no content."Pharo got 10 years". Pharo-project.org. May 29, 2018. Retrieved May 31, 2018.
  10. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Release 1.4". Pharo-project.org. April 17, 2012. Archived from the original on March 29, 2014. Retrieved April 5, 2013.
  11. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Release 2.0". Pharo-project.org. March 18, 2013. Archived from the original on March 29, 2014. Retrieved April 5, 2013.
  12. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Release 3.0". pharo.org. April 30, 2014. Archived from the original on August 23, 2017. Retrieved May 1, 2014.
  13. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Release 4.0". pharo.org. April 15, 2015. Archived from the original on August 23, 2017. Retrieved April 16, 2015.
  14. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Release 5.0". pharo.org. May 12, 2016. Archived from the original on December 29, 2017. Retrieved May 13, 2016.
  15. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk - Release 6.0". pharo.org. June 6, 2017. Archived from the original on November 20, 2017. Retrieved June 6, 2017.
  16. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 6.1 released". pharo.org. July 24, 2017. Archived from the original on August 20, 2017. Retrieved August 11, 2017.
  17. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 7.0 released". pharo.org. January 22, 2019. Archived from the original on February 12, 2022. Retrieved January 22, 2019.
  18. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 8.0 Released!". pharo.org. January 20, 2020. Archived from the original on February 12, 2022. Retrieved January 20, 2020.
  19. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 9.0 Released!". pharo.org. July 15, 2021.
  20. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 10.0 Released!". pharo.org. April 5, 2022.
  21. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 11.0 Released!". pharo.org. May 11, 2023.
  22. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 12.0 Released!". pharo.org. May 26, 2024.
  23. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 13.0 Released!". pharo.org. May 21, 2025.
  24. ^ Page Module:Citation/CS1/styles.css has no content."Pharo 13.1 Released!". pharo.org. June 26, 2025.
  25. ^ Page Module:Citation/CS1/styles.css has no content."Pharo Open Source Smalltalk — Success stories" (Press release). Pharo-project.org. Retrieved April 5, 2013.
  26. ^ Page Module:Citation/CS1/styles.css has no content."Home". seaside.st. March 18, 2007. Retrieved April 5, 2013.
  27. ^ Page Module:Citation/CS1/styles.css has no content."Zinc HTTP Components". Zn.stfx.eu. Retrieved April 5, 2013.
  28. ^ Page Module:Citation/CS1/styles.css has no content.Girba, Tudor. "Home". Moose technology. Retrieved April 5, 2013.
  29. ^ Page Module:Citation/CS1/styles.css has no content."Agile Visualization". Object Profile. Retrieved May 31, 2018.{{cite web}}: CS1 maint: deprecated archival service (link)
  30. ^ Page Module:Citation/CS1/styles.css has no content."web: Pharo Consortium". Consortium.pharo.org. March 31, 2013. Retrieved April 5, 2013.
  31. ^ Page Module:Citation/CS1/styles.css has no content.Ducasse, Stephane. "association: Pharo Association". Association.pharo.org. Retrieved April 5, 2013.
  32. ^ Page Module:Citation/CS1/styles.css has no content."Annonce JOAFE n°1025 de la parution n°20110013 du 26 mars 2011". Journal-officiel.gouv.fr. Retrieved May 1, 2022.
  33. ^ Page Module:Citation/CS1/styles.css has no content."Cog Blog". Mirandabanda.org. Retrieved April 5, 2013.
  34. ^ Page Module:Citation/CS1/styles.css has no content."7-point summary of the Spur memory manager". Clément Béra. February 6, 2014. Retrieved April 17, 2015.

Template:Smalltalk programming language