This gives a brief overview of some of the infrastructure used in SOMns.
SOMns uses Ant as build system. The setup tries to minimize the external software dependencies. Currently, instead of using some automatic dependency management system for SOMns, we use an uberjar that combines all rarely changing Java dependencies.
The corresponding project is SOMns-deps, which is essentially a shell script creating a jar file from a set of libraries an then uploading it onto Bintray.
The Truffle library is however directly used as a git submodule dependency, because it changes frequently, and we sometimes need changes in Truffle. Currently, SOMns also relies on a personal fork of Truffle to support changes in the instrumentation and debugging support.
SOMns relies on GitHub, its issue tracking, and pull request system for development.
Change Tracking with Pull Requests: The general approach is all changes are tracked with a pull request.
When you are getting started with working on the SOMns interpreter internals, consider checking out the Good First Issue label. These issues are more or less simple changes that with a bit of guidance should provide a good introduction to the SOMns code base, an basic understanding of how Truffle-based interpreters work, and a few SOMns specific insights.
When working on SOMns code, please look at the code around you and stick to the style. It might be particular, but it is consistent in this code base.
To ensure basic compliance with the style, we use checkstyle. It is integrated into the build system and continuous integration system. Please use something like Eclipse Checkstyle to integrate it in your editor.
We are also using Codacy to monitor additional style issues or potential bugs. See the STM pull request for examples.
Continuous Integration: To automatically run unit tests for the interpreter, SOMns, and the debugger,
we use GitHub Actions (see
as well as a private GitLab instance to run benchmarks (see
The current build status of the release branch is: .
The status of the development branch
dev is: .
Active development of SOMns happens on the
The latest release is reflected by the
release branch .
Performance Tracking: Since one goal of SOMns is to be a platform for research on concurrency with performance close to state-of-the-art JVMs, we continuously track benchmark performance, for startup as well as peak performance with ReBenchDB. It is run on every change to the dev branch, and can be used to track and compare performance of experimental changes as well.
The benchmark execution is configured with
codespeed.conf and are executed
with the ReBench tool.
SOMns Code Coverage: To track code coverage of the SOMns code, we use Coveralls.
Java Code Coverage: To track code coverage of the Java code, we use Codacy.