Devlog
Building a language, in the open
Notes from the construction of the NL toolchain — the decisions, the dead ends, and the tests that keep it honest. Detailed working notes (in French) live in the repository's journal/ directory.
The site that builds itself
nlvm.dev moved into its own repository under a new nlvm-lang GitHub organization, and the site itself is now generated by an NL program: a 235-line Build.nl that templates every page and pulls its live numbers — test counts, versions, source listings — straight from running the toolchain.
Liskov by the compiler, not by convention
A new demo, 07_liskov, built around one specific rule: an overriding method's throws clause may only keep or narrow a parent's checked exceptions, never widen them — E016/E017, Liskov substitution checked at compile time instead of left to code review.
Proving parallelism in a browser tab: the HTTP server demo
Building 06_http_server: one OS thread per connection, a mutex-guarded shared Server instance, whitelist-based routing, and a "fire 5 parallel requests" button that turns real concurrency into something you can watch happen.
Teaching the VM to remember: stack traces & StackOverflowException
How exceptions gained real stack traces — a line-number table in the bytecode, a shadow call stack in the VM, an empirically calibrated recursion limit, and the subtle art of not tracing your own constructor.
July 2026 · releases 0.1.0 → 0.5.0From spec to running VM: the initial build
One Rust workspace, a vertical-slice strategy, and a YAML test runner driving development from day one. Phase by phase: expressions, semantic checks, objects, inheritance and exceptions, closures, enums, and a single-file program format.