v0.7.0
Highlights
Added
- SLG tabling engine (
table-variant.lisp,tabling.lisp): variant-check keys, per-query table sessions, answer tables, and fixpoint iteration, threaded through the proof-state continuation so builtin-dispatched goals inherit the active tabling context - Benchmarks harness (
benchmarks/): in-process micro-benchmarks and a cross-engine comparison script against SWI-Prolog, Trealla, and Scryer Prolog on a shared, checksum-verified workload - CI matrix covering
x86_64-linuxandaarch64-linux
Correctness / ISO conformance
get_code/peek_codetrack end-of-stream identically toget_char/peek_charper ISO 8.11.3/8.11.4; stream alias validation shared across IO builtins- Goal-dispatch and DCG expansion hardened; finite-domain constraint handling refined
Performance
- Environment indexing in unification uses a bounded overlay over an immutable base table instead of a full rehash on every binding, avoiding an O(n) rebuild per variable binding
Refactor
- Parser, term/atom builtins, and source-loader split into focused modules (lexer/grammar layers, term-inspect/compare/construct, atom-ops/text-conversion/atom-number-conversion, source-io/directives/registry/rollback) with no behavior change
- Regression suite reorganized into thematic files with a shared query helper lifted into
tests/support/core.lisp
Documentation
- Architecture, API reference, builtin goals, querying, semantics, development, and troubleshooting guides synced with the module split and the new tabling and benchmarking surfaces
Full changelog: https://github.com/nerima-lisp/cl-prolog/blob/main/CHANGELOG.md