Nujel
A small, portable Lisp dialect for games and other latency sensitive applications. Development was started in order to give WolkenWelten a scripting runtime. While Nujel is still very early in development, and for the most part just an incompatible Scheme, it is evolving rapidly.
Performance
While Nujel is still quite slow, it is definitely not the slowest Lisp out there. To make sure that there are no performance regression benchmarks are regularly run which are also used to compare Nujel against other runtimes, if you like colorful charts you can see the results here here.
Current status
Here is a collection of features already implemented, or about to be finished.
- Extensive test suite
- Lexical scoping
- Exceptions
- WASM support
- Formatted output (inspired by Python/Rust/Zig)
- Maps (using binary trees)
- Garbage Collection (Mark-and-Sweep for now)
- Macros (expander written in Nujel itself)
- Bytecoded (compiler/assembler/disassembler all written in Nujel)
- Tail-call elimination
- NaN Boxing
- Modules
- Continuations
- Fibers (preemtible!)
- Serializable Fibers
Current Limitations
These will be addressed in later versions
- Static Heap (works far better than expected)
- No file streams/sockets (can only read/write files in their entirety)
Try it out
You can try out a current WASM Build over here.
GitHub CI (Windows/MacOS/Ubuntu)
| Master | Develop |
|---|---|
sourcehut CI
| Operating System | Master | Develop |
|---|---|---|
| Arch Linux (gcc) | ||
| Arch Linux (clang) | ||
| Arch Linux (tcc-git) | ||
| Arch Linux (bmake) | ||
| Debian Sid / ARM64 | ||
| Guix | ||
| Rocky Linux | ||
| Alpine Linux | ||
| FreeBSD | ||
| NetBSD | ||
| OpenBSD |