SOMns: A Newspeak for Concurrency Research
The release includes extension modules, support for snapshot writing, and major fixes for concurrency issues. The update to GraalVM 19 should eventually bring Windows support.
For more reproducible research, SOMns comes now with a maintained artifact setup out of the box.
The main goal of this release was to move more common code to the Black Diamonds project. However, since this took a long time, many other changes and improvements accumulated.
One of the most important changes for users is support for Java 9 and 10, which simplifies using SOMns, because users do not need a custom Java 8 VM any longer.
Another important user-facing change is the inclusion of our documentation into the repository and its deployment to somns.readthedocs.io.
Simplify setup and use of Graal by supporting Java 9/10 #232, #242
Included documentation into repo, and improve it #212, #222
Adopt Files and Streams libraries from Newspeak #220, #204, #190
Add support for Unicode codepoints to strings #217
Support n-ary Blocks, be strict, add #cull:*
#215, #115, #94, #21
Fix outer traversal to use lexical chain #238
Reduce race-related stack overflows, and handled invalid layouts in ClassSlotAccessNode #244
Adopt Economic collections of GraalVM to ensure insertion order #243
Handle method/mixin scope uniformly #233
Throw a proper SOMns Exception when a module isn't found #229
Colorizing terminal output #224
Start tracking Java coverage #221
Improvement debugger, transmitting partial arrays #200, #199
Improve accessibility for Language Server #195
Replace node constructors with explicit initialization #184
The main focus of this release is to improve compliance with the Newspeak specification. Specifically, we added various language features to the parser to be able to parse the Newspeak benchmarks and main repository with only minor changes.
Implement Newspeak setter send syntax and remove old assignment syntax #7, PR #170
Added support for Newspeak's full numeral syntax. This includes notation for a radix and the exponent notation. Examples: 16rFFFF, 2r10.11, 3.7e3 PR #172
Added support for object literals. Because of parsing issues, we currently
use the keyword objL
to identify literals. Otherwise, they are mostly
compliant the Newspeak specification.
#86, PR #112
Add Newspeak type annotation support and local variable initializer expressions PR #175
Add array literals PR #173
Change standard file extension to .ns
PR #181
Various improvements in PR #178
class
Added automatic formatting for Java code PR #131
Added automatic formatting of TypeScript code PR #167
Fix handling of multiple stepping threads in Truffle PR #168
Ensure eager primitives get correct parent node set, and minor cleanup PR #171
Avoid block splitting when not necessary PR #177
Model promise BPs solely with onResolver and onResolution PR #169
Fix turn stepping operations, and introduce better actor testing framework PR #179
Update Truffle to latest version (>0.26) PR #163
Add missing @TruffleBoundaries
for SubstrateVM PR #165
Simplify Object Model and add StorageAccessor PR #164
This release introduces concurrency-agnostic debugging based on Kómpos. It is realized by using a debugger protocol that abstracts from concurrency concepts and instead uses a uniform representation and meta data that instructs Kómpos how to understand and visualize breakpoints, stepping operations, and data visualization
Switch to unified Truffle+Graal repo PR #149
Updated to Truffle 0.25 PR #132
Use precise array type check PR #128
Make Kómpos tests more robust, include more info on failures, and use ephemeral ports if necessary PR #144
Fix various single stepping issues PR #143
Fix #perform:withArguments:
primitive PR #130
Make sure that ./som
without arguments does something useful PR #156
Added trace replay functionality (PR #109)
-r
flag to enable replayVisualize all types of activities in system view (PR #116)
Block methods are named based on outer method's name
Enable display of code for unsuspended activities, i.e., activities not hitting a breakpoint
Revised design of promises and implemented erroring/breaking of promises (PR #118)
Updated to Truffle 0.24+patches, from pre-0.22+patches
Added -J
flag for JVM flags, e.g. -JXmx2g
Removed Truffle Debug REPL support, i.e., the -td
flag. Has been deprecated
in Truffle for a long time, and maintaining it seems not useful.
Added -vmd
flag to enable debug output
Added basic support for shared-memory multithreading and fork/join programming (PR #52)
Added Lee and Vacation benchmarks (PR #78)
Configuration flag for actor tracing, -atcfg=
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)
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)