A large, international community of developers worked hard for several months to iron out all problems and to make Pharo 6.0 a great release. Pharo 6.0 saw a large set of changes, infrastructural improvements and others: more than 1400 tickets got closed. Our actions are targeted at building a sound infrastructure on top of which new generation of systems can be built. Remember that Pharo is your open-source system!
- Pharo is now provided in 64-bit version in Linux and macOS and brings even better performance and stability (beware, 64bits version is a new technology and a small amount of tests are still failing)
- A new code changes management system named Epicea for easier reviewing and recovering of your code easily
- Integrated support for Git through an easy-to-use tool for repositories and commits management named
Iceberg
(as a preview for Pharo 6, it will be the default in Pharo 7) The unified foreign function interface
(UnifiedFFI) for interfacing with the outside world is significantly improved- The PharoVM is now part of OpenSmalltalk initiative
- Introduction of object immutability, alternative bytecode sets and block closures independent of outer context
- Pharo can now be bootstrapped from source code managed by Git
- Pharo modularity is improved
- Pharo is faster
- The
Dark Theme
was improved and set as default color theme of Pharo
Over 1400 fixes and enhancements were integrated in this release.
As the complete list of fixed issues is too large to be placed here, you can review it on the FogBugz issue tracker (requires account).
Epicea
provides a code changes managerIceberg
provides a Git repositories managerGTInspector
,GTDebugger
and other tools are now based on FastTable (long lists of items are rendered much faster)GToolkit
,GTools
have been updatedQuality Assistant
has been improved- Interrupt key (
Cmd+/
,Ctrl+.
) has been made more reliable Playground
variables are now visible from debuggerDebugger
temp names mapping is fixed- There is a "Close all debuggers" in the taskbar context menu
- Run To Here in
GTDebugger
- Filtering of the results and critiques in the
MessageBrowser
Dependency Analyzer
has been improvedNautilus
enhancements-
- Splitting of large variable entries in the Variables menu
-
- Deprecated methods are shown with strikethrough emphasis
-
- Abstract classes are shown in italics with a slight color adjustment
- 64-bits support
- Improvement of host platforms management (32-bit/64-bit)
- Improved UnifiedFFI
- The PharoVM is now part of OpenSmalltalk initiative (https://github.com/OpenSmalltalk/opensmalltalk-vm)
- Introduction of object immutability
- Introduction of
FullBlockClosure
which will help for future evolutions of Pharo Ephemerons
support, introduction of the EphemeronRegistry- Support of alternative bytecode sets and introduction of
Sista Encoder
, the encoder for the SistaV1 bytecode set. This will be the base of future Pharo's improvements
- General improvements
haltOnce
is active by default per method. It does not require global turning on (enable haltOnce) and it is managed from the source code area inNautilus
- Execution counter for message nodes in the source code area in
Nautilus
- API for
Metalinks
on AST nodes - Mirror primitives (Those are reflection primitives which access object state without messaging them, see
MirrorPrimitives
class) - Inlined method const can be implemented by
Metalinks
- Dark Theme improvements
- Improvement of theme change while windows are open
- Support of two double quotes inside comments
- Standalone Morphic worlds in separate windows
- StringMorph can now display emphasis underlined (2r100) and strikethrough (2r10000)
- Fix of several memory leaks
- Improvement of working directory structure (introduction of a
pharo-local
directory to include Pharo directories aspackage-cache
) - Better autocategorization of methods
- Introduction of a
FuzzyMatcher
for approximate string matching Glamour
integration inSpec
- Renaming (
Cmd+R
/Ctrl+R
) inNautilus
supports more AST nodes anObject asMethodConst
to cache expressions dynamicallyGlobalIdentifier
for computer identificationNeoUUIDGenerator
replaces the old UUIDGeneratorSTON
was improved and is now used byMonticello FileTree
- Storage of suspended announcements
- Improved
newAnonymousSubclass
- Inheritable process specific variables
- Fuel improvements
- Enablement of
<example>
methods so that they can be executed easily - Support for
<sampleInstance>
- New class and methods API for tags as replacement for categories and protocols
TabMorph
improvements- faster source code fetching from .changes & .sources
- Unification of
Dictionary
APIs (including anOrderedDictionary
) - Package manifests improvements
- Improvement of
RadioButton
groups
Object>>#name
is now deprecated and will be removed in Pharo 7- Tab, TabBar, TabManager, and LockableTab renamed with a Morph postfix
- Better system modularization
- Ability for the system to be fully bootstrapped from source code
- Turn off catalog search in
Spotter
by default (This improves the stability of Pharo when used with poor Internet connections) - Removal of
Chroma-CubeHelix
andTxWorkspace
- Rename of
Pragma>>#selector
toPragma>>#methodSelector
- Improvement of icons management (
#iconNmaed:
introduced in order to replace DNU-based icons) - Limit use of
#asClass
in order to rely on an environment - It is now possible to give a rewrite rule when deprecating a method to automatically rewrite code with deprecation (
#deprecated:transformWith:
) - Deprecation of the following:
- Object>>#name
- Object>>#confirm:orCancel:
- Object>>#ifNil:ifNotNilDo:
- Object>>#ifNotNilDo:
- Object>>#ifNotNilDo:ifNil:
- Behavior>>#layout
- Behavior>>#layout:
- BitBlt class>>#current
- BlockCannotReturn>>#deadHome
- BlockCannotReturn>>#deadHome:
- Collection>>#groupBy:having:
- Collection>>#ifEmpty:ifNotEmptyDo:
- Collection>>#ifNotEmptyDo:
- Collection>>#ifNotEmptyDo:ifEmpty:
- CompiledMethod>>#getSource
- DebugAction>>#keyText:
- DiskStore>>#basicCreationTime:
- DiskStore>>#basicModificationTime:
- DiskStore>>#basicSize:
- FilePluginPrims>>#size:
- FileSystem>>#creationTime:
- FileSystem>>#size:
- FileSystemStore>>#basicCreationTime:
- FileSystemStore>>#basicSize:
- FileSystemStore>>#creationTime:
- FileSystemStore>>#modificationTime:
- FileSystemStore>>#size:
- HashedCollection>>#someElement
- IconStyler>>#iconProvider
- Integer>>#asBytesDescription
- MIMEDocument>>#type
- MemoryStore>>#basicCreationTime:
- MemoryStore>>#basicModificationTime:
- MemoryStore>>#basicSize:
- Point>>#scaleTo:
- Pragma>>#method:
- Pragma>>#selector
- SequenceableCollection>>#copyLast:
- SmalltalkImage>>#evaluate:
- TBehavior>>#propertyValueAt:
- TBehavior>>#propertyValueAt:ifAbsent:
- TBehavior>>#propertyValueAt:put:
- TestResult>>#correctCount
- some other methods in externally managed packages (get complete list by
SystemNavigation default allMethods select: #isDeprecated
)
RecursionStopper
provides an easy way to check if we are in a recursion and execute code just once in a recursion.- New process specific variable
CurrentExecutionEnvironment
with valueDefaultExecutionEnvironment
by default andTestExecutionEnvironment
during a test run - SUnit improvements: time limit for tests, preventing "forked debuggers"
- New assert extension to compare floats with
closeTo:
- More class comments and documentation
- Support
Server Name Indication
(SNI) inZodiac/SSLPlugin
Zinc/Zodiac
update
We always say Pharo is yours. Is yours because we made it for you, but most important, because is made by the invaluable contributions of our great community (yourself).
More than seventy people directly contributed to Pharo 6.0:
Thank you all for your contribution.
Alberto Bacchelli, Alejandro Infante, Alexandre Bergel, Aliaksei Syrel, Alistair Grant, Andrei Chis, Ben Coman, Bernardo Contreras, Bernhard Pieber, Boris Spasojevic, Christophe Demarey, Clement Bera, Cyril Ferlicot, Dale Henrichs, Damien Cassou, Damien Pollet, Dave Lewis, Denis Kudriashov, Dirk Roeleveld, Eliot Miranda, Esteban Lorenzano, Esteban Maringolo, Evan Donahue, Federico Balaguer, Franck Warlouzet, Glenn Cavarle, Guillermo Polito, Gustavo Santos, Henrik Johansen, Henrik Nergaard, Hilaire Fernandes, Holger Hans, Jan Kurs, Jan van de Sandt, Johan Fabry, Juraj Kubelka, K. K. Subramaniam, Ken Causey, Kris Gybels, Lionel Akue, Luc Fabresse, Lucas Godoy, Marcus Denker, Mariano Martinez Peck, Marion Noirbent, Martin Dias, Max Leske, Maxime Roelandt, Merwan Ouddane, Matteo Bellotto, Miguel Campusano, Milton Mamani, Myroslava Romaniuk, Nicolai Hess, Nicolas Cellier, Nicolas Passerini, Norbert Hartl, Offray Luna, Pablo Tesone, Paul De Bruicker, Pavel Krivanek, Peter Uhnak, Philippe Back, Roger Stebler, Ronie Salgado, Sean DeNigris, Serge Stinckwich, Skip Lentz, Sophie Kaleba, Stefan Reichhart, Stephan Eggermont, Stephane Ducasse, Sven Van Caekenberghe, Thibault Arloing, Thibault Arloing, Thibault Raffaillac, Mitsuhiro Takano, Thierry Goubier, Thomas Heniart, Tommaso Dal Sasso, Torsten Bergmann, Tudor Girba, Udo Schneider, Valentin Ryckewaert, Vincent Blondeau, Werner Kassens, Yuriy Tymchuk
And many many more who contributed indirectly, by reporting bugs, participating in discussion threads, providing feedback, etc., etc., etc.