SOMns - A Newspeak for Concurrency Research¶
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.
SOMns is built and maintained with the goal to facilitate research onf concurrency models, their safe interactions, and tooling to make it possible to build more correct systems more easily.
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 not yet fully supported. SOMns is tested on Linux and macOS.
To checkout the code:
git clone https://github.com/smarr/SOMns.git
Then, SOMns can be build with Ant:
Afterwards, the simple Hello World program is executed with:
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
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, Author Information, Citation¶
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.
If you use SOMns for your research, please cite it is as follows:
Stefan Marr et al. SOMns: A Newspeak for Concurrency Research. https://doi.org/10.5281/zenodo.3270908
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
and on ReadTheDocs.
Active development of SOMns happens on the
dev branch .
The latest release is reflected by the
release branch .
Changes and releases are documented in our CHANGELOG.md.
SOMns is designed as platform for research with a special interest for concurrent programming models, their interactions, and tooling for debugging.
Capturing High-level Nondeterminism in Concurrent Programs for Practical Concurrency Model Agnostic Record & Replay, D. Aumayr, S. Marr, S. Kaleba, E. Gonzalez Boix, H. Mössenböck;
Asynchronous Snapshots of Actor Systems for Latency-Sensitive Applications, D. Aumayr, S. Marr, E. Gonzalez Boix, H. Mössenböck; MPLR'19.
Transient Typechecks are (Almost) Free, R. Roberts, S. Marr, M. Homer, J. Noble; ECOOP'19.
Efficient and Deterministic Record & Replay for Actor Languages, D. Aumayr, S. Marr, C. Béra, E. Gonzalez Boix, H. Mössenböck; ManLang'18.
Newspeak and Truffle: A Platform for Grace?, S. Marr, R. Roberts, J. Noble; Grace'18.
Few Versatile vs. Many Specialized Collections: How to design a collection library for exploratory programming? S. Marr, B. Daloze; Programming Experience Workshop, PX/18.
A Concurrency-Agnostic Protocol for Multi-Paradigm Concurrent Debugging Tools, S. Marr, C. Torres Lopez, D. Aumayr, E. Gonzalez Boix, H. Mössenböck; Dynamic Language Symposium'17.
Kómpos: A Platform for Debugging Complex Concurrent Applications, S. Marr, C. Torres Lopez, D. Aumayr, E. Gonzalez Boix, H. Mössenböck; Demonstration at the <Programming>'17 conference.
Toward Virtual Machine Adaption Rather than Reimplementation: Adapting SOMns for Grace, R. Roberts, S. Marr, M. Homer, J. Noble; Presentation at the MoreVMs'17 workshop at the <Programming>'17 conference.
Optimizing Communicating Event-Loop Languages with Truffle, S. Marr, H. Mössenböck; Presentation at the AGERE!’15 Workshop, co-located with SPLASH’15.
Cross-Language Compiler Benchmarking: Are We Fast Yet? S. Marr, B. Daloze, H. Mössenböck at the 12th Symposium on Dynamic Languages co-located with SPLASH'16.