Skip to content

v1.0.0

Choose a tag to compare

@davydog187 davydog187 released this 15 Jul 23:32
· 15 commits to main since this release
69e13a6

What's Changed

  • feat: lexer / parser in Elixir by @davydog187 in #95
  • feat: add comments to the AST by @davydog187 in #96
  • feat: compiler and register-based VM (Phase 0: Arithmetic operations) by @davydog187 in #98
  • Phase 2: Global variables with register assignment by @davydog187 in #99
  • feat(vm): Local variables by @davydog187 in #100
  • feat(vm): Conditionals by @davydog187 in #101
  • feat(vm): Loops by @davydog187 in #102
  • feat(vm): Basic Functions by @davydog187 in #103
  • feat(vm): Closures by @davydog187 in #104
  • feat(vm): Upvalues by @davydog187 in #105
  • feat: add AGENTS.md and CLAUDE.md by @davydog187 in #107
  • feat(vm): Tables by @davydog187 in #106
  • feat(vm): Native Function Calls by @davydog187 in #108
  • feat(vm): Generic For, Varargs, and Multiple Returns by @davydog187 in #109
  • feat(vm): String Concatenation by @davydog187 in #110
  • feat(vm): value encoding/decoding by @davydog187 in #111
  • feat(vm): integrate new Parser / Compiler / VM by @davydog187 in #112
  • feat(vm): Source Line Tracking & Call Stack by @davydog187 in #113
  • feat: Beautiful Stack Traces & Error Messages by @davydog187 in #114
  • feat: Type-safe arithmetic and comparison operations by @davydog187 in #116
  • feat: Protected calls with pcall and xpcall by @davydog187 in #115
  • feat: String standard library by @davydog187 in #117
  • feat(phase-6): Math & Table Standard Libraries by @davydog187 in #119
  • feat(phase-7): Metatables & Metamethods by @davydog187 in #120
  • feat(phase-7): Metatables & Metamethods by @davydog187 in #121
  • feat(phase-8): Add userdata support by @davydog187 in #122
  • feat(phase-8): Add require/package system by @davydog187 in #123
  • test: Add ArgumentError tests for setmetatable by @davydog187 in #124
  • feat(phase-9): Add Lua 5.3 test suite integration by @davydog187 in #125
  • feat: Implement select() stdlib function by @davydog187 in #126
  • feat: Add shebang support in lexer by @davydog187 in #127
  • feat: Add _G global table by @davydog187 in #128
  • Add \z escape sequence to skip whitespace in strings by @davydog187 in #129
  • Implement full varargs support for Lua 5.3 by @davydog187 in #130
  • feat: integrate styler by @davydog187 in #131
  • Implement load function by @davydog187 in #132
  • Add Lua function call syntactic sugar and improve parser robustness by @davydog187 in #133
  • feat(phase-10): Polish & Remaining TODOs by @davydog187 in #134
  • feat(phase-13): String pattern matching engine by @davydog187 in #135
  • feat(phase-16): Complete string.format with width/precision by @davydog187 in #136
  • feat(phase-11): Compiler Fundamentals by @davydog187 in #137
  • feat(phase-12): Complete metamethods support by @davydog187 in #138
  • feat(phase-14a): Stubs, bitwise fixes, and math return types by @davydog187 in #140
  • feat(phase-15): Debug library and module registration by @davydog187 in #139
  • feat(phase-17): Vararg expansion, scope fixes, and suite triage by @davydog187 in #141
  • feat: benchmark against Luerl and C Lua by @davydog187 in #143
  • fix: LuaJIT in CI by @davydog187 in #150
  • fix: test for loops with external variables by @davydog187 in #149
  • refactor: split out lua_test language tests by @davydog187 in #151
  • perf: right-size register tuple allocations by @davydog187 in #153
  • perf: O(N²) → O(N) upvalue collection in closure handler by @davydog187 in #154
  • perf: O(1) upvalue access by storing upvalues as a tuple by @davydog187 in #155
  • perf: fully tail-recursive CPS executor with line tracking off heap by @davydog187 in #156
  • fix: docs variable name by @kevinschweikert in #159
  • fix: encode atom to string by @kevinschweikert in #158
  • chore: agent orchestration scaffolding by @davydog187 in #160
  • chore: link plans to GitHub issues, add A14 for regression by @davydog187 in #175
  • chore: sync main and branch off in /next-plan workflow by @davydog187 in #176
  • feat(A0): 64-bit integer overflow wrapping for arithmetic and bitwise ops by @davydog187 in #177
  • chore(A0): post-merge cleanup by @davydog187 in #178
  • test(A1): pin missing-key table read behaviour by @davydog187 in #179
  • fix(lexer): handle multi-line comments at every bracket level and main.lua-style headers by @davydog187 in #180
  • chore(skill): commit scope is the subsystem, not the plan id by @davydog187 in #181
  • chore(skill): front-load commit-scope rule and add pre-push check by @davydog187 in #183
  • fix(parser): skip comment tokens between expression-list elements by @davydog187 in #182
  • feat(stdlib): pre-populate package.loaded with installed stdlib modules by @davydog187 in #184
  • fix(compiler): assign function declaration to in-scope local by @davydog187 in #185
  • chore(plan): block A8 on A16 _ENV semantics by @davydog187 in #187
  • fix(pattern): unblock pm.lua through line 110 by @davydog187 in #188
  • fix(vm): grow register tuple when multi-return expansion overflows by @davydog187 in #189
  • fix(pattern): thread VM state through gsub callbacks and fix capture order by @davydog187 in #190
  • fix(stdlib): set sentinel before executing required module by @davydog187 in #191
  • chore: resolve in-source TODOs by @davydog187 in #194
  • chore: upgrade to elixir 1.20, OTP 29 by @davydog187 in #192
  • fix(compiler): bind for-loop variable per statement to fix register reuse by @davydog187 in #195
  • fix(vm): handle missing upvalue cells in get/set_open_upvalue by @davydog187 in #196
  • feat(vm): implement Lua 5.3 _ENV semantics for global access by @davydog187 in #197
  • fix(vm): handle Lua 5.3 hex and string coercion for bitwise ops by @davydog187 in #198
  • feat(stdlib): implement math.fmod for bitwise.lua bit32 verification by @davydog187 in #199
  • fix(vm): align table key semantics with Lua 5.3 §3.4.11 by @davydog187 in #200
  • chore(release): refresh README and CHANGELOG for 1.0.0-rc.1 by @davydog187 in #201
  • fix(vm): track dead keys so pairs survives mid-iteration deletion by @davydog187 in #202
  • fix(vm): pass operands through varargs to metamethod closures by @davydog187 in #203
  • fix(vm): float division by zero yields ±math.huge, not raise by @davydog187 in #204
  • fix(lexer): treat vertical tab and form feed as whitespace by @davydog187 in #206
  • chore(plans): refill ready pipeline with verified-live A7/A8 follow-ups by @davydog187 in #207
  • fix(stdlib): table library functions honor __index, __newindex, __len by @davydog187 in #208
  • fix(vm): coerce string control values in numeric for (Lua 5.3 §3.3.5) by @davydog187 in #209
  • fix(stdlib): expose io as a table of sandboxed stubs by @davydog187 in #210
  • fix(vm): // and % with float-zero divisor return inf/nan, not raise by @davydog187 in #211
  • fix(vm): route ~= opcode through __eq metamethod by @davydog187 in #212
  • fix(vm): make <= and >= fall back through __lt per Lua 5.3 §3.4.4 by @davydog187 in #213
  • feat(error): every runtime error carries line and source info by @davydog187 in #214
  • fix(error): stdlib bad-arg raises auto-populate line and source by @davydog187 in #215
  • test(suite): document deliberate non-goals in lua53 suite by @davydog187 in #216
  • feat(stdlib): implement string.pack, string.unpack, string.packsize by @davydog187 in #217
  • feat(vm): inspect protocol for VM values via boundary display structs by @davydog187 in #218
  • feat(mix): add lua.eval, lua.suite, lua.bench mix tasks by @davydog187 in #220
  • fix(parser): thread position through bare-expression and unexpected-end errors by @davydog187 in #222
  • fix(error): prune internal frames from Lua.RuntimeException stack by @davydog187 in #221
  • perf(vm): fast-path the executor dispatch loop by @davydog187 in #223
  • fix: string pack warnings by @davydog187 in #224
  • chore(plans): scope B4-B8 perf follow-ups after PR #223 by @davydog187 in #226
  • build(benchmarks): add setup_luaport.sh to build luaport against lua@5.4 by @davydog187 in #225
  • perf(vm): fast-path Numeric.to_signed_int64 for in-range integers by @davydog187 in #227
  • build(bench): add quick mode + multi-n inputs to benchmark harness by @davydog187 in #230
  • chore(B7): defer plan; tuple cost crossover makes large tables a regression by @davydog187 in #231
  • feat(error): name the callee/target in attempt to call/index errors by @davydog187 in #228
  • chore(B4): defer plan; PC+elem dispatch is 9-15% slower than list-cons by @davydog187 in #232
  • docs(roadmap): consolidate B-series findings (B4, B6, B7, B8 + harness) by @davydog187 in #234
  • plans(B5): pivot from BEAM codegen to dispatcher + bytecode by @davydog187 in #236
  • feat(website): interactive Lua showcase site by @davydog187 in #239
  • fix: line number attribution for first line by @davydog187 in #240
  • perf(vm): add dense bytecode encoding + dispatcher for compiled prototypes by @davydog187 in #237
  • fix(parser): canonicalize unexpected-token error shape across five sites by @davydog187 in #241
  • fix(stdlib): convert dots to path separators in require() by @davydog187 in #242
  • fix(vm): restore caller's open_upvalues after nested execution by @davydog187 in #245
  • ci(dialyzer): cache PLT and split build/analyze steps by @davydog187 in #243
  • feat(vm/errors): structured error data + fix nested prefix wrapping by @davydog187 in #246
  • fix(compiler): expand multi-values in obj:method(...) calls by @davydog187 in #248
  • feat(suite): line-range skipping for Lua 5.3 official tests by @davydog187 in #249
  • chore: use 1.20.0-rc.6 by @davydog187 in #250
  • suite: triage and promote literals/goto/events/nextvar files by @davydog187 in #251
  • feat(stdlib): utf8 library + align integer-arith error wording by @davydog187 in #258
  • errors: thread operand hints into arith & bitwise type errors by @davydog187 in #270
  • fix(compiler): resolve FuncDecl head names at scope analysis by @davydog187 in #274
  • perf(vm): dispatcher coverage for table opcodes and :numeric_for by @davydog187 in #275
  • perf(vm): dispatcher coverage for closures, varargs, multi-return, loops, self, concat by @davydog187 in #277
  • fix(parser): adjust parenthesised call/vararg to a single value by @davydog187 in #278
  • feat(vm): configurable max call depth by @davydog187 in #283
  • feat(debug): track upvalue names; implement getupvalue/setupvalue by @davydog187 in #285
  • fix(vm): close open upvalues at do-block exit by @davydog187 in #286
  • test(suite): narrow gc.lua skip to the collectgarbage no-op region by @davydog187 in #287
  • feat(pattern): position capture () across find/match/gmatch/gsub by @davydog187 in #288
  • fix(vm): match PUC-Lua integer divide/modulo by zero semantics by @davydog187 in #292
  • test(vm): pin short-circuit depth-4 semantics; correct constructs skip by @davydog187 in #294
  • test(suite): split pm.lua skip into precise sub-ranges by @davydog187 in #295
  • fix(stdlib): table.unpack rejects oversized ranges by @davydog187 in #293
  • feat(stdlib): implement the os standard library by @davydog187 in #289
  • fix(pattern): validate gsub replacement string and value by @davydog187 in #291
  • feat(vm): populate debug.getinfo name/namewhat from the call site by @davydog187 in #290
  • chore(workflow): add Lua 5.3 suite triage orchestration scripts by @davydog187 in #296
  • docs(stdlib): add @SPEC and type defs across the public API by @davydog187 in #301
  • fix(vm): close open upvalues at if/while/for/repeat block exit by @davydog187 in #303
  • perf(stdlib): iolist string.format and plain-table sort/concat fast paths by @davydog187 in #299
  • docs(examples): add runnable embedding examples by @davydog187 in #300
  • docs(readme): rewrite for 1.0 positioning, quickstart, and tour by @davydog187 in #298
  • chore(suite): narrow constructs.lua skip with per-failure tracking by @davydog187 in #282
  • chore(workflow): add PR-feedback-stabilize and ship-issue-batch orchestration scripts by @davydog187 in #315
  • chore(workflow): post reviews to PRs and harden worktree git isolation by @davydog187 in #322
  • feat(error): lead rendered errors with location and gate ANSI on TTY by @davydog187 in #304
  • perf(vm): batch :set_list writes through Table.put_many/2 by @davydog187 in #321
  • perf(stdlib): parse string.format flags once, dispatch on integer specifier by @davydog187 in #317
  • perf(stdlib): use io_lib.format for string.format float conversion by @davydog187 in #319
  • perf(stdlib): batch write-back in table.sort plain fast path by @davydog187 in #318
  • perf(stdlib): defer string.format width padding to iolist by @davydog187 in #316
  • feat(vm): harden against allocation-bomb DoS and document sandboxing by @davydog187 in #305
  • chore(release): v1.0.0-rc.1 by @davydog187 in #323
  • perf(vm): document why depth-1 upvalues cannot be inlined in the closure tuple by @davydog187 in #325
  • perf(vm): split-storage tables (Erlang :array + map) by @davydog187 in #328
  • chore: use elixir 1.20 in CI by @davydog187 in #329
  • feat: add posthog by @davydog187 in #332
  • fix(vm): keep heap effects across protected-call error unwinding by @davydog187 in #333
  • fix(vm): pass raw error values through pcall and add §6.1 position prefix by @davydog187 in #335
  • chore(website): refresh OG image layout by @davydog187 in #339
  • test(vm): silence unused variable warning in pcall error-value test by @davydog187 in #338
  • fix(vm): return terse Lua error value from call_function, not terminal render (#336) by @davydog187 in #337
  • feat(os): seed os.clock origin at install, add os.time_ms/os.time_us by @davydog187 in #340
  • fix(api): deflua/2 preserves function name for guarded heads by @davydog187 in #344
  • chore(release): 1.0.0-rc.2 by @davydog187 in #345
  • ci(deploy): deploy deflua.com to Fly.io on merge to main by @davydog187 in #346
  • chore: roadmap hygiene, settle 1.0.0 suite gate (20/29), tostring(fn) fix by @davydog187 in #353
  • perf(vm): compile bitwise ops and set_list multi-return tails by @davydog187 in #347
  • perf(table): O(1)-per-step hash iteration via memoized order index by @davydog187 in #349
  • fix(stdlib): route cache_module_result through Table.put so required modules appear in pairs(package.loaded) by @davydog187 in #356
  • perf(table): cache array border for O(1) #t on no-hole tables by @davydog187 in #350
  • fix(vm): return terse error value for ArgumentError at protected-call boundary by @davydog187 in #354
  • feat(vm): plumb per-call source lines through the compiled dispatcher by @davydog187 in #355
  • fix(parser): report syntax errors at the real offending token by @davydog187 in #357
  • test: make default mix test pass quietly and deterministically by @davydog187 in #358
  • perf(vm): size dispatcher register files from emitted bytecode by @davydog187 in #359
  • perf(vm): honest max_registers — drop register slack on both VM engines by @davydog187 in #327
  • perf(vm): close the fibonacci gap with Luerl — register reclaim + lazy call frames by @davydog187 in #360
  • feat(bytecode): coverage guard + drop dead :set_global opcode by @davydog187 in #362
  • feat(parser): expose structured parse errors (parse_structured + Error.to_map) by @davydog187 in #363
  • fix(parser): blame the opener for unclosed tables and empty bracket lists by @davydog187 in #365
  • fix(parser): propagate deep errors past function-call argument lists by @davydog187 in #366
  • feat(vm): conformant goto/label on both engines by @davydog187 in #364
  • feat(vm): add configurable :max_instructions instruction budget by @davydog187 in #320
  • chore(release): 1.0.0-rc.3 by @davydog187 in #367
  • fix(stdlib): Lua 5.3 suite conformance for strings, sort, math (20/29) by @davydog187 in #368
  • docs(release): roadmap refresh, perf baseline, 1.0 finish-line scope by @davydog187 in #370
  • perf(stdlib): close the Luerl gap on string.format and table.sort by @davydog187 in #369
  • fix(vm): encode Elixir nil to Lua nil instead of the string "nil" by @smn in #375
  • fix(string.rep): allocate proportionally to result, not repeat count by @smn in #376
  • fix(lua): hand callbacks Lua.t regardless of entry point by @davydog187 in #379
  • docs: curate the HexDocs module sidebar for 1.0 by @davydog187 in #378
  • fix(api): tighten public surface before the 1.0 freeze by @davydog187 in #380
  • docs(release): sync roadmap, changelog, guides, and README for 1.0.0 by @davydog187 in #381
  • fix(api): name the callee in call_function/3 errors by @davydog187 in #383
  • fix(parser): gate parse-error ANSI on IO.ANSI.enabled?/0 by @davydog187 in #385
  • fix(errors): render exception messages lazily so ANSI gating holds by @davydog187 in #386
  • docs: fix exception-handling examples and Lua.new option doctests by @davydog187 in #387
  • docs: add brand logo to README and docs sidebar by @davydog187 in #388
  • perf(table): sort from_data fold to avoid O(n^2) table builds by @smn in #389
  • errors: unify public runtime exceptions around Lua.RuntimeException by @davydog187 in #390
  • release: cut 1.0.0 by @davydog187 in #391
  • errors: drop the :message field from public runtime exceptions by @davydog187 in #392
  • errors: make Exception.message/1 plain; add Lua.format_exception/1 by @davydog187 in #393

New Contributors

  • @smn made their first contribution in #375

Full Changelog: v0.4.0...v1.0.0