Java TypeScript Python HTML Shell JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.settings Added Launch settings for SOMns tests Apr 5, 2018
core-lib Document broken outer traversal with a test Mar 28, 2018
docs Update Ubuntu Java installation instructions Apr 5, 2018
libs Update BD with fix for Java version mismatch Apr 5, 2018
src Restructure RIRS.specialize to be race free Mar 28, 2018
tests Enable most of the BasicInterpreterTests for parallel runs Mar 25, 2018
tools/kompos On Kompos test failure also report command line Feb 22, 2018
.checkstyle Exclude generated code from checkstyle checks Nov 30, 2016
.checkstyle_checks.xml Update to Checkstyle 8.8, fix, and cleanup config Apr 5, 2018
.checkstyle_suppressions.xml Ignore data files in Checkstyle and Eclipse Jan 20, 2017
.classpath Remove dependency on project that was removed Jan 1, 2018
.factorypath Update to united Graal repo and latest Truffle/mx May 7, 2017
.gitattributes Add .gitattributes to tell GitHub that *.som files are Smalltalk Dec 6, 2016
.gitignore Add Stream Tests Mar 10, 2018
.gitlab-ci.yml Added support for Java 9 and to use embedded Graal as default Mar 10, 2018
.gitloadmodules Added black diamonds to .gitloadmodules Aug 31, 2017
.gitmodules Added Black Diamonds submodule Aug 17, 2017
.project Filter libs folders from project to avoid poluting search Nov 24, 2017
.travis.yml Test with JDK 10 Mar 23, 2018
AUTHORS Added name to authors file Aug 3, 2017 Update CHANGELOG Apr 5, 2018
LICENSE Updated Copyright info Mar 17, 2017 Rename master branch to release Apr 5, 2018
build.xml Don’t build native extension for Truffle, not used Apr 5, 2018
codespeed.conf Use external Graal for benchmarks Mar 11, 2018
debug Added executor script+symlinks, now based on Python Aug 25, 2015
fast Added executor script+symlinks, now based on Python Aug 25, 2015
mkdocs.yml Added documentation on naming conventions Feb 10, 2018
som Check availability of Java after checking version Apr 5, 2018

SOMns - A Simple Newspeak Implementation


Newspeak is a dynamic, class-based, object-oriented language in the tradition of Smalltalk and Self. SOMns is an implementation of the Newspeak Specification Version 0.0.95 derived from the SOM (Simple Object Machine) class libraries, and based on TruffleSOM. It is implemented using the Truffle framework and runs on the JVM platform.

Truffle provides just-in-time compilation based on the Graal compiler, which enables SOMns to reach performance that is on par with state-of-the-art VMs for dynamic languages, including V8.

A simple Hello World program looks like:

class Hello usingPlatform: platform = (
  public main: platform args: args = (
    'Hello World!' println.
    ^ 0

Obtaining and Running SOMns

The basic requirements for SOMns are a system with Java 9 or later, git, ant, and Python. Windows is currently not supported, but we test on Linux and macOS.

To checkout the code:

git clone

Then, SOMns can be build with Ant:

ant compile

Afterwards, the simple Hello World program is executed with:

./som core-lib/Hello.ns

To get an impression of the benefit o

For testing on the command line, the full command is ./som core-lib/Benchmarks/Harness.ns Mandelbrot 500 0 500

Additionally, there are JUnit tests and ant test for executing the test suite.

A more comprehensive setup guide is available in the docs folder and on ReadTheDocs.

Implementation and Deviations from the Specification

Compared to other Newspeaks and Smalltalks, it is completely file-based and does not have support for images. Instead of using customary bytecodes, SOMns is implemented as self-optimizing AST interpreter using the Truffle framework.

The overall goal is to be compliant with the specification, but include only absolutely necessary features. The current list of intended deviations from the specifications are as follows:

  • the mixin support of slots is not yet complete, see deactivate tests in core-lib/TestSuite/MixinTests.ns

  • simultaneous slots clauses are not fully supported (spec. 6.3.2)

  • object literals currently require a keyword prefix objL, to work around parser limitations

License and Author Information

This code is distributed under the MIT License. Please see the LICENSE file for details. All contributions to the project are implicitly assumed to be under the MIT License. If this is not desired, we ask that it is stated explicitly. Information on previous authors are included in the AUTHORS file.

Setup Development Environment with Eclipse and VS Code

SOMns code is best written using our VS Code plugin, which provides support for typical IDE features such as code navigation and compilation, as well as a debugger. The SOMns support can then be installed via the Marketplace.

For the development of SOMns itself, we typically use Eclipse. A complete guide on how to setup a workspace is available in the docs folder and on ReadTheDocs.

Development Status

Active development of SOMns happens on the dev branch Build Status.

The latest release is reflected by the release branch Build Status.

Changes and releases are documented in our

Academic Work

SOMns is designed as platform for research on concurrent programming models, and their interactions. Here, we collect related papers: