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:
- Release, stable at
- Integration (cutting edge) at
Download standalone Rotalumis:
If you are unsure which version of Rotalumis to use, you are probably looking for the Release version.
- 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.
- Validate models system specification on loading.
- Improve error messages.
- 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).
- Native support for executing files in the native POOSL textual file format.
- Added command-line option
- Support for loading basic classes
- Added command-line option
- New switch statement.
- Support for characters constants: ‘\x0’ and ‘\x00’.
- New native data methods
- New native data class
- Adjustable Stack limit.
- Allow variables to be set at run-time in a debug session.
- Better debug statements on console. (
- Quiet flag for reducing engine output on console (
- Build-in support for unit-tests.
- Added command-line option
- Support for
--versionthat indicates exact version for both release and latest builds.
- 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.
- Removal of duplicate code.
- Removal of dead code.
- Memory leak fixes.
- Increase default stack limit on windows to 8 mbyte.
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:
- 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.
- Add Observer::isLast method.
- Allow a more flexible syntax for real and integer numbers.
- --debug option for commandline usage.
- Move to C++11.
- 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.
- Add missing error messages to socket readUntil and hasCharacters.
- Remove old, dead code.
- Use index based iterrator for array, to avoid failing when item removed during iterrating.
- Remove variable aliasing in pointer adresses.
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.
- [Socket] Fix readUntil
- [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.