Repository navigation
luapure v0.1.0
Pre-release
Pre-release
[0.1.0] — 2026-06-28
First release. Targets PUC-Lua 5.4.8.
Added
- Engine. Pure-Go port of PUC-Lua 5.4.8: instruction set, single-pass
lexer+parser+codegen (no AST), and the VM dispatch loop. - Standard libraries. base, string (incl. patterns and
string.pack/
unpack), table, math (xoshiro256** PRNG, bit-identical to PUC), os, io,
coroutine, utf8, debug, andrequire/package. - Precompiled chunks. Dump/undump ported from
ldump.c/lundump.c; output
is byte-identical toluac 5.4.8on a 64-bit little-endian host, and luapure
loadsluacoutput and vice versa. - Embedding API. Table create/read/write, Go-callback argument checking
(Check*/Opt*),ToValue/FromValueconversion, structured*LuaError
withValue()/Traceback(), userdata with metatables and uservalues,
sandboxing (NewSandbox/RunWith), cooperative cancellation (SetContext),
file loading (LoadFile/DoFile/CompileReader), and lifecycleClose. - Version identifiers.
luapure.Version/VersionString()and the Lua
global_LUAPURE_VERSION("luapure 0.1.0 (Lua 5.4.8)");_VERSIONstays
exactly "Lua 5.4" for PUC conformance. - Debugger. Breakpoint / step / pause core, exposed over the Model Context
Protocol (stdio + HTTP,debugmcp) and the Debug Adapter Protocol (TCP,
debugdap), with standalone binaries undercmd/. - Conformance. 30/33 of the official Lua 5.4 test files pass — the PASS-able
ceiling; the three remaining are structural won't-fixes (seeROADMAP.md). - Docs. README with quickstart,
docs/FILEMAP.md(PUC↔Go map), runnable
embedding examples,make doc/make doc-web.
Notes — intentional divergences from PUC
Observable semantics still match PUC; these are structural:
- GC delegated to the Go runtime; weak tables via
weak.Pointer,__gcvia
runtime.SetFinalizer+ a drain queue. Valueis a tagged struct, not NaN-boxing (Go's precise GC must follow
pointers).- Errors unwind via
panic/recoverinstead oflongjmp. - Coroutines are goroutines handing off over channels.
- Configurable memory-limit caps stand in for PUC's malloc-failure path (Go
cannot turn OOM into a catchable error).
Full changelog: CHANGELOG.md