Actors for Smalltalk
Wed 30 Jan 2019 17:41 GMT
About two years ago I wrote an
Erlang-style Actors implementation for Squeak Smalltalk,
based on subclassing Process
, using Smalltalk’s Message
class to
represent inter-actor messages, and using Promise
for RPC. Roughly a
year ago, I finally dusted it off, documented it, and released it.
It draws on my experience of Erlang programming in a few ways: it has links and monitors for between-actor failure signalling; it has library actors representing sockets; it has a simple tracing facility. There’s crude and no doubt heavily problematic support for basic Morphic interaction.
Installation instructions, comprehensive documentation and tutorials can be found at https://tonyg.github.io/squeak-actors/.
It’s by no means as ambitious as other Smalltalk Actor systems: it only deals with single-image in-image messaging between actors, and doesn’t have the E-style ability to refer to objects within a vat. Instead it follows Erlang in having references denote actors (i.e. vats, roughly), rather than anything more fine-grained.
Next steps could be:
- a Workspace that was actor aware, i.e. each Workspace an actor.
- better Supervisors.
- tools for visualizing the current constellation of actors, perhaps based on Ned Konz’s Connectors?
- an ActorEventTrace subclass that is able to draw message interaction diagrams as a Morph.
- a screencast of building an IRC client maybe?
To give it a try:
-
Download and run a recent version of Squeak. For example, I just downloaded https://files.squeak.org/trunk/Squeak5.3alpha-18431-32bit/Squeak5.3alpha-18431-32bit-201810190412-Linux.zip.
-
Update your image. Click the Squeak icon in the top left of the window, and choose “Update Squeak”, or execute the following in a workspace:
MCMcmUpdater updateFromServer
-
Install the
Actors
project into your Squeak:(Installer squeaksource project: 'Actors') install: 'ConfigurationOfActors'
-
Follow the documentation, which includes tutorials of various levels of complexity and a detailed user manual,
It could in principle work in Pharo, as well. I did try to port it to
Pharo, but found two main obstacles. First, Pharo doesn’t have an
integrated Promise
implementation;
the Actors
project makes heavy use of promises.
Second, I couldn’t get Pharo’s sockets to behave as reliably as
Squeak’s. I don’t remember details, but I’d be very pleased if a Pharo
expert were to have a try at porting the code across.
The project has recently been discussed on HN; please feel free to get in touch if you have any questions, comments or feedback.