Since SOMns is a pure research project, we aren’t usually doing releases for SOMns yet. However, we added many different concurrency abstractions since December and have plans for bigger changes. So, it seems like a good time to wrap up another step, and get it into a somewhat stable shape.

The result is SOMns v0.2, a release that adds support for communicating sequential processes, shared-memory multithreading, fork/join, and a toy STM. We also improved a variety of things under the hood.

Note, SOMns is still not meant for ‘users’. It is however a stable platform for concurrency research and student projects. If you’re interested to work with it, drop us a line, or check out the getting started guide.

0.2.0 - 2017-03-07 Extended Concurrency Support

Concurrency Support

  • Added basic support for shared-memory multithreading and fork/join programming (PR #52)
    • object model uses now a global safepoint to synchronize layout changes
    • array strategies are not safe yet
  • Added Lee and Vacation benchmarks (PR #78)
  • Configuration flag for actor tracing, -atcfg=<config> example: -atcfg=mt:mp:pc turns off message timestamps, message parameters and promises
  • Added Validation benchmarks and a new Harness.
  • Added basic Communicating Sequential Processes support. See PR #84.
  • Added CSP version of PingPong benchmark.
  • Added simple STM implementation. See s.i.t.Transactions and PR #81 for details.
  • Added breakpoints for channel operations in PR #99.
  • Fixed isolation issue for actors. The test that an actor is only created from a value was broken (issue #101, PR #102)
  • Optimize processing of common single messages by avoiding allocation and use of object buffer (issue #90)

Interpreter Improvements

  • Turn writes to method arguments into errors. Before it was leading to confusing setter sends and ‘message not understood’ errors.
  • Simplified AST inlining and use objects to represent variable info to improve details displayed in debugger (PR #80).
  • Make instrumentation more robust by defining number of arguments of an operation explicitly.
  • Add parse-time specialization of primitives. This enables very early knowledge about the program, which might be unreliable, but should be good enough for tooling. (See Issue #75 and PR #88)
  • Added option to show methods after parsing in IGV with -im/--igv-parsed-methods (issue #110)