A Lisp Interpreter for Squeak

This page is a mirrored copy of an article originally posted on the LShift blog; see the archive index here.

This is a simple-minded (and slightly weird) Lisp interpreter for Squeak Smalltalk. It doesn’t have a REPL under Morphic, but I’ve hacked on it to provide a minimal Morphic UI.

It got me thinking about Lisp Machines again. What if the existing Squeak infrastructure could be exploited to build a Scheme Machine? The minimal addition required to the Squeak VM would be a tail-call opcode. Once tail calls are possible, a compiler could be written to take Scheme code to Squeak bytecode. A full module system could be implemented fairly easily, thanks to Smalltalk’s non-separation of compile-time and runtime. The mapping between Smalltalk constructs and Scheme Machine constructs might be:

Scheme MachineSmalltalk
Module instantiationsInstances
Global variablesProbably wouldn’t be implemented — you’d use module-local variables instead, just like MzScheme’s module system
Module-local functionsInstance methods
Module-local variablesInstance variables

Integration with the debugger might be tricky. Many system utilities expect to be able to decompile bytecode into Smalltalk; a major refactoring might be needed for multi-language integration within Squeak. One would have to tag each method with the decompiler to use, update each UI widget to display these annotations etc.


On 8 February, 2009 at 4:01 pm, Frank Shearar wrote:

Funny I should read this now. I’ve been working with ometa a bit, and it almost turns squeak’s code browser into an IDE for ometa.

It made me wonder if one couldn’t turn Squeak into an IDE for, say, Common Lisp. Really, Squeak’s tools are so awesome that they make hacking in emacs seem unbearable, even if it is hacking CL.