Planet Smalltalk

May 22, 2017

Torsten Bergmann - Beer and Smalltalk meeting

Torsten Bergmann - Berlin Smalltalk meeting

There is a Smalltalk user meetup in Berlin, germany 12th of June. Read more.

Torsten Bergmann - Lawsuit tracker

Torsten Bergmann - Hash ID's for Pharo

A Smalltalk implementation of Ivan Akimov's Hashids to obsfuscate internal ids and references. Read more here

May 21, 2017

Pierce Ng - Seaside and Pharo 5

I just tried loading Seaside into the latest Pharo 6 pre-release image from the Catalog Browser. It loads cleanly. However, the Seaside control panel doesn't start because it uses NewListModel which does not exist in this image:


  self instantiateModels: #(
    listModel NewListModel "<== Exists In Pharo 5, not in Pharo 6"
    textModel TextModel
    toolbarModel WAServerAdapterToolbar).

Ok, how about Pharo 5? Using Pharo 50772, which is currently the latest Pharo 5 image, I loaded Seaside 3.1.5 programmatically after visually inspecting ConfigurationOfSeaside3:

Gofer it 
  smalltalkhubUser: 'Seaside' project: 'Seaside31';
  package: 'ConfigurationOfSeaside3';
(#ConfigurationOfSeaside3 asClass project version: '3.1.5') load.

The load sequence includes messages to String>>#subStrings: which is deprecated. The senders are GRStringTest>>#testSubStrings, JQAjax>>#callback:passengers:, WAAdmin class>>#register:at:in: and WAAdmin class>>#unregister:in:.

Otherwise Seaside 3.1.5 loads cleanly. Test Runner reports 1173 run, 1171 passes and 2 expected failures.

May 19, 2017

Pharo Weekly - Chrome DevTools Protocol and Pharo


I played around with remote controlling Google Chrome from
Pharo using Chrome DevTools Protocol [1] (based on WebSockets).

The video shows an example using latest Pharo 6 on Mac:

Initial Code is on GitHub [2] if someone is interested,
requires OSOSX and Zinc Websockets to be loaded.

Have fun


May 18, 2017

Torsten Bergmann - Chrome DevTools Protocol and Pharo

I played around with remote controlling Google Chrome from Pharo using Chrome DevTools Protocol (based on WebSockets).

The following video shows an example using latest Pharo 6 on Mac:

Initial Code is on GitHub if someone is interested, requires OSOSX and Zinc Websockets to be loaded.

Torsten Bergmann - Pharo Days 2017

May 16, 2017

Cincom Smalltalk - Smalltalk Digest: May Edition

The May Edition of the Cincom Smalltalk Digest.

The post Smalltalk Digest: May Edition appeared first on Cincom Smalltalk.

Torsten Bergmann - German election and Smalltalk

German election results are displayed with an application powered by Gemstone/S Smalltalk. Read more

Marten Feldtmann - Gemstone/S Application Example – HbbTV Playout System

The last two weeks we had two elections here in Germany – one in Schleswig-Holstein and last weekend in Nordrhein-Westfalen in Düsseldorf.

Television Tower next to state parliament in Düsseldorf

As mentioned in an earlier posting we already used Gemstone/S as our database during the election for the broadcaster SWR and we played out results and graphics for an internet based application. The model is defined using PUM, source code is created for Topaz, Sencha ExtJS and Python3.

This weekend we did a similar application for the broadcaster WDR (Westdeutscher Rundfunk), but not for their Internet presence, but for an HbbTV hybrid add-on service during their program on sunday and 14 days later (so its still available via their WDR TV channels).

Persons at the broadcaster were able to enter results via an browser based data-enter application – and the results were stored in Gemstone/S and transferred to the system producing the animated TV graphics. Application as usual – API oriented, browser based.

Input Application written in Sencha ExtJS

The structure of the application was pretty similiar to the one of last autumn – main logic is located in the Gemstone/S database, several independent topaz processes are inserting election results, preparing graphical repesentations of the results and even do an automatic publication of the results without interaction.

The system is managed via a browser based UI (written in Sencha ExtJS), communicating via an API with the database. External applications were otherwise written in Python3.

Management Software written in ExtJS

The system was actually running in parallel on two different systems at some hosters – producing the same results independently.

Current HbbTV at the WDR television broadcaster

The end-user application (running on the TV sets) was written in “low-level” Javascript (WITHOUT any larger libraries like jQuery) to make is runnable on even the most slowest TV set available on the market :-)))

Final Results shown in HbbTV

Voters moving from one party to another

Filed under: Smalltalk Tagged: elections, Gemstone/S, HbbTV, Javascript, PUM, WDR

Smalltalk Jobs - Smalltalk Jobs – 5/16/17

Three jobs in Germany, all of them with pension management firms.

The first two are in Cologne.

The first is with PSVaG they are looking for Smalltalk with complex analysis, and, good team work.

The second is with collogia AG and they want Basis and Visual Works Smalltalk.

The last job is in Berlin and it is with Verka VK which is the largest pension company in Germany.

Good luck with your job hunt!


Filed under: Employment

Cincom Smalltalk - Using Polycephaly/MatriX in Cincom Smalltalk™

A Product Management Mini Survey The purpose of product management mini surveys is to make sure that we communicate, listen and understand customer and user requirements, needs and issues. Polycephaly […]

The post Using Polycephaly/MatriX in Cincom Smalltalk™ appeared first on Cincom Smalltalk.

May 15, 2017

Smalltalk Jobs - Reducing the friction when upgrading: Change Type Filtering for the Package Comparison Tool

Many of you that follow this blog are, or will be involved in projects that require upgrading applications from one version of Smalltalk to a newer one. Those upgrades can often be difficult, particularly when there are multiple versions being skipped.

As part of the Support team at Cincom®, I and my teammates are often called on by our customers to be the “first responders” when large obstacles get in the way during an upgrade.

Based on feedback from our customer’s experiences, I have created enhancements to the Package Comparison tool that I hope will reduce some of the friction involved in upgrading VisualWorks® and ObjectStudio® applications. Please follow the links below for full details about this new Contributed Pacakge.

Introducing Change Type Filtering for the Package Comparison Tool

When loaded, this package adds three Checkboxes to the Package Comparison Tool that allow the user to control what types of comparisons are to be shown or hidden. It is designed to work with ObjectStudio 8.4 or Cincom VisualWorks 7.9 and above. When any of the new options are turned on (checked), the comparison view will be updated so that those types of comparisons are no longer shown. The hidden comparisons can be shown again by turning off any of the options (unchecking a checked option).

A video demonstrating the Contributed package is also Available.

Good luck with your upgrades,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Filed under: Employment

Smalltalk Jobs - Smalltalk Jobs – 5/15/17

  • Fremont, CASoftware Engineer 3 (42681) at Lam Research
    • Required Skills:
      • B.S or Masters in Computer Science, Computer Engineering, Electronics or related field
      • Knowledge of embedded software development and design
      • Knowledgeable with communication protocols such: I2C, SPI, UART etc.
      • Excellent knowledge of Object Oriented Software implementation and design e.g.: Design Patterns and Finite State Machines
      • Strong software engineering skills: modular design, data structures and algorithms
      • Experience with Source Control and Development life cycles
      • Analytical approach to root cause analysis
      • Knowledge of multithreading is a must (preemptive thread scheduling)
      • Understanding of Networking/TCPIP
      • Ability to travel within USA, Europe, and Asia (total is less than 10%)
    • Wanted Skills:
      • Background in electronics and electrical engineering
      • Smalltalk experience
      • Experience with real-time operating systems
      • Experience in distributed embedded controls systems
  • Jersey City, NJSmall Talk Developer through VDart
    • Required Skills:
      • Extensive working experience in Smalltalk Language using IBM Visual Age Smalltalk, ObjectStudio, Visual Smalltalk and VisualWorks Smalltalk
      • Experience in developing the Enterprise Applications using Java, Struts, EJB, JDBC, JavaBeans, Java Servlets, JSP, JavaScript, HTML, XML
      • Possess excellent technical, management, leadership, coordination, communication, negotiation and intra personal skills.
  • Minneapolis, MNSmalltalk Technical Lead through Cognizant
    • Required Skills:
      • Candidate should have Minimum 8+ years of Software Programming experiences in Smalltalk technology (Ex: Smalltalk, Sybase)
      • Development and Support experience
      • Tech lead experience
      • Hands on experience of Development / test/ Deploy
      • Experience in working with global teams
      • Fluent English language skills (written, spoken)
    • Wanted Skills:
      • Experience in on-site / off-shore delivery model
      • Experience & knowledge in Commodity Trading, Risk Management (market risk, credit risk), ERP, Financial Services
    • Additional listings: Smalltalk Technical Lead
  • Columbus, OHVisualAge SmallTalk Developer through ReqRoute
    • Required Skills:
      • VisualAge Smalltalk
      • DB2
      • MQ Series
      • At least 4 years in Analysis, Designing, Development , Testing and Supporting of projects involving Smalltalk.
    • Wanted Skills:
      • Experience in handling Application development and Application support projects.
      • Experience of working in Onsite/Offshore model
      • Utility domain or experience working with Billing Applications in Telecom/Finance domain
  • Richland, WABWR Neutronics Reload Design & Analysis Engineer I-III-DES02320 (Multiple positions are available) at AREVA Front End Business Group
    • Required Skills:
      • Engineer II: BS in Nuclear Engineering plus 2-3 years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Engineer III: BS in Nuclear Engineering plus 3-5 years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Engineer IV: BS in Nuclear Engineering or related field plus 5-7 years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Basic experience and capabilities with MICROSOFT Office software products (WORD, EXCEL, etc.).
      • Must have a pro-active approach to problem identification and resolution.
      • Must have ability and attitude to learn a variety of new procedures, processes, and tools, while maintaining various stages of production.
    • Wanted Skills:
      • A wide range of other skills related to the position, including Smalltalk
Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Filed under: Employment Tagged: jobs, Smalltalk, Smalltalk jobs

May 14, 2017

Torsten Bergmann - Pharo booklet collection

Pharo now has a booklet collection. Check it out on the books page.

Pharo Weekly - New booklet: Voyage :)

A new booklet is joining the collection and it is on Voyage the object to document mapper developed by E. Lorenzano.

Available in beta and open to contributors at



Stefan Marr - A 10 Year Journey, Stop 3: Performance, Performance, and Metaprogramming

The third post of this series is about how I started using Truffle and Graal, pretty much 4 years ago. It might be in parts ranty, but I started using it when it was in a very early stage. So, things are a lot better today.

Concurrency needs Performance, usually

As mentioned in the last post, the result of my PhD was an ownership-based metaobject protocol that is meant to enable VMs to support a wide range of different concurrency models. The major problem with the approach, and also my evaluation, was that I couldn’t show that it is practical. The RoarVM is a simple bytecode interpreter, and the literature on compiling and optimizing metaobject protocols talked only about static systems with restrictions that would make the ownership-based MOP impossible. Worse, MOPs were kind of abandoned by the research community, because performance was an issue. Many researchers moved on to aspect-oriented approaches, at least in part, because aspects are applied more targeted and thus, incur less general overhead than MOPs.

A hard problem, abandoned for 20 years, and nobody really interested in it anymore? Pretty much sounds like it’s a stupid idea, right? It probably was, and perhaps still is. But concurrency researchers typically want to show that their techniques are useful for performance critical applications. And, I wanted to do that, too.

How to get a fast VM?

So, I needed a new platform for my research. One option would have been to take the RoarVM all the way. Build a state-of-the-art JIT compiler for it. Another would be to apply the ideas of the RoarVM to the CogVM and improve its JIT compiler. But building another JIT compiler? That’s a huge undertaking. Would probably take a few person years to get anywhere useful. And, while I am curious about compilers, I am not really seeing myself building more than a baseline JIT compiler.

But what other options do we have? RPython is a pretty interesting project. It promises you a meta-tracing JIT compiler for your simple interpreter. Sounds great. But there’s a catch: RPython doesn’t really have a concurrency story compatible with my goals. There’s a bit of experimenting with STM going on, but no decent shared-memory GC.

And then, there was that Truffle thing, colleagues from Oracle Labs kept talking about. It was just released as open source at that point. Truffle promised that simple AST-based interpreters combined with partial evaluation would run applications as fast as Java on a JVM. Sounds great. And, the JVM got everything I need for my research, too.

TruffleSOM: The first steps with a simple Smalltalk on top of Truffle

Truffle it is, I thought, and started implementing the little Smalltalk I had been toying around with in 2007 on top of it. There was already a Java version, simply called SOM. So, how hard could it be?

Well, turns out, much harder than expected. Me being not really a compiler person, I had no intuition for how partial evaluation would work on my interpreter. And as a testament to how hard it was for me, apparently even to this date, I am third in the ranking of who spammed the graal-dev mailing list most.

I suppose there were three important reasons for it. As I mentioned before, I had no intuition of how the partial evaluation really works, and what kind of optimizations I can expect from the systems. The second reason was that I did not really have access to the expertise. Mailing lists are fine but slow. And people need to be willing to take the time to answer. So, during my endeavor of building a fast Smalltalk, the most helpful conversations were actually in person at conferences with people from the Truffle team, or when I actually got the chance to visit them in Linz. And the third reason, which is fixed by now, was the overall stability of the system. To me it was very surprising that I ran into many bugs in Truffle and the Graal compiler. I could somehow not really believe that the Truffle team didn’t encounter those issues with their JavaScript and Ruby implementations. But as it turns out, each new language implementation does things somewhat different and the languages are just different enough to trigger new edge cases that haven’t been considered before. As far as I know, there is still a little of that happening today with Graal. Every new language leads to one or two bugs being discovered that none of the previous languages hit.

How can this be sooo hard???

All in all, my experience to build a new language with Truffle and Graal was far from pleasant. On the contrary, it was frustrating. I often just didn’t have the knowledge to debug problems myself. And the Truffle team didn’t really have time to teach an outsider all those basics.

So, yeah, I was very close to throwing in the towel. Well, I actually kind of did. At least a little. There was a moment of “fuck this, how can it be so hard? screw Truffle! Let’s look into RPython!”

And PySOM was born. PySOM is a literal port of the SOM bytecode interpreter to Python. SOM is really a simple and small language. If you know what you’re doing, and can type reasonably fast, you can implement it in 3 or 4 days in a new language.

PySOM was the first step. The next step was RPySOM: a port from Python to RPython, which is the Python subset that the RPython toolchain can compile statically into a fast interpreter with a meta-tracing JIT compiler. This experience was sooo much more pleasant. One big reason was that the PyPy+RPython community uses an IRC channel for communication and was super friendly and happy to help with all my problems. Another reason was that I knew Carl Friedrich, one of the PyPy people already for a while, and he guided me through the classic pit falls. And, I suppose, RPython at that point was already much more mature than Truffle used to be. So, fewer crashes, and I think, I didn’t really trigger much bugs in RPython either. And, since it is a trace-based compiler, understanding what the optimizer did was also much easier, because the result mapped much more directly back to the input code of the interpreter than with a fancy graph-based compiler IR. So, yeah, RPySOM was born, and with that additional knowledge, I kind of managed to make TruffleSOM a reality, too.

Some of this story, and what we learned was written down in the Are We There Yet? article.

And Finally, Fast Metaprogramming!

Then it was time to get back to my original problem: how do I get my ownership-based metaobject protocol fast? Well, turns out if you got a fancy JIT compiler, the solution is pretty simple and already existed in other Truffle interpreters: dispatch chains. Dispatch chains are essentially lexical caches for dispatch operations. A generalization of polymorphic inline caches if you will.

Together with Chris Seaton, we published a paper on Zero-Overhead Meta Programming, where we were able to show how all kind of reflective operations can be made fast, and were I was finally able to show that my metaobject protocol can be realized without sacrificing performance.

A bit later, I also wrote up a longer paper comparing meta-tracing and partial evaluation in more detail.

Cutting a long story short: nothing is as easy as it sounds. In total, it took me two years to go from a simple Smalltalk AST interpreter to a system that can take on Java. But, things should be better today. When starting to implement a new language with Truffle, there are now a few tutorials, and other resources, and the platform is much more mature and pleasant to use!

Next week, I might take a break from this series, but there are at least two more posts coming:

  • Concurrency and Tooling, or ‘What is project MetaConc?’
  • and, Growing the SOM Family

May 13, 2017

Pharo Weekly - Pompeii Volcanic Graphics, a mesh based 2D graphics API


I am releasing a first version of a new 2D graphics API that I am making for Pharo, using OpenGL.


This 2D graphics API is not vectorial based becase it does not use SVG style paths. This API is triangle mesh based, so it is more friendlier with the GPU than Athens or Sparta.

With this API I did a basic gui toolkit, with only two widgets: buttons and label. I did this Widget toolkit to not mess with Bloc, and because I need something relatively stable for the Woden 2 level editor. For now, I am leaving this widget toolkit mostly as a demo. Hopefully it is possible to make Bloc backend using this API.

During the process of making this API, I had to fix several bugs with OSWindow, and bugs in the interaction between OSWindow and OpenGL. The biggest problem was a race condition between the creation of an OSWindow using SDL2, and the events (such as Expose) that are sent to the just created Window.

As for Mac OS X, OSWindow is out of service until a pull request ( ) gets integrated into the VM.

Best regards,


May 12, 2017

Smalltalk Jobs - Smalltalk Jobs – 5/12/17

Yesplan is looking for a new colleague to join the software engineering team.
The position is required to be full-time and on-site in Gent, Belgium.
Do you fancy working with Pharo and GemStone/S but also with Javascript / ReactJS and other technologies to build intuitive event venue management software?
Read our vacancy in the link below and let me know!

May 11, 2017

Pharo Weekly - Last enhancements getting closer to the release

20047 in Versioner (or Komitter), RemotesManager needs to list just remotes

20005 Epicea: Integrate release 8.2.2

20035 UDPSocketEchoTest testEcho fails on Mac

20036 WindowAnnouncementTest is failing on mac

20038 GLMPharoScriptMorphicTest and GLMTextMorphicTest are failing on Mac CI

20032 RF: compile access to #node as LiteralVariable

20023 #isDeprecated does not cover all deprecation messsages

19920 FTTableMorph implicit filter isnt working properly with the escape keystroke
20010 Deprecated methods should be placed in the Deprecated60 package

20021 fix for #instead: stack needs to be cleaned

19984 TabExample does not switch theme correctly

20014 Dark theme is bad for changes browser

19975 Can add a _tag_ to a Nautilus work group but a package is expected

20016 Extensions with the same prefix may not be categorized correctly
19986 STON do not support WideSymbols

20013 WelcomeHelp for Pharo 6

19979 Revert gray comments color and fix colors in DiffMorph

20011 OSEnvironment>>getEnv: needs to use a primitive

19936 The code presentation in the Meta tab cuts the scrollbar at the bottom

19897 Problem with presentations containing tabulators in the inspector from the debugger

19988 #testShouldGetUnresolvedDependencies can fail easily
19909 Versionner reset modifications of first opened project when user opens another project in addition

19981 Class side slot initialization does not work

20004 SnapshotDone should be after all startup actions

19985 SourceFileArray should be encoding independent when read preamble of methods

20003 useExternalPackages mentions Pharo 5.0 although in Pharo 6.0

20000 HelpBrowser should open real browser when “WebBrowser” is loaded

19998 Settings Syntax highlighting “set to default” crashes the image
19993 Provide comment for TAbleToRotate

19959 base local Metaclass and ClassTrait methods tests on pragmas

19989 testAllCallsOnASymbol can fail easily

19997 Cleanup the Help menu (order)

19982 Better method comments

19925 Document that SmallInteger>>printString breaks the #printOn: rule

19999 Improve SHTextStylerST80 class side protocols

19990 UFFI not reset method cache at image startup
19968 Class rename do not mark extending packages dirty

19987 Bad highlight for matching parentheses with dark theme

19995 Fix typo in testIsNativeSSLPluginPresent

19996 Cleanup FFIConstants
19992 Use assert:equals: in simulateKeyStroke tests

19463 Improve SessionManager class comment

19983 activate the Dark theme by default in the bootstrapped image

19991 Use of deprecated name method in TextEditor>>changeStyle
19912 Epicea: Integrate release 8.2.1

19958 Find and Replace dialog uses black text color in dark theme

19963 Improvement of TravisIntegrationHelp

19977 Menu failure on right click in code pane when coming from MessageBrowser
19960 Comments in changed code in Diff tool

19962 Watery theme is broken because SimpleButtonMorph does not understand isDefault

19970 Formatting methods recently introduced for WelcomeHelp should be accessible to all Help classes
19956 switching back to pharo3 theme has wrong tooltip color

19937 Help for TravisIntegration

19961 Impossible to read popup error in playground and Dark Theme
19943 Error while browsing a comment un MessageBrowser

19945 PharoCommandLineHandler class comments incorrect

19954 Komitter should explicitly unsubscribe form SystemAnnoucer when window is closed

19941 Dark Theme – overlapped title bars need to be distinctive
19935 Versionner tags are unreadable in the dark theme

19938 Traits methods flattened

19809 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19951 StringMorph imageForm shows a white rectangle in DarkTheme

19944 Server deployment is broken due to GlobalIdentifier

19932 WelcomeHelp for Pharo 6 update

19934 change default theme to DarkTheme

19933 Remove ConfigurationOfMooseAlgos from the image.

19929 Comment guard to warn debugging top most process context

19926 Glamour Fast Table selection menu item actions does not work together with a filter

19884 Rubric should not use SmallInteger maxVal
19923 QA v3.3.1

19922 System-BasicCommandLineHandler calls name method
19921 allow CairoLibrary to find x86_64 bits libcairo when needed (linux)
19918 split unixModuleName into unix32ModuleName and unix64ModuleName
18028 Playground play-cache does ignore rename of current working directory

19895 Remove SmallInteger>>#instVarAt:

19855 SyntaxErrorNotification skips ensured block

19916 Fix correct author naming
19907 Improve Comment OpalCompiler

19911 Epicea makes a memory leak

19898 CompiledMethod package detection logic has bug when same selector is defined on instance and class side

19886 Add a popup in case the title of a window is too large

19905 ZlibPlugin reads past the zipCollection boundary

19900 Better ProcessTest about ensure processing
19892 Socket problem with LatestVM

19870 Removing a method using Nautilus while it is present in a message browser raises #ast was sent to nil

19860 MC generates duplicated trait methods

19899 SettingBrowser>>choosePackagesIn: is not documented at all
19888 FastTable should not reset highlighting rows when selection is changed

19887 cairo surface does not need to set lock/show surface callbacks

19882 copyBits fails when showing Athens surface

19885 STON cannot read classes with underscore in their name

19879 Accessors for instance and class variable rename refactoring

19881 add Time >> #hour:minute:second:nano: constructor

Torsten Bergmann - Serving the web with Pharo

Two sample videos: serving static web content with Pharo 6


vs. generating dynamic web content

Both are simple examples of what is possible with Pharo. There are even more options ranging from ZincTeapot, Tealight up to frameworks like Seaside.

UK Smalltalk - UK Smalltalk User Group Meeting - Monday, 22nd May

The next meeting of the UK Smalltalk User Group will be on Monday, May 22nd.

We'll meet at our usual venue, the Counting House, from 7pm onwards.

If you'd like to join us, you can show up at the pub. You can also sign up in advance on the meeting's Meetup page.

May 10, 2017

Pharo Weekly - Pharo job in Belgium

Dear all,

Yesplan is looking for a new colleague to join the software engineering team.
The position is required to be full-time and on-site in Gent, Belgium.
Do you fancy working with Pharo and GemStone/S but also with Javascript / ReactJS and other technologies to build intuitive event venue management software?
Read our vacancy in the link below and let me know!

May 07, 2017

Stefan Marr - A 10 Year Journey, Stop 2: Supporting All Kind of Concurrency Models on a Simple VM

Last week, I started a series of posts to go over some of the projects I was involved in during my first 10 years working on language implementations. Today’s post focuses on my time as PhD student.

Let’s do something fun with… cconrnceury and pileaslarlm

After finishing my master thesis in 2008, I still wanted to continue this kind of work. And there was another topic hot at the time, which I wanted to look into: concurrency. In 2008, software transactional memory was all the rage. The multicore revolution was going strong, and we all expected to use 32 core processors in 2015. I guess, the 32 cores didn’t quite work out. Nonetheless, concurrency and parallelism is a topic that’s relevant for a much larger group of people than it used to be.

As I said, the topic was kind of hot, and the people at the Software Languages Lab where interested in it as well, and did cool things with concurrency and language implementations. Most widely known is perhaps AmbientTalk, an actor language for peer-to-peer applications on top of ad hoc mobile networks.

I got lucky, and my project proposal to decouple abstract from concrete concurrency models got accepted by IWT and I got funding for four years of PhD research. I have to say, it was a big vision. In the end, my PhD scratched perhaps at the surface of a quarter of the things that would be necessary to realize the vision put forth in the proposal.

Either way, I had the chance to work on quite a few interesting ideas. Early on, I got involved with David Ungar and Sam Adams work on the Renaissance project. David worked on a Smalltalk VM for a manycore processor with 64 cores. In the beginning, I didn’t have access to those 64 core Tilera processors. Instead, I started porting, what became the RoarVM, to standard multicore systems. The RoarVM is essentially a reimplementation of the Squeak Smalltalk interpreter in C++. The goal was to support classic shared-memory concurrency, and instead of fearing race conditions, the goal was to handle them retroactively: race and repair. I haven’t really worked much on the race-and-repair idea myself, but the work on a fully concurrent and parallel VM was very exciting.

As mentioned above, the lab was interested in actor languages. So, I guess, it isn’t really surprising that I started dabbling with them as well. One of the results was ActorSOM++. It was a simple Actor language based on SOM++, a SOM implemented in C++.

I got also involved in research on making the Actor model more useful for commodity multicore systems. Together with Joeri De Koster, we worked on a few papers on a domain model. We wanted to preserve the basic guarantees of the actor model, while still providing the data parallelism of shared memory concurrency.

And then there was that ‘Rete thing’. Lode Hoste used a Rete-based system to enable declarative multi-touch applications. As one might imagine, that’s the kind of stuff that’s great for giving impressive demos. So, the two of us decided to spend a week on parallelizing the CLIPS Rule Engine. Of course, a week wasn’t enough, but it gave us enough of an idea what we are up for to start our own parallel Rete implementation. Well, actually, Thierry Renaux did most of the work. The result was PARTE, an actor-based parallel Rete engine. And of course, in 2013, there also had to be a version for the cloud.

These and various other experiments lead me to proposing a metaprogramming-based solution for the problem of supporting all kind of different concurrency models on the same VM. In the end, this approach, the ownership-based meta-object protocol (OMOP) became also the focus of my PhD dissertation. The OMOP allowed me to customize the basic behavior for field accesses and method dispatches for instance to enforce isolation between actors, or to implement a basic STM. My implementation was based on the RoarVM, which means, everything was pretty slow. So, performance remained one of the big open questions. The other open question was whether we can actually find ways to use all these different concurrency models safely together.

But, those questions didn’t really fit into the PhD anymore. And, they might also better fit into one of the next posts on:

  • performance, performance, and metaprogramming
  • and safe combination of concurrency models

Joachim Tuchel - Seaside 3.2 Session timeout & let’s start a blog parade

Seaside 3.2 is not actually new, but we just recently switched to VAST 8.6.3, which ships with Seaside 3.2. Before that we were on VAST 8.6 and Seaside 3.1.x (x=I don’t remember exactly). Among the numerous changes in Seaside 3.2 is the new session timeout configuration. Up to Seaside 3.1 the way to configure session… Continue reading Seaside 3.2 Session timeout & let’s start a blog parade

May 06, 2017

Pharo Weekly - Git Tool Migration

With Iceberg knocking on the door, migration from SmalltalkHub to Git(Hub/Lab/…) has become relevant once more.

And that’s why I wrote git-migration tool to help you move on to greener pastures.
Among other things described in the too-long-didn’t read README:
the tool will generate git-fast-import (a special format for fast git imports) file that can be easily and quickly applied on your git repository.
All commits are preserved in their proper order, and merges (commits with multiple parents) are also converted to git merges.
So far I’ve tested it on my custom intentionally broken repository, and PolyMath.
PolyMath has 784 commits in 74 packages; it took Pharo about 3 minutes to process all SmalltalkHub commits and generate 87MB file; git then imported the file in less than a second.
The tool also provides you with a bunch of visualizations that can help you analyze your SmalltakHub history and investigate problems.
(trees of all packages in the PolyMath repository)
More things could be desired (e.g. even better performance), so feel free to open issues, ideally with pull requests. 😉
Peter Uhnak

May 05, 2017

Benoit St-Jean - Migrer vers GitHub

Vous désirez migrer vos projets Pharo de SmalltalkHub, SqueakSource ou SqueakSource 3 vers GitHub?  Rien de plus facile puisqu’il existe maintenant un outil, Git Migration, pour le faire!

Classé dans:Pharo, Smalltalk Tagged: Git Migration, GitHub, migration, outil, Pharo, projet, projets, SmalltalkHub, Squeaksource, SqueakSource 3

May 04, 2017

Torsten Bergmann - Astares UML Support for Pharo (Preview)

I'm moving on with my Astares projects ... more to come

May 02, 2017

Pharo Weekly - The Pharo booklet collection is arriving…

Hi Pharoers

You are lucky. The “Pharo booklet collection” edited by S. Ducasse is arriving…

Are you ready to read nice and focused booklets?

You can find at in beta version:

  • Smacc: the Smalltalk Compiler Compiler by J. Brant, T. Goubier, J. Lecerf and S. Ducasse.
  • Glorp: the Object Relational Mapper framework by E. Maringolo, N. Pratt and R. Withney

All the book material is hosted on so you can contribute! Fix typos and propose new material.

We are planning a booklet on Magritte, Reddit in 10 cool classes, Voyage, and Mocking with BabyMock and Mocketry, XML (but we need a writer) and potentially PetitParser.

If you have material for a tutorial and you would like to be part of the Pharo Booklet Collection contact S. Ducasse.

S. Ducasse