Mumbler is a lisp programming language I wrote to try out the Graal JIT for the JVM.
Mumbler
Mumbler is a very small lisp modeled after Scheme but with far fewer special forms and built-in functions. Here is the ”Mumbler language specification”.
Build
Mumbler uses Gradle as the build system. To build the code simply run
cd ${MUMBLER_REPO}/lang
./gradlew installDist
Run
Mumbler requires a special version of the JVM. You can download a graal JVM from Oracle. Mumbler requires version 19.3 or newer.
You can start Mumbler’s REPL from the build directory. Just set JAVA_HOME
to point to the Graal JVM.
JAVA_HOME=<graal-vm-dir> ${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler
Run tests
The test/ directory contains several Mumbler scripts that try out different features. To run all the tests:
${MUMBLER_REPO}/test/run_tests
You can try out individual scripts by starting running Mumbler directly.
${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler ${MUMBLER_REPO}/test/<a-random-script>.mumbler
You can disable tail call optimization.
${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler --tco=false ${MUMBLER_REPO}/test/<a-random-script>.mumbler
You can also run individual scripts using gradle.
cd ${MUMBLER_REPO}/lang
./gradlew run -PappArgs="['/home/jchaloup/development/mumbler/benchmark/fibonacci/fibonacci.mumbler']"
./gradlew run -PappArgs="['/home/jchaloup/development/mumbler/benchmark/fibonacci/fibonacci.mumbler', '--tco=false']"
Run benchmarks
Build Truffle and Mumbler and set environment variables.
${MUMBLER_REPO}/benchmark/measure <benchmark-name>
benchmark-name
is the name of the files in one of the directories under benchmark
, without the extension, as in the following example.
${MUMBLER_REPO}/benchmark/measure ${MUMBLER_REPO}/benchmark/fibonacci/fibonacci
You can uncomment the benchmark execution commands at the end of the measure
script in order to benchmark mumbler against other languages than python.
Set Environment Variables
Mumbler’s scripts use two environment variables.
JAVA_HOME : The directory of the Graal VM. Mumbler may run using the default Oracle or OpenJDK JVM, but you won't see the performance gains that Graal provides. MUMBLER_HOME : The path where gradle built and installed Mumbler. It should be under ${MUMBLER_REPO}/lang/build/install/mumbler
The MUMBLER_REPO
environment variable referenced here is not used by an scripts. It signifies where the Mumbler repo was cloned on your system.
License
Copyright © 2014-2020 Cristian Esquivias
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.