Under the hood, it relies on a flexible, multiparadigm language Common Lisp, and particularly its optimizing compiler SBCL.
30+ years of rich heritage
Common Lisp was ANSI standardized over the course of early-1980s to mid-1990s. SBCL (earlier CMUCL) has been available since early-2000s and continues to have monthly releases to this day.
Small but extensive ecosystem
The Common Lisp community curates its libraries from time to time at awesome-cl.
Multiple library managers
From quicklisp that ensures all packages in a distribution work together, to ultralisp that builds every five minutes, and OCI-based ocicl, there are multiple options to suit your needs.
Optional Typing
Common Lisp is dynamically typed by default. This again aids prototyping. However, once the prototype is ready, the program can be documented or optimized using type information. SBCL (see also Coalton) is immensely helpful.
Interactive Programming
Designed for interactive programming from the ground up. This makes it easy to redefine not just variables and functions but also classes, types, packages (= modules/namespaces) and syntax all on the fly.
In particular, each can be redefined in a piecemeal fashion. This makes it best suited for explorative programming without breaking your flow.
Learning Resources and Features
Transpile-based
Moonli transpiles to Common Lisp. Your colleague familiar with Python or Julia can read Moonli code, while lispers in the wild can consume the corresponding Common Lisp code.
Familiar Syntax
The syntax for Moonli is based around Python or Julia. This means it should be accessible to a wider audience who are familiar with these languages but unfamiliar with Lisp.
Extensible
Moonli syntax is defined using Parsing Expression Grammar. The resulting grammar has two entry points to extend Moonli syntax. This makes it easy to extend Moonli to your favorite Common Lisp construct!
Common Lisp and thus, Moonli, is mutable, but can be used in a functional manner. It is amongst the pioneers of multiple dispatch. It supports multithreading. SBCL supports SIMD instructions on x86-64 processors. C libraries can be used through the Common Foreign Function Interface. This includes access to CUDA. These days, experimental support for calling functions in Python libraries is also available.
Contributions welcome!
We do a Pull Request contributions workflow on GitHub. New users are always welcome!