## High-speed Simulation of POOSL Models with Rotalumis

Rotalumis is a high-speed execution engine for POOSL models. This execution engine simulates POOSL models conform the formal semantics. If you wonder what Rotalumis actually stands for, try reading it backwards.

Rotalumis can be used as a standalone simulator for POOSL. There is also an Integrated Development Environment for POOSL that uses Rotalumis in the back-end. It is developed by TNO-ESI. It supports graphical modelling, interactive simulaton and debugging. It can be freely used and is available from the following location, PooslIDE.

Rotalumis is released under the following license:

Copyright (c) 2014-2017, Eindhoven University of Technology. All rights reserved.

Redistribution and use in binary form, without modification, are permitted provided that the
following conditions are met:

1. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

2. All advertising materials mentioning features or use of this software
must display the following acknowledgments:
This product includes software developed by the Electronic Systems Group
at the Department of Electrical Engineering of Eindhoven University of Technology.

3. Neither the name of Eindhoven University of Technology, Electronic Systems group nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY Eindhoven University of Technology ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Eindhoven University of Technology BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


## Get the tools

Rotalumis is best used with the PooslIDE frontend. The IDE will automatically install the latest stable Rotalumis.

To get the latest development version, we provide a Eclipse repository:

If you are unsure which version of Rotalumis to use, you are probably looking for the Release version.

## Changelog

### v4.1.0

New features

• Add support for include directories and importlib command. Including validation of include directory escaping.
• Print unittest output to console.
• Validate unittest function prototype.
• Support for constructor init. Throw error when constructor is not called.
• Improve error messages.

Others

• Removal of unused properties and code.
• Remove of register keyword as it is deprecated.
• Fix assert message format.
• Make unittest part of Continuous integration. (233 tests).

### v4.0.0

New features

• Native support for executing files in the native POOSL textual file format.
• Added command-line option --poosl
• Support for loading basic classes --basic-classes
• New switch statement.
• Support for characters constants: ‘\x0’ and ‘\x00’.
• New native data methods
• Observer.isLast
• Socket.writeCharacters
• New native data class
• Console
• Allow variables to be set at run-time in a debug session.
• Better debug statements on console. ( --debug to enable).
• Quiet flag for reducing engine output on console ( --quiet to enable)
• Build-in support for unit-tests.
• @test, @error(message) and @skip support.
• Added command-line option --unittest
• Support for --version that indicates exact version for both release and latest builds.

Bug Fixes

• Remove trailing zeros from printing reals. (0.0 instead of 0.0000000)
• Fix equivalence check.
• Improve error message when failed to start rotalumis when it fails to bind tcp port.
• Fix broken parsing of hexadecimal literals.
• Fix concatenation of string.
• When comparing, take special case string, into account.
• Correctly return the separate variable context when inspecting Array.
• Nil is of any (valid) type.
• When binding message parameter check global/local state of each variable.

Others

• Removal of duplicate code.
• Memory leak fixes.
• Increase default stack limit on windows to 8 mbyte.

### v3.6.0

This release focused on improving the debug experience with Rotalumis. The new credit system for debug messages can keep Rotalumis running at the speed of the IDE, new debug API’s allow variables to be updated while the model is being debugged. Also several bugs with regards to debugging have been squasehd, like missing error messages and stacktraces. Below is a more detailed list of changes:

New Features:

• Issue 71: Add ‘set variable’ request to debug API.
• Credit system on debug interface for execution engine messages. Allows Rotalumis to run at speed of IDE drawing.
• Expose time-delay, when known, to IDE.
• Allow a more flexible syntax for real and integer numbers.
• --debug option for commandline usage.
• Move to C++11.

Bug Fix:

• Issue 73: Fix resolving print_string on non-primitives.
• Issue 72: Fix printing of class name in printString. Always take current classname.
• Issue 70: Do not do consistency checks on binheap and gc in release build.
• Speedups in Virtual Machine execution.
• Issue 64: Add stacktrace to evaluate delay.
• Issue 61: Make If and While a request type, not Fix request.
• Use index based iterrator for array, to avoid failing when item removed during iterrating.
• Remove variable aliasing in pointer adresses.

### v3.5.0

The current release focuses on improving data methods: an error generated from within a data class now generates a stack traces showing the exact location of the error and path towards it. Tests have been written for all the native data classes and are now part of a new developed test framework used for regression testing. Most notably the socket implementation has been fixed. Futhermore several issues are fixed, like sequence diagrams messages are now generated without affecting the execution of the model, buiding on OS-X. Below is a more detailed list of changes:

• Remove deepCopy and shallowCopy instruction, instead treat as bytecode. This fixes problems with setting the correct deepCopy permissions on permanent non-native classes.
• [Build] Fix MacOSX collision with header file.
• Use inspection framework for generating sequence diagram communication messages.
• [Socket][ut] Fix writeString on socket classes.
• [Socket] Correctly lock data structures.
• [Socket] Fix setup and tear-down of sockets on connect and close.
• [Socket] Fix trimming of whitespace.
• [ConsoleWriter] Add writeErrorString and writeString method.
• [Integer][ut] Add octal literal support.
• [Marschall][ut] Fix serialization and de-serialization of nested custom classes.
• [Integer] Fix modulo operator. Now correctly floored division method.
• [Engine] Add type checking when converting PDO_String into std::string.
• [String][ut] Fix splitOnWhiteSpace incase of multiple spaces as separator.
• [String][ut] Fix error on negative Powers.
• [Object] testCall returns generated error message.
• [FileIn][FileOut][ut] Validate state and throw error when invalid before executing method.
• [Guard] Run on main VirtualMachine, side-effects are allowed.
• [Engine] Send an xml formatted stack-trace to the PooslIDE.
• [Engine] Send changes to the execution state, asynchronous to the PooslIDE.
• [Engine] Generate stacktrace on instantiation failure.
• [Engine] Show stacktrace on If, While, step, process step.
• [Socket][FileIn][FileOut][Observer] Correctly disallow shallow/deepCopy.
• [CLI] Remove commandline warnings.
• [CLI] Allow multiple models to be run from the commandline.
• Remove unused code for Rotalumis acting as Rotalumis client.