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:
Actorsproject into your Squeak:
(Installer squeaksource project: 'Actors') install: 'ConfigurationOfActors'
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
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.