0.1.0-SNAPSHOT (snapshot)
Pre-release
Pre-release
Prune unreachable spliced library defuns and dedup the JVM constant pool The ci-spec corpus class had 14 constant-pool entries of headroom left under the JVM 65535 class-format ceiling (todo-118). Two fixes: - LibraryDefunPruner: a default-on AST pre-pass at the end of the compile-path splice chain (CLI / playground / corpus tests) that drops linalg/vec/json/url/prelude definitions unreachable from the user program. A reference is any symbol occurrence (quoted data included) plus string-literal substrings; usocket is excluded (its with-* macros synthesize calls) and (setf (vec:aref ...)) -> vec:aset is a hardcoded edge. Bails on a residual runtime load/require; skipped under --dynamic and the new --no-prune escape flag. - ConstantPool (am.ik.jvm) now dedups entries by serialized bytes. This was the dominant fix: 47% of the corpus pool was byte-identical repeats, and structural sharing cascades through composite entries. Corpus pool: 65,520 -> 5,647 entries (guarded at <= 52,000 in JvmClassShakerCorpusTest). Ordinary programs shrink too: tiny-llm .class 137 -> 90 KB, wasm 288 -> 156 KB, component 293 -> 162 KB, with stdout identical across all four backends. Details in .kb/library-defun-pruning.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>