Monthly Archives: May 2016

Pharo 50 Released

Dear World,
The time has come for Pharo 5.0
This is our most significant release yet. Here are some highlights:
– The PharoVM is now based on Spur, the new memory management, and it brings with it a 35% speedup!
– A new unified foreign function interface (UFFI) replaced NativeBoost to provide a strong Spur-compatible framework for interfacing with the outside world.
– The Glamorous Toolkit now includes the GTDebugger to offer a moldable infrastructure that allows the developer to customize the debugger deeply.
– The underlying Reflectivity mechanism has reached maturity with multiple pieces coming together to empower developers to instrument their own systems. For example, we now have breakpoints implemented as just a simple extension of this mechanism.
– QualityAssistant is now part of the image to provide live feedback during development.
These are just the more prominent highlights, but the details are just as important. We have closed 2446 issues in Pharo 5. Take a moment to go through a more detailed recount of the progress:
While the technical improvements are significant, just think of getting 30% faster out-of-the-box, still the most impressive fact is that the new code that got in the main Pharo 5.0 image was contributed by 100 people. Together we have touched 43% of the classes, and 20% of the methods. The following visualization rendered with Roassal in Pharo 5.0 is dedicated to this effort. The picture shows the touched classes and packages in gray, the authors and the links to the changed classes in red, and,  using an automatically generated visual id, you can spot authors that have worked on similar projects.
Pharo is more than code. It is an exciting project involving energetic people. We thank all the contributors of this release:
Abdelghani Alidra,  Clara Allende,  David Allouche,  Nicolas Anquetil,  Thibault Arloing,  Jean Baptiste Arnaud,  Mangesh Bendre,  Clement Bera,  Alexandre Bergel,  Torsten Bergmann,  Usman Bhatti,  Vincent Blondeau,  Johan Brichau,  Camillo Bruni,  Miguel Campusano, Damien Cassou,  Nicolas Cellier,  Danny Chan,  Andrei Chis,  Christopher Coat,  Ben Coman,  Bernardo Contreras,  Gabriel Omar Cotelli,  Tommaso Dal Sasso,  Paul De Bruicker,  Sean De Nigris,  Christophe Demarey,  Simon Denier,  Marcus Denker,  Martin Dias,  John Dougan,  Stephane Ducasse,  Stephan Eggermont,  Johan Fabry,  Sergio Fedi,  Cyril Ferlicot,  Holger Hans Peter Freyther,  Joshua Gargus,  Tudor Girba,  Thierry Goubier,  Kris Gybels,  Norbert Hartl,  Thomas Heniart,  Dale Henrichs,  Nicolai Hess,  Alejandro Infante,  Henrik Johansen, Goran Krampe,  Pavel Krivanek,  Juraj Kubelka,  Denis Kudriashov,  Matthieu Lacaton, Laurent Laffont,  Kevin Lanvin,  Jannik Laval,  Alexander Lazarević, Skip Lentz,  Max Leske,  Dave Lewis, Esteban Lorenzano,  Sheridan Mahoney,  Mariano Martinez Peck, Max Mattone,  John McIntosh,  Rene Meusel,  Eliot Miranda,  Henrik Nergaard,  Marion Noirbent,  Merwan Ouddane,  Nick Papoulias,  Nicolas Passerini,  Alain Plantec,  Guillermo Polito,  Damien Pollet,  Baptiste Quide,  Andreas Raab (RIP),  Alain Rastoul,  Stefan Reichhart,  Lukas Renggli,  Mark Rizun,  Michael Rueger,  Valentin Ryckewaert,  Ronie Salgado,  Udo Schneider,  Boris Spasojevic,  Igor Stasenko,  Roger Stebler,  Serge Stinckwich,  Aliaksei Syrel,  Camille Teruel,  Pablo Tesone,  Yuriy Tymchuk,  Peter Uhnak,  Masashi Umezawa,  Dion Stewart, Sven Van Caekenberghe,  Jan Van De Sandt,  Benjamin Van Ryseghem,  Toon Verwaest,  Franck Warlouzet.
(If you contributed with Pharo 5.0 development in any way and we missed your name, please send us a mail and we will add you).
The Pharo Team

More Enhancements (two)

18023 add a WelcomeHelp page to open a Help Browser on it when starting

18153 Failing on CI on Windows: SocketTest.testUDPBroadcastError (from Network-Tests)

18188 localHostName is not guarded against uninitialized network
18178 Some methods comments in FileReference

18174 Delete the second ” of the template method break the image

18168 Add Tooltip to describe Rubric options
18161 Skip the two failing test for Pharo5

18159 put on Shortcut reminder
18156 restore all notifications for SystemAnnouncer

18076 Locale broken
18139 getenv() call on Ubuntu 14.04 (32 bit) fails in one-click image
18150 AST-FFI-Pharo50Compatibility-EstebanLorenzano.1.mcz missing
18152 Failing on CI on Windows only: ZnHTTPSTests.testGetPharoVersion (from Zinc-Zodiac)

18154 revert change done in 18137

17478 Update pharo kernel dependency descriptions

18136 Network related tests failing only on Windows on CI
18139 getenv() call on Ubuntu 14.04 (32 bit) fails in one-click image
18133 GTInspector subscript out of bounds in raw tab

18147 pvtDestroyHandle still presenting problems

18140 StartupPreferencesLoader does not guard enough against errors

18142 AbstracBinaryFileStream DNU #fuelNextInto:
18137 Network test failing only on MAC on CI: UDPSocketEchoTest.testEcho

18139 getenv() call on Ubuntu 14.04 (32 bit) fails in one-click image

18125 Icon display problem in versioner remotes manager UI
18138 Skip test #testErrorCodeNotFound

18068 Error: aContext not in proccess chain

18135 On issue tracker: GlobalIdentifierWithFuel failing now

18134 BIConfigurableFormatterTest is empty and useless
18107 Failing on windows: GlobalIdentifierWithFuel>>#testBackwardCompatibility4

18119 Failing again: BehaviorTest>>>#testBehaviorRespectsPolymorphismWithTraitBehavior

18131 File>>readStreamDo: and #writeStreamDo: should answer block value

18121 Hundreds of references to undeclared variables in Fuel
18081 Added a comment in File primitives so the user can know what the primitive does.

18124 can not add instance variables in nautilus class definition pane
18118 Author reset should not create new instance

18122 QA accessing undeclared var
18108 reloading of Author settings rises prompt window
18114 Incorrect handling of events when raising windows to the front

18117 Fuel fix for class substitutions

18115 QA v2.6.6
18061 Komitter is referring to old versions

17963 FFICalloutAPI class ignores context instance variable

16961 Unable to accept changes in SyntaxErrorDebugger -> DNU: receiver of asSymbol is nil

18111 SortHierarchically >> buildHierarchyForClasses: speedup

18107 Failing on windows: GlobalIdentifierWithFuel>>#testBackwardCompatibility4

18109 EyeInspector has correct syntax highlighting

18110 Support added for using an OpenGL context with multiples windows.

18025 Trait Polymorphism test failing again…

More enhancements

18103 Update UFFI to 0.19.1
18098 ShoreLine Reporter version 0.2.3
18088 Update GTInspector 3.10

17618 Failing test: ReleaseTest>>#testInstalledMethodsWithIncorrectTrailerKind

18087 Update Catalog 0.13

18096 haltonce in formatter

18080 New Help about adding World Menu Items

18091 Comment some existing settings

18089 Update Rubric 2.19.3

18090 Update Versionner 2.13.12

18070 Syntax error: Cannot store into

18082 Shorter help items

18065 BIPrettyPrinterContext undeclared var in #initialize

18062 Infinite cycle when saving a method with a pragma

18058 fix icons in Versionner and sort dependencies

18075 SHRBTextStyler workspace mode doesnt work

18063 update to UnifiedFFI 0.19
18067 NEC raises DNU when trying to guess “super” in TextAreas not bound to a class/Method

18040 If the FreeType plugin is not in the VM, latest Pharo 5 crashes at start-up.
18057 Two tests for OSWindow now failing on Linux and Win
18052 Reformatting a method should never break the code

18057 Two tests for OSWindow now failing on Linux and Win

17618 Failing test: ReleaseTest>>#testInstalledMethodsWithIncorrectTrailerKind

18060 broken context menu in the Spotter text edit box
18051 fix bug in depedency analyzer reverse analysis

18038 Missing allIconNames

18056 Sync OSWindow with upstream for Pharo5
16126 Removing class from Nautilus with a shortcut doesnt check for references (has conflicting shortcuts definitions)

18041 “Do it” needs to be the first option on the code context menu

18034 testIsPrime is broken with modern VM made with LargeIntegersPlugin v2.0

18050 DNU NautilusUI >>#upArrow:

18035 GZipReadStream>>unzip:to:
18027 add reset message to MCCacheRepository

18034 testIsPrime is broken with modern VM made with LargeIntegersPlugin v2.0

Pharo Consortium New Bronze Member: feenk

The Pharo Consortium is very happy to announce that feenk 
has joined the Consortium as a Bronze Member.

- feenk:
- Pharo Consortium:

The goal of the Pharo Consortium is to allow companies and institutions to
support the ongoing development and future of Pharo.

Individuals can support Pharo via the Pharo Association:


Remember that due to the 2016 campaign for extending the reach of the consortium, the Pharo Consortium receives from a generous external fund an extra amount corresponding to one year fee for any new members or the difference for any upgrading members.

More details about the campaign can be found at:

Astares Distribution :)


I summarized some of the goodies that I wrote like
 - DesktopManager
 - QuickAccess
 - HubCap
 - WebBrowser
 - MessageFlowBrowser
 - ...

into an own kind of Pharo distribution that I call AstaresDistribution.
So if you already use these goodies it is easier to load quickly into a fresh image.

You can load directly from Catalog or by opening Spooter, enter "Astares" 
and hit ENTER to load.

Alternatively you can download a prebuilt image using PharoLauncher from
"Pharo Contributions Jenkins" -> "AstaresDistribution" or directly from [1].

Screenshot attached.

Have fun


From Configs to Baselines

I got tired of manually converting Configs into Baselines, so I wrote a
little script. You pass it the selector of a #baselineXyz: method, and it
converts it (i.e. changes the pragma, removes the blessing and repo, etc)
Hopefully you will find it useful. Cross posting to Metcello list...

ConfigurationOf>>#createBaselineFrom: selector

	| projectName baselineName baseline methodTree commonBlockBody repoSetter |
	"Create new class"
	projectName := self name allButFirst: self superclass name size.
	baselineName := 'BaselineOf', projectName.
	baseline := BaselineOf subclass: baselineName asSymbol
	instanceVariableNames: ''
	classVariableNames: ''
	category: baselineName.
	"Convert baseline##: method"
	methodTree := (self methodNamed: selector) parseTree.
	methodTree selector: #baseline:.
	methodTree pragmas at: 1 put: (RBPragmaNode selector: #baseline arguments:
	commonBlockBody := methodTree statements first arguments last body.
	repoSetter := commonBlockBody statements detect: [ :e | e selector =
#repository: ].
	commonBlockBody removeNode: repoSetter.
	"Compile baseline method"
	baseline compile: methodTree newSource classified: 'baseline'