Pharo is an
open source
Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
, cross-platform implementation of the classic
Smalltalk
Smalltalk is an object-oriented, dynamically typed reflective programming language. It was designed and created in part for educational use, specifically for constructionist learning, at the Learning Research Group (LRG) of Xerox PARC by Alan Ka ...
-80 programming language and runtime.
It's based on the
OpenSmalltalk virtual machine called Cog (VM),
which evaluates a dynamic,
reflective, and
object-oriented programming language with a syntax closely resembling
Smalltalk-80.
Pharo is shipped with a source code compiled into a ''system image'' that contains all software necessary to run Pharo system. 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.
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" () 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
* Optional fusion of developed program and
development environment
*Live object inspection
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

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
* literals for byte arrays that can be composed only of integer numbers in the range from 0 to 255
# 2 3 4/syntaxhighlight>
* 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
* 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 use
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. Ducass
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
and the Pharo association for physical person
Use of Pharo
Companies and consultants
Some companies use Pharo for their development projects. In particular, they use:
* Seaside (software), Seaside for dynamic web development
* Zinc for server architectures
* Moose to analyse data and software from all programming languages
* Graphic libraries for evolved user interfaces
* Roassal to visualize data
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 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. 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.
See also
* Amber Smalltalk
Amber Smalltalk, formerly named Jtalk, is an implementation of the programming language Smalltalk-80, that runs on the JavaScript runtime of a web browser. It is designed to enable client-side development using Smalltalk.
* GNU Smalltalk
* Squeak
* VisualWorks
References
External links
*
{{Smalltalk programming language
Class-based programming languages
Dynamically typed programming languages
Smalltalk programming language family
Software using the MIT license