Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cesquivias/mumbler

My experimental programming language using Truffle
https://github.com/cesquivias/mumbler

graalvm lisp-interpreter truffle

Last synced: about 1 month ago
JSON representation

My experimental programming language using Truffle

Awesome Lists containing this project

README

        

Mumbler is a lisp programming language I wrote to try out the [[https://www.graalvm.org/][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 "[[http://cesquivias.github.io/blog/2014/10/13/writing-a-language-in-truffle-part-1-a-simple-slow-interpreter/#mumbler-language][Mumbler language specification]]".

* Build
Mumbler uses [[http://gradle.org/][Gradle]] as the build system. To build the code simply run

#+begin_src shell-script
cd ${MUMBLER_REPO}/lang
./gradlew installDist
#+end_src

* Run
Mumbler requires a special version of the JVM. You can download a [[https://www.graalvm.org/downloads/][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.

#+begin_src shell-script
JAVA_HOME= ${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler
#+end_src

** Run tests
The test/ directory contains several Mumbler scripts that try out different features. To run all the tests:

#+begin_src shell-script
${MUMBLER_REPO}/test/run_tests
#+end_src

You can try out individual scripts by starting running Mumbler directly.

#+begin_src shell-script
${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler ${MUMBLER_REPO}/test/.mumbler
#+end_src

You can disable tail call optimization.

#+begin_src shell-script
${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler --tco=false ${MUMBLER_REPO}/test/.mumbler
#+end_src

You can also run individual scripts using gradle.

#+begin_src shell-script
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']"
#+end_src

** Run benchmarks
[[sec:build][Build]] Truffle and Mumbler and [[sec:env-var][set environment variables]].

#+begin_src shell-script
${MUMBLER_REPO}/benchmark/measure
#+end_src

~benchmark-name~ is the name of the files in one of the directories under ~benchmark~, without the extension, as in the following example.

#+begin_src shell-script
${MUMBLER_REPO}/benchmark/measure ${MUMBLER_REPO}/benchmark/fibonacci/fibonacci
#+end_src

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.

#+begin_example
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
#+end_example

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 .