A Clojure-inspired Lisp compiler built on LLVM JIT, exposing how Lisp constructs map to hardware.
Rhine is an untyped Lisp compiler that targets LLVM's JIT infrastructure, drawing inspiration from Clojure's syntax and semantics. It serves as both a practical Lisp environment and an educational tool by exposing how high-level Lisp constructs map to low-level hardware operations, unlike Clojure which abstracts these details via the JVM.
Developers and students interested in language implementation, particularly those wanting to understand how Lisp constructs are compiled to efficient machine code using modern compiler frameworks like LLVM.
Rhine provides transparency into low-level implementation details while leveraging LLVM for performance optimizations, making it unique as both an educational resource and a practical Lisp environment that bridges high-level abstractions with hardware-level operations.
🏞 an OCaml compiler for an untyped lisp
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Explicitly maps high-level Lisp constructs to low-level hardware operations using LLVM, as stated in the philosophy, making it ideal for learning compiler design.
Leverages LLVM's just-in-time compilation for efficient execution and optimization, drawing on modern compiler infrastructure for speed.
Provides a familiar Lisp dialect inspired by Clojure, easing adoption for developers already acquainted with Clojure semantics.
Implements first-class functions, closures, and hygienic macros using LLVM's varargs framework, as detailed in the 'How it works' section.
Requires specific OCaml version (4.02.1) and has known issues with parallel builds and LLVM submodules, as described in the troubleshooting section.
Lacks critical features like garbage collection, lambdas, concurrency primitives, and FFI, all listed in the 'Todo' section, limiting practical use.
Debugging errors is hard due to mismatched callstacks between OCaml and LLVM C++ code, making it non-trivial to trace issues, as noted in the notes.