Monthly Archives: February 2016

Spotter Videos

You always wanted to understand how to get mega hyper productive with Spotter but you never dared to ask a question…

Watch the videos!

And get dazzled ūüôā and change your way of working




I have downloaded a first version of IceCompiler, a small tool who allow run time checks embedding in pharo classes on Smalltalkhub at!/~AlainRastoul/IceCompiler

If some interested pharoers are willing to give me feedback on this package I would greatly appreciate.
This is not an announce but a request for feedback to advanced pharo users , since it is an alpha version with probably killing side effects.
There is no ConfigurationOf as of today(there will be), but there is no dependency and the package loads well in a fresh standard Pharo 5.0.

Checks are written in standard smalltalk methods with design-by-contract style pragmas like

<contract: invariant>
<contract: #ensured appliedTo: #( #add: )>
<contract: #required appliedTo: #( #add: )>

Contract method calls are compiled in specified classes (with subclasses) in order to make bullet-proofing run test phases of Pharo code/image
and to help in hard bug cases.

Before trying this package, please read the comments on smalltalk hub page, because if misused it may break your image, and do not use on standard important classes (Array, String, Dictionary, Collection etc.) … unless you like danger ūüôā

Many thanks in advance



Another Week of Enhancements

17683 but right button (menu) is broken in process browser

17688 speedup RBSentNotImplementedRule

17065 Transcript has no context menu

17684 highlighting broken in message list (senders off / implementors of)
17687 fix: changing class comments does not work

17638 Browsing calls on BoxedFloat64 shows methods with reference to Float in the code

16893 Update STON
17540 Remove an empty protocol in hierarchy unselect the class

17681 Executing code inside process browser not working

17524 Invisible protocol icons

17676 Building Pharo-5.0-Issue-Tracker-Image fails!!

16534 SimulateMouseSpecification broken

17680 SessionManager 1.3

17674 catalog command line installer needs to resume on warning

16020 Syntax Highlighting Rubric: First shows non-highlighted text, then color. Looks slow
17620 WeakFinalizersTest>>#testNewFinalizationSupported (Cleanup needed)

17608 Failing on CI Server: ChunkImportTestCase>>#testImportAClassCategory

17640 Batch deletion of methods raise DNU in some cases

16756 ZnUnknownHttpVersion(Object)>>doesNotUnderstand: #response

17665 HDTestReport reports unexpected passes as successful

17570 Shortcuts to browse code are not available any more in some tools

17584 Broken menu in ChangesBrowsers code pane

17541 PharoVM crash in Moose 6.0 image when hovering mouse pointer over Roassal View
17649 Rename method in class side does not change class side methods in other classes

17648 WeakSet >>#asArray returns wrong result after some objects lifetime is finished

17647 Collection asArray “array variable is shadowed”

17628 OSEnvironment current “an UnixEnvironment” [Windows]
17552 In Linux some shortcuts use alt, some others ctrl

17634 registerToMCAnnouncements has no no senders

17392 FreeType numCharMaps nil causes Array>>basicNew: to fail
16993 Pharo crash if we sort a LinkedList

17593 matching meta with ctrl or command does not work if shortcut definitions contains shift

17116 The same method is duplicated 5 times in the image

17623 Failing test on CI: AllocationTest>#testOutOfMemorySignal

17643 Evaluating variables while debugging may yield wrong values

17639 The example for SpecPreDebugWindow no longer works
17619 Failing test on CI: CompiledMethodTest>>#testComparison

17625 The immediateSubclass… and variableSubclass method need comments

17605 Autofix raises DNU in QualityAssistant
17602 duplicated UI processes while running tests from Nautilus

17630 CompiledMethodTest >> #testSelector asks for Author when run

17599 Refectory change method added diff does not take into account class side methods
17604 Skip testNoOverlappingCodeEditorKeyBindings
17445 Upload Simple Test Cases for String

17509 Color should handle its naming

17598 DelayExperimentalSpinScheduler should be the default delay scheduler

17113 Context menu in SyntaxErrorDebugger broken

17558 Update Rubric: In Linux some shortcuts use alt, some others ctrl

17561 Add a release test to test the presence of critical classes in startup list

17175 time profiler context menu shows deprecation warning

17519 Fix test for no package information for class side trait methods

17564 atomic pointers needs to be rolled as pointers when needed too

17573 QualityAssistant v2.3.4

16866 DiffMorph with pretty print enabled wrongly shows diff markers for unformatted text
17418 new breakpoint does not work on certain conditions

15839 class rename does not show changes that will be applied

17557 Update DependencyAnalyzer: In Linux some shortcuts use alt, some others ctrl

17569 Context menu in method pane is broken if no method is selected

17555 Update FastTable: In Linux some shortcuts use alt, some others ctrl

17565 remove String>>#adaptToNumber:andSend:

17281 Failing test: BlockClosureTest>>#testTallyInstructions

17553 missing classes in startup list

17551 random fail on RubTextComposer>>recomposeFrom:to:delta:

17549 ChangesLog should subscribe weakly to SystemAnnouncer

17538 Remove dead SystemAnnouncer subscriptions

16814 Critics Browser seriously broken

17545 StringMorph background part2
17489 remove testSmoke

17463 NautilusUI>>#updatePackages MessageNotUnderstood: RPackage>>item

17459 #isInterruptedContextPostMortem should not be used

17531 add #noteCompilationOfMethod:meta:

13209 StringMorph background

Pharo on Travis-CI

Hello everyone,
I haven’t had the time to officially announce it here, but some of you have already used or
contributed to this:
Pharo is officially supported on¬†Travis-CI! This means you can finally set “language: smalltalk” in
your .travis.yml in order to run tests for your GitHub-hosted Pharo projects on Travis-CI.
Peter has put together a blog post [1] that should get you started. For more information see [2].
If you have any bug reports or feature requests, please file an issue at [3].
Many thanks to Dale, Peter, Esteban and everyone else who contributed to smalltalkCI so far!
Happy testing!
Fabio (HPI student and smalltalkCI maintainer)

New Cog VMs available 


Hi All,
¬† ¬† first of all, apologies for the long wait for new VMs.¬† I know there are bugs that these VMs address and that it’s been 5 months since VMs were last made is something I regret.¬† The wait was due to my developing the 64-bit Spur Cog JIT VM which required surgery not just to the Cogit but also to Slang.¬† I beg your forgiveness.
¬† ¬†Secondly, the Mac VMs are much changed, using John McIntosh’s Cocoa support libraries.¬† The old Carbon UI VMs are history.¬† That means that Cog supports building on contemporary Mac OS releases.¬† These VMs were built on 10.9; I like the 3D look much more than the 10.10 one ;-).¬† The VMs are also signed, so installing them should be easier.
  Thirdly, these VMs include 64-bit JIT support.  There is an updated squeak trunk image at for you to try.  As yet the 64-bit Vms do not include an FFI plugin.  I hope to rectify this soon.
   Finally I have included Pharo Mac VMs, not to displace the official Pharo VMs, but to test my build process.  I hope that in very few months the svn repository will be moed to githup and that Esteban and I will build official VMs from the same repository.
CogVM binaries as per VMMaker.oscog-eem.1679/r3602
Include 64-bit Spur VMs for Mac OS X x64 and Linux x64. N.B. As yet these VMs
lack FFI support.
Move all Mac OS X VMs to the Cocoa libraries.  Minimum supported version should
be 10.6.x.  The Mac OS X VMs are signed and so should install properly without
having to disable the launch security checks.
Bug Fixes and Improvements:
Add vmParameter 20 to answer the utc microseconds at startup.
Remove the atCache from the CoInterpreter.¬† It’s of little benefit given the
ceSend: et al need to add looked up methods to the method cache, otherwise
methods only found through machine code sends will not be jitted.
Fix slip in maybeSelectorOfMethod: which will improve back traces
including methods containing pragmas (including primitives).
Modify secret primtiive 161, primitiveSetIdentityHash so that with 0 args it
answers whether an object has an identity hash.  This is vacuously true for V3,
but is meaningful in Spur.
Fix /horrible/ bug with primitive error codes and fixups.  The adjustment of the
initialPC to skip the primitive and error code, if any, was done after
generating fixups for backward branches, and hence these branches were bogus.
Object>>shallowCopy in Spur is subject to this, but amazingly enough it has not
surfaced before now.  Fix this by adjusting the initialPC before scanMethod
scans for fixups.
Fix bug in Spur machine-code at:put: on 32-bit bits objects; method failed to
fail for negative values.
Fill unused portions of methods with the stop instruction, not nop.
Explicitly initialize the code zone with stops. Explicitly clear the
reclaimed portion of the method zone after a compaction.
Include the reclaimed portion of the method zone in the I-cache flush
after a compaction: no point in leaving it in cache since it isn’t a
valid call/jump target.
Maintain the survivor count on scavenge.
Fix start up of images containing >= 16 segments.  The old code assumed
numSegments < 16 and failed to grow the segment records, resulting in objects
in segments greater than 15 to not be swizzled, and a resulting crash.
Spur Cogit: Support CompiledMethod indexing in genPrimitiveAt[Put].  Hence fix
the regression in at:[put:] whereby in Spur one could access the literals part
of a method as bytes.
Add a machine-code primitive for objectAt: to provide fast literal and header
access on Spur.
Add 16-bit indexability to Spur.  Generate slimmer code for
positive32BitValueOf: on 64-bit Spur.
Fix a bug with out-of-place two-way become, which got the hash copy the wrong
way round.  By default, the hash stays with the reference in two-way become.
Fix what appears to be a compiler bug with in-place two-way-become by treating
the headers to be swapped so that remembered flags are swapped and hash bits
are swapped if required. This fixes a bug with in-place two-way become of
objects that are the same size on the heap.¬† One object’s contents would not
be updated correctly.
Implement ephemeron queue primitive.  Add an image flag that controls the
finalization support (StackInterpreter instVar newFinalization).  If unset,
finalization is as currently expected; WeakArray finalizes all WeakArrays in
its registries on each finalization (which does not scale!).  If set, then both
fired ephemerons and bereaved weak arrays are added to the finalization queue
and the finalization semaphore is signalled.  In this regime the image is
expected to send mourn to each element of the queue, and weak arrays will send
themselves finalize in mourn, side-stepping the finalizeValues steps and
rendering WeakArray’s FinalizationDependents and WeakRegistry obsolete.
The bit is set via
    Smalltalk vmParameterAt: 48
              put: ((Smalltalk vmParameterAt: 48) bitOr: 64).
Fix bad regression in type inference from VMMaker.oscog-eem.1587.
returnTypeForSend:in: can only default return types to sqInt for unknown
selectors.  The rewrite in VMMaker.oscog-eem.1587 inadvertently defaulted the
return type of known methods whose return type was yet to be determined to
sqInt.  The fix is to only default to sqInt if there is no known method for the
given selector.  This fixes, for instance, the weird flipping of the type of
32-bit Spur’s headerWhileForwardingOf:,which should always be #sqLong.
Fix bad bug in type inferrence.  Avoid computing variable and return types
prematurely i.e. don’t derive types from as-yet-untyped methods.
Fix baaaad bug in node:typeCompatibleWith:inliningInto:in: which was looking
up the type of the formal parameter in inlining in the target method, not the
method being inlined!
Fix bug in MNU for cogged dynamic super sends – should start looking for
#doesNotUnderstand: in the superclass not the receiver class. Unify MNU
lookup between absent and present receiver sends as a result.
Further fix outer send MNU by not confusing lkupClass and lkupClassTag.
Push setting lkupClassTag down to clarify it is for new cache entries.
Fix the FilePlugin’s unnecessary fullGC on Spur.
Include the file sync prim in the FilePrims plugin.
– ExternalAddress now are taken correctly (nor as ByteArray or Alien, because
  they are different beasts).
– allow pushing of pointers to any type (into a ByteArray, an ExternalAddress
  or an Alien), to allow passing parameters style int*, float*, etc.
– allow reading in memory to allow read chunks of ByteArray
Added ThreadedFFIPlugin>>#primitiveLoadSymbolFromModule (copy and adapt from
Fix coercion problems on FFI plugin (IA32 & ARM)
– character were not correctly mapped back
– floats were not being well checked
– external addressed needs to be treated as aliens for the purpose of coercing
  them as pointers (bad regression by Eliot)
Alien Plugins:
Fix missing primitive failure for Alien typeAt: 0 [put:].
Add word accessors to Alien.
best, Eliot


Hi All,

¬† ¬†we have a serious misunderstanding in current versions of Squeak’s and Pharo’s Process>>isSuspended.
Squeak’s version reads

^myList isNil
Pharo’s reads
^myList isNil or: [ myList isEmpty ]
Process’s myList holds the list a process is on when it is not running.¬† There is only one running process at any one time, Processor activeProcess.¬† The active process’s myList is always nil, so Squeak’s and Pharo’s are both wrong for the active process.
Processor activeProcess isSuspended => true (!!!)
A process may be runnable, but not running (which follows form there being only one running process, the active process, at any one time).  If it is runnable but not running its list is one of the runnable process lists in the scheduler, e.g.
Processor waitingProcessesAt: Processor activePriority => a LinkedList()
Processor waitingProcessesAt: Processor lowestPriority => a LinkedList(a Process in ProcessorScheduler class>>idleProcess)
Here’s a couple of illustrative examples:
[Semaphore new wait] fork suspendingList
=> a LinkedList(a Process in [] in BlockClosure>>newProcess)
([Semaphore new wait] forkAt: Processor activePriority + 1) suspendingList
=> a Semaphore(a Process in [] in UndefinedObject>>DoIt)
In the first example above the new process isn’t running yet.¬† It’s runnable but hasn’t got a chance to run because the active process that created it is still running.¬† So the process’s list is Processor waitingProcessesAt: Processor activePriority.¬† In the second example the process has got to run, because, having higher priority, it has preempted the active process that created it.¬† So it suspends waiting on the semaphore.
So in fact, isSuspended should read something like
| myRunList |
myRunList := Processor waitingProcessesAt: priority.
^myList notNil and: [myList ~~ myRunList]
except that this isn’t atomic. But it isn’t the complete nonsense we have at the moment. Here’s an atomic version that answers the truth at the point that the question was asked:
| myPriority |
myPriority := priority.
ifNil: [false]
ifNotNil: [:list| list ~~ (Processor waitingProcessesAt: myPriority)]
We need tests like
self deny: Processor activeProcess isSuspended.

self deny: ([Semaphore new wait] forkAt: Processor activePriority) isSuspended.

self assert: ([Semaphore new wait] forkAt: Processor activePriority + 1) isSuspended.

FFI related musings

While musing on FFI interfacing issues like C++ name mangling, I found
an interesting article "Beautiful Native Libraries" about the other
side of the fence of designing a nice library interface. I learnt some
things maybe of interest to others - perhaps for pushing upstream into
external libraries to ease their use by our FFI.
Some of the ideas seem applicable to maybe one day helping the VM be
embeddable in other programs.

Also, for the occasional idea of in-Image parsing of C include files,
a link to a basic algorithm for macro expansion.

And while I haven't read the following, it was interesting to skim
"Calling conventions for different C++ compilers and operating

cheers -ben

The Pharo Unicode Project


In Pharo we can deal with and represent any Unicode character and string, but there are still some important pieces of functionality missing.

The goal of the Pharo Unicode project is to gradually improve and expand Unicode support in Pharo. We started in December last year to lay the foundation and are now ready to go public with what we built.

The first delivery is an implementation of Unicode Normalization, together with an implementation of the Unicode Character Database.

Please read the following article for more information (the appendix explains how to get the code).

  An Implementation of Unicode Normalisation

  Streaming NFC, NFD, NFKC & NFKD, normalization QC and normalization preserving concatenation.

The development branch also contains a work in progress implementation of Unicode Collation.

Much work remains to be done and contributions are more than welcome.

Sven & Henrik

BitTalk needs contributors

Jordi Delgado from Catalunya developed a torrent in pharo and here are some information… If you want to help contact Jordi.


location: ‘’
user: ”
password: ”

I didn’t make it public because, after looking in detail to the code, I
think it needs a non-trivial effort to get improved.

It works, I mean, you can share files with it. For example, after
installing, open a workspace and try:

| locationString metainfoString torrent localPeer |
locationString:=’/home/n00ne/tmp’. “torrent file directory”
“torrent file”
torrent:= BtTorrent metainfoFileString: metainfoString locationString:
localPeer:= BtLocalPeer start.
localPeer addTorrent: torrent.
torrent start.
[torrent inspect] forkAt: Processor userBackgroundPriority .

PointerExplorer new openExplorerFor: ((BtLocalPeer allInstances) at: 1)

Jordi Delgado


More Enhancements

17526 growMemoryByAtLeast: duplicated

17530 fix testDangerousClassesConditions

17242 String>>compare:caseSensitive seems to be failing for extended charset comparisons
17521 recategorizing uncategorised method

17522 Failing test: ReleaseTest>>#testInstalledMethodsWithIncorrectTrailerKind

17479 Interval class comment mixes step/stop when explaining Instance Variables
17366 wrong TempsNamesQCompress method trailer ?

17406 Renaming a class using the class menu “rename” option allows for non-capitalized class name
17516 add #isFromSharedPool to OCLItteralVariable

17495 Decompiler cant decompile Object>>#instVarAt: due to error code

17508 Deprecate Unused Morph methods: submorphNamed: and submorphNamed: aName ifNone: aBlock
17515 fix minimal Pharo shrinking build

17512 Spec should use FastTable

17501 ProcessTest>>testHighPriorityOverridesWaitTime intermittent failures

17035 The smallSaveIcon is the same as the smallSaveAsIcon

17513 ThemeIcons>>#downloadFromUrl not working

17500 Implement class creation methods for new layouts

17491 find selector shows syntax error debugger
16735 Replace Startup/Shutdown list with SessionManager

17490 Command Line Handler test runner should print a small stack for failures and errors

17496 add table for all defined method selectors and use it in code completion and syntax highlighting

17466 testVisitXMLParserConfigurationWithVersion101 failing

17438 New Rubric Configuration

17454 QualityAssistant v2.3.3
17474 adapt Athens to UnifiedFFI 0.11 (pointer arity logic)

17421 RubTextMethodLink and RubTextClassLink Leaks (TextStyling related)

17442 Improve Morph>>#flash

17348 Enhance shortcut learnability

17452 UIManager has a test method …

17022 Return sequence not always emitted
17296 Remove Delay>>otherwise:

17453 add #genForRBArgumentNode
17423 PopupChoiceDialogWindow keyboard navigation

17435 ClassOrganisation>>#changeFromString: MNU for empty change
17301 Morph>>#drawOnAthensCanvas: should only fill innerBounds

17384 RBNulllFormater>>#format: should not return nil

17404 ExternalBrowser can not show meta class definition

17443 RubTextAreaExamples>>#show:while: should not use #displayWorldSafely

17457 Change Growl setting name to PopupNotifier
17444 SVColorSelectorMorph should not use (World displayWorldSafely)

17408 The generic stack debugger defines double meaning for some keybindings when editing code

17335 We should add a #ffiSizeOf:

17267 fix senders of #compactClassesArray

17077 ReleaseTest testMethodsWithUnboundGlobals fails for some slotexamples

17425 unload BaselineOfFFINB

17427 deprecated Form class>>#unload

17415 SimpleButtonMorph lacks #themeChanged

17357 Lost instance variables (AthensCairoPatternSurfacePaint)

17422 Rename FFI-NB to UnifiedFFI

17419 Rename AthensCairoCanvas setAlpha: to drawWithAlpha:

17416 Integrate GTools version 3.9