SOTER is an extensible static analysis and transformation tool that facilitates safe yet efficient message passing in actor programs. SOTER automatically infers ownership transfer of a message content, insuring that it can be safely passed by reference. SOTER serves as a message passing optimizer for actor model implementations with pass-by-value default semantics (e.g. ActorFoundry) and as a message passing safety checker for actor model implementations with pass-by-reference default semantics (e.g. Scala actors).
To infer ownership transfer, SOTER performs a conservative and sound static analysis using IBM's WALA analysis toolkit. SOTER handles Java bytecode, and thus can be easily extended to support any actor language or framework that compiles to Java bytecode. The current implementation supports the ActorFoundry actor framework and Scala actor library.
- Stas Negara, Rajesh K. Karmani, and Gul A. Agha. Inferring ownership transfer for efficient message passing. In PPOPP, 81–90. ACM, 2011.
- Eclipse workspace including SOTER and the required third-party software.
- ActorFoundry with integrated SOTER. This is a special distribution of ActorFoundry that uses pass-by-reference semantics and applies SOTER to add deep copying where necessary. This distribution also contains the ActorFoundry examples that we used in our paper.
- Scala 2.7.7 unannotated examples used to evaluate SOTER.
- Scala 2.7.7 annotated examples for comparison.
SOTER is provided as an Eclipse workspace, which can be
built in Eclipse IDE. Also, SOTER is part of the special ActorFoundry
distribution mentioned above, where it comes as a pre-built library
SOTER can run in a batch mode as well as analyze a single actor
program. As part of the special ActorFoundry distribution mentioned
above, SOTER is executed in a batch mode as a build step, and thus is
applied to every compiled actor program. Please refer to
file in the root folder of this distribution, where you can see how
SOTER is invoked by the
message_optimize Ant target, and in
particular, different options that configure SOTER's execution.
SOTER can analyze individual actor program(s) both for ActorFoundry
and Scala. In the SOTER's distribution you can find three launch
configurations: for ActorFoundry actor programs, for Scala unannotated
actor programs, and for Scala annotated actor programs. From these
launch configurations you can notice that by default SOTER looks in
test_ActorFoundry folder for the analyzed ActorFoundry programs
and in the
test_Scala folder for the analyzed Scala programs. You
need to copy the compiled code (Java bytecode) of the analyzed actor
program in one of these folders, choose the appropriate launch
configuration, and execute SOTER.
Note that for this individual analysis you need to compile
ActorFoundry actor programs without applying the batch SOTER
optimization and Kilim weaving (i.e. do not execute
weave Ant tasks from the
build.xml of the ActorFoundry
You can compile the unannotated Scala examples directly from the
Scala-2.7.7.final archive. It contains the
test/ folder with the Scala unannotated examples and several
files to simplify their compilation and execution.
To compile the annotated Scala examples, please check out the special Scala distribution that supports annotations. The launch configuration for these examples expects to see this special Scala distribution in the Scala workspace, located in the same parent folder with the SOTER workspace.
The SOTER software is NOT in the public domain. However, it is freely available without fee for education, research, and non-profit purposes. Read the complete SOTER license.
The licenses for the third-party software are referenced in README file in the SOTER distribution's root folder.
We would like to thank the following project groups of the Fall 2009 senior-level Software Engineering course (CS427) at the University of Illinois:
- Rainbow_Fish (Alexander Loeb and others)
- Swordfish (David Paola, Stoyan Gaydarov and others)
- Threadfin (Jurand Nogiec, Jeffrey Dennhardt and others)
Please feel free to contact us for any questions or problems.