Mozart-Graal
July 7, 2019 ยท View on GitHub
An implementation of the Oz programming language on top of Truffle and Graal.
The bootcompiler and Oz libraries are imported from Mozart 2.
Interesting Points
-
A master thesis was made with this project to optimize performance. It details many static and dynamic optimizations.
-
Tail calls are optimized and compiled as loops, see
TailCallCatcherNode. Self-recursion is optimized further inSelfTailCallCatcherNode. -
There is a Truffle AST serializer in
OzSerializerusing Kryo able to serialize Oz code. -
The project uses the Coroutine patch for HotSpot to be able to create many lightweight threads.
-
The parser, typer, and some optimizations are written in Scala (
bootcompiler/) and the AST produced by Scala is then translated to a Truffle AST inTranslator.
Current Status
Early stage but the Panel and Browser are working.

Dependencies
- Java 8
- Maven 3
- C/C++ toolchain (
build-essential) for building Graal - Python 2.7 (for
mx) - Ruby >= 2.2.0 (for the launcher)
Build instructions
mkdir mozart-dev
cd mozart-dev
git clone https://github.com/eregon/mozart-graal.git
cd mozart-graal
rake
It takes around 5 min to build everything.
Run with
./oz
Graal
Graal is not built by default to save time. To build it, run
rake build:graal
On recent Linux, you need to do part of the build manually, see Building JVMCI.
IDE: IntelliJ IDEA
IntelliJ IDEA configuration are checked in the repository and should work out of the box.
Import mozart-dev as a project.