/Nujel

A small, embeddable Lisp dialect

Primary LanguageSchemeMIT LicenseMIT

Nujel

A fast, tiny and and embeddable Lisp dialect. This started out as an experiment to provide a fast scripting system for WolkenWelten, without bloating up the executable size. Now I'm just enjoying working on the runtime and language, trying to keep everything as simple as possible while improving performance.

Performance

To make sure that there are no performance regressions, benchmarks are regularly run which are also used to compare Nujel with other runtimes, if you like colorful charts you can see the results here here. Beware however that these benchmarks only test a tiny part of the language.

Syntax

A lot of the language is still undocumented, this is because I want to preserve myself the ability to change those parts of the language as I develop a better feeling for what works and what doesn't. You can look in the docs directory for documentation about the various parts of the Nujel language as well as how likely that part is to change.

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
  • WASM support (only via Emscripten)
  • 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
  • Printer written in Nujel
  • "Stackless" funcalls (not using the C call stack for Nujel funcalls)
  • Value types
  • Exceptions (without using setjmp/longjmp for improved portability, especially relevant for WASM/WASI)
  • Gopher client and terminal browser
  • Simple HTTP 1.1 client
  • (somewhat) useable object system
  • Binary/FASL format
  • Simple HTTP 1.1 server
  • Reader written in Nujel (requires FASL for bootstrapping)
  • Tail-call optimization (doesn't seem to be much of a problem right now)
  • Fibers

Current Limitations

These will be addressed in later versions

  • Static Heap (works far better than expected)

Documentation

I've started to write some documentation, which you can read here: https://nujel.net/

GitHub CI (Windows/MacOS/Ubuntu/WASM)

Master Develop
CI CI

sourcehut CI

Operating System Master Develop
Arch Linux (gcc) builds.sr.ht status builds.sr.ht status
Arch Linux (tcc-git) builds.sr.ht status builds.sr.ht status
Debian Sid / ARM64 builds.sr.ht status builds.sr.ht status
Guix builds.sr.ht status builds.sr.ht status
Rocky Linux builds.sr.ht status builds.sr.ht status
Alpine Linux builds.sr.ht status builds.sr.ht status
FreeBSD builds.sr.ht status builds.sr.ht status
NetBSD builds.sr.ht status builds.sr.ht status
OpenBSD builds.sr.ht status builds.sr.ht status