Drop the compiler image from no-eval binaries (footprint)
An AOT-compiled app only needs the analyzer/back end at runtime to compile from source — eval / load-string / load-file. Macros are expanded at build time and a require of a baked namespace no-ops, so a closed app that never compiles at runtime carries the compiler image (~0.8MB) as dead weight. Under --tree-shake, when reachability is trustworthy (no bail) and no reachable code references eval/load-string/load-file/load-reader/load, omit host/chez/seed/image.ss + compile-eval.ss from the runtime manifest. bld-tree-shake returns the flag alongside the shaken forms; bld-emit-runtime filters the manifest. Measured: build-app 9.84MB -> 9.05MB, still runs. Safety verified: an app that evals keeps the compiler (eval is a bail + compile ref) and eval works at runtime. build-smoke asserts the compiler is gone in the no-eval app; full make test green.
This commit is contained in:
parent
20c5b92ea8
commit
3c5d548b70
3 changed files with 61 additions and 35 deletions
|
|
@ -92,4 +92,8 @@ fi
|
|||
if grep -q 'def-var! "app.util" "twice"' "$out.build/flat.ss"; then
|
||||
echo " FAIL: --tree-shake did not drop the unreachable twice macro"; exit 1
|
||||
fi
|
||||
echo "build smoke: passed (release + optimized + direct-link + tree-shake)"
|
||||
# The app never evals, so the compiler image (analyzer/back end) is dropped.
|
||||
if grep -q 'def-var! "jolt.analyzer"' "$out.build/flat.ss"; then
|
||||
echo " FAIL: --tree-shake kept the compiler image in a no-eval app"; exit 1
|
||||
fi
|
||||
echo "build smoke: passed (release + optimized + direct-link + tree-shake + compiler-drop)"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue