Skip to content

0.1.0-SNAPSHOT (snapshot)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Jul 12:17
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>