Skip to content
SOMns: A Newspeak for Concurrency Research
Branch: release
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings Added Launch settings for SOMns tests Apr 5, 2018
artifact Remove use of GraalBasic from artifact Jul 1, 2019
core-lib Include jdk1.8 into path Jun 28, 2019
docs Reformatting for max 80 char line limit, and minor edits Jan 14, 2019
libs Update Truffle to pre-vm-20 Jun 28, 2019
src Set promise data fields to null on resolution Jul 2, 2019
tests Avoid issues with ._* files in si and dym expected results Jun 28, 2019
tools/kompos We have a new suspension point in the STM tests, should fix this even… Jun 28, 2019
.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 Update build dependencies, ant and eclipse Sep 22, 2018
.factorypath Updated to Truffle 1.0.0-rc5, incl. mx, and BD Sep 1, 2018
.gitattributes Add .gitattributes to tell GitHub that *.som files are Smalltalk Dec 6, 2016
.gitignore Add Stream Tests Mar 10, 2018
.gitlab-ci.yml Move JVMCI download to ant Jun 30, 2019
.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 Move JVMCI download to ant Jun 30, 2019
AUTHORS Added name to authors file Aug 3, 2017
CHANGELOG.md Prepare CHANGELOG.md for 0.7.0 release Jul 7, 2019
LICENSE Updated Copyright info Mar 17, 2017
README.md Added new paper and fixed PDF URLs Jul 7, 2019
build.xml Fix build.xml Jun 30, 2019
codespeed.conf Move JVMCI download to ant Jun 30, 2019
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 Add support for extension modules Jun 3, 2018
som Move JVMCI download to ant Jun 30, 2019

README.md

SOMns - A Simple Newspeak Implementation

Introduction

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 https://github.com/smarr/SOMns.git

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 CHANGELOG.md.

Academic Work

SOMns is designed as platform for research with a special interest for concurrent programming models, their interactions, and tooling for debugging.

Related papers:

You can’t perform that action at this time.