The SOM Family

[Overview] [Downloads] [Contributors] [Contact] [License]

Overview

The SOM (Simple Object Machine) family is a collection of virtual machine implementations for a Smalltalk dialect. The various SOM VMs are dedicated for teaching purposes, but have also been applied in research.

Virtual machine implementations to be used in teaching have to be accessible, ideally by different audiences with different degrees of previous knowledge. To that end, the architectures and designs of the different SOM VMs are deliberately simple. In fact, most of the building blocks exist in all of the VMs and are implemented in the same ways to allow for transitioning from one to another as knowledge deepens.

Simplicity does not hinder complexity. Many of the intricate interrelationships one typically faces in VM implementations can be found in the SOM VMs as well—only that they are more easily accessible due to the overall simplicity of the VMs' architectures.

History

SOM was originally implemented in the Java programming language at the University of Århus (Denmark), where it was also applied in teaching object-oriented VMs in 2002. The original authors kindly made SOM available for further use, and also agreed to make further development results available under the terms and conditions of the MIT license.

SOM was then applied in teaching in two courses on virtual machines; one undergraduate course at Lancaster University (UK), and one graduate course at Technische Universität Darmstadt (Germany). During the latter course, it was realised that implementing a VM in Java is only half as interesting as it should be—e.g., implementing a garbage collector in Java is somehow possible, but does not make much sense.

This observation led to the decision to port SOM to the C programming language, resulting in CSOM. This was applied in two subsequent years at Hasso Plattner Institute in Potsdam (Germany) in graduate courses on virtual machines. Moreover, CSOM was used in a research project concerned with disentangling the architecture of VM implementations and shaping a VM product line (CSOM/PL).

Still wondering which language might be "best" for teaching about virtual machine implementations, SOM/CSOM were next ported to C++, leading to the SOM++ variant. At the same time, CSOM was used as the basis of a Smalltalk VM implementation for the Lego Mindstorms NXT platform, resulting in NXTalk.

The youngest member of the SOM family is AweSOM, which is implemented in Squeak. AweSOM greatly benefits from the features of using an extremely high-level language such as Smalltalk as the implementation language. Performance is an issue, though, but simply being able to run SOM in Squeak is not the goal of the AweSOM subproject. Instead, code generation logic is being implemented, which generates efficient C++ code from the Smalltalk sources. In this regard, AweSOM is related to PyPy.

The SOM Family
Members and genealogy of the SOM family.

All of the family members understand the same Smalltalk dialect and use the same standard library. In other words, it is possible to develop a SOM Smalltalk application for the Java-based SOM VM and running it on, e.g., SOM++ without having to change it. Obviously, things get more difficult as soon as the application classes contain primitives—these have to be implemented for each of the SOM VMs.

In a nutshell, the SOM family is a collection of VM implementations for different audiences: undergraduate and graduate students, inexperienced and experienced VM hackers, and researchers.

Downloads

All downloads available below contain the complete source code of the respective SOM family member, the SOM Smalltalk standard library, examples, test suite, and benchmarks.

SOM

CSOM

CSOM/PL

SOM++

AweSOM

Contributors

Over the past years, many people have contributed to the various members of the SOM family:

All members of the SOM family are now maintained by the Software Architecture Group at the Hasso Plattner Institute in Potsdam.

Contact

The primary contact for the SOM projects is Michael Haupt.

Comments on and suggestions for improvement of this project home page are highly welcome!

License

Copyright © 2006-2013 Members of the Software Architecture Group
Software Architecture Group, Hasso Plattner Institute, Potsdam, Germany
http://www.hpi.uni-potsdam.de/swa/

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.