• Stars
    star
    109
  • Rank 319,077 (Top 7 %)
  • Language
    Java
  • License
    GNU General Publi...
  • Created about 10 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

My experimental programming language using Truffle

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