Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Mumbler is a lisp programming language I wrote to try out the Graal JIT for the JVM.


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”.


Mumbler uses Gradle as the build system. To build the code simply run

cd ${MUMBLER_REPO}/lang
./gradlew installDist


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:


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.


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


My experimental programming language using Truffle








No releases published


No packages published