Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/cesquivias/mumbler
- Owner: cesquivias
- License: gpl-3.0
- Created: 2014-09-29T12:51:59.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2020-02-28T18:36:04.000Z (almost 5 years ago)
- Last Synced: 2024-08-01T22:42:08.421Z (4 months ago)
- Topics: graalvm, lisp-interpreter, truffle
- Language: Java
- Homepage:
- Size: 352 KB
- Stars: 108
- Watchers: 9
- Forks: 18
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
- awesome-graal - Mumbler is a lisp programming language
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_srcYou 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_srcYou can disable tail call optimization.
#+begin_src shell-script
${MUMBLER_REPO}/lang/build/install/mumbler/bin/mumbler --tco=false ${MUMBLER_REPO}/test/.mumbler
#+end_srcYou 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_srcYou 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_exampleThe ~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 .