Nujel
A tiny, easy to embed Lisp dialect. While providing a scripting system for WolkenWelten was what started the development effort for Nujel, it is now trying to become useful for other scripting tasks as well.
Performance
While Nujel is still quite slow, it is definitely not the slowest runtime 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.
Syntax
A lot of the language is still undocumented, this is because I want to preserve myself the ability to fine-tune those parts of the language as I develop a better feeling for what works and what doesn't. To read about parts of Nujel that are very unlikely to change you can look at the LANGUAGE.md document in this repository.
Current status
Here is a collection of features already implemented, or about to be finished.
- Garbage collection (simple Mark-and-Sweep for now)
- Extensive test suite
- Lexical scoping
- Exceptions
- WASM support
- Formatted output (inspired by Python/Rust/Zig)
- Maps (using binary trees)
- Macros (expander written in Nujel itself)
- Bytecoded (compiler/assembler/disassembler all written in Nujel)
- Constant Folding
- Module system
- "Stackless" funcalls (not using the C call stack for Nujel funcalls)
- Tail-call optimization
- Continuations
- Value Types
- Fibers (preemtible!)
- NaN Boxing
- 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 |