SOM, the Simple Object Machine, is a little dynamic language designed for teaching object-oriented virtual machine design. It originates in Aarhus, Denmark, and according to Lars Bak, it was implemented in the course of two days by Kasper Lund. They used it back in 2001 for a course at the University of Aarhus.

Last Wednesday, I gave a presentation at ‹Programming›’19 trying to make a case for SOM as a platform for teaching and research. Currently, it is not widely used for teaching, but I think it has a lot of potential. Though, I will admit that I am biased, because SOM was the virtual machine that Michael Haupt used in his course, and where I got interested in language implementation about a decade ago.

The anecdote above is actually something Lars said during my presentation, and, for what it is worth, the current SOM can by ported to another implementation language in about 3 days of work. At least when one knows SOM. So, a smaller version of it, is certainly a plausible result for a two-day project.

If virtual machines are something you are interested in, I can only recommend looking into SOM. A starting point could be the slides below. They contain links to various resources.

For me, the most important aspect of the SOM project is its incredible range. We have very small and simple implementations that can get students started, but at the same time, we have implementations that can compete with state-of-the-art virtual machines. This allows us to teach the basics as well as advanced optimizations. It also makes SOM an excellent foundation for publishable research.

Presentation Abstract

The Simple Object Machine (SOM) can be traced back to Aarhus in 2001. Since then it has been used in various places to teach students about language implementation techniques and to do research on optimizations, tooling, and language features.

The Simple in the name was key to enabling much of this work. It allowed experimentation with various implementation languages as well as language implementation frameworks. It also enabled experiments with optimizations such as zero-overhead run-time metaprogramming, powerful metaobject protocols, efficient implementations of various concurrency models, and debuggers that can support all these features seamlessly. Even industry got curious about the Simple, and used SOM to showcase a framework for garbage collection and just-in-time compilation.

This talk is therefore a shameless plug for SOM, how it is used for research, and its potential for teaching. I’ll try to convince you that SOM, while being a small object-oriented language, is fully equipped to do cutting edge research. At the same time, I’ll argue that it is a great platform to teach language implementation techniques, good software engineering, and perhaps especially relevant for ‹Programming›: good programming practices.