The Nujel Programming Language
Nujel is a Lisp dialect intended to be small, fast and easy to embed in existing codebases.
Nujel is small
Currently (2022-09-02) a static Linux binary using the musl libc is about 312KB in size. Dynamically linked ones are about 276KB and using UPX on that one yields a 92KB binary.
Nujel is fast
Nujel is already quite fast, at least compared to other tiny/embedded lisps/schemes. It will get quite a bit faster in the future as well since right now there are still lots of obvious optimizations available.
Nujel is embeddable
To make embedding easier Nujel is written mostly in Nujel itself, only requiring a small VM which is written in C99 that needs no external dependencies apart from the libc. You can also generate a single header file for Nujel using the make nujel.h
command which you can then use like most stb libraries.
Nujel is portable
Because of the embeddable nature of Nujel it should be quite portable, since the existing codebase might be targeting something other than *nix/amd64. To make sure that Nujel stays portable we make extensive use of the CI to test on various platforms, as well as manual testing of less common configurations. The following Platforms are supported/tested:
μArch | OS | Toolchain | Status |
---|---|---|---|
amd64 | Windows Server 2019 | 2022 | mingw32 | mingw64 | ucrt64 | clang64 | GitHub CI |
amd64 | MacOS 11 | 12 | clang | GitHub CI |
amd64 | Ubuntu 20.04 | 22.04 | gcc | clang | GitHub CI |
amd64 | Arch Linux | gcc | clang | tcc-git | bmake+gcc | SourceHut CI |
aarch64 | Debian Sid | gcc | SourceHut CI |
amd64 | Guix | Rocky Linux | Alpine Linux | gcc | SourceHut CI |
amd64 | FreeBSD | OpenBSD | NetBSD | system default | SourceHut CI |
armv7 | aarch64 | RaspberryPI OS | gcc | Semi-regular manual testing |
amd64 | DragonflyBSD | HaikuOS | system default | Irregular manual testing |
WASM | Modern Browsers | Emscripten | Irregular manual testing |
macppc (big endian) | OpenBSD | gcc | Irregular manual testing |
amd64 | Windows 10 | Visual Studio | Irregular manual testing (still not quite stable) |