Smalltalk-on-Rails development environment running on Heroku

This blog covers a new version of Smalltalk implemented as a DSL in Ruby.

The goal of the project is to provide an object-oriented scripting environment for web applications running on Ruby-on-Rails.

Multiple applications share common libraries and resources on the web server. The user interface and business logic for each application are written in Smalltalk and are stored in the database in serialized JSON format.

Currently the project is in limited production use running in a Ruby-on-Rails environment on Heroku. It has also been successfully tested running on the Java JVM (using JRuby) on both Amazon AWS and Heroku.

The Smalltalk syntax closely follows the Smalltalk-80 standard with the main exceptions being literal notation for arrays and dictionaries and use of zero-base for arrays.

{} => empty array

{1,2,3,’hello’} => an array of 4 elements (commas are used as delimiters

{:} => empty dictionary

{a: ‘hello’, b: ‘world’} => a dictionary of two elements

Global variables, instance variables, class variables, and pool dictionaries are all supported.

Smalltalk methods are translated to equivalent Ruby code and then compiled. Speed is comparable to native Ruby code (with some overhead for message lookup) and appears to be considerably faster than Pharo or Squeak based on limited testing.

The developer interface is built using Sencha’s ExtJS which runs in any modern browser. This allows live updating of applications on the server without redeployment or restarts.

I expect to be in full production supporting a small number of websites within the next couple of weeks. And I will also be testing deployment to Google’s Compute Engine later this month.

Questions and comments are of course welcome.

My next post will discuss the compiler and serialization of Smalltalk classes.