summaryrefslogtreecommitdiff
path: root/chapter28b/README.md
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-25 14:24:09 -0700
committerCliff Click <cliffc@acm.org>2026-10-25 14:24:09 -0700
commit0e7c50b22d7f900b9c3c8db3765f3b7af41e5dd1 (patch)
tree6bfc8e100d1e1a727fdeabbc8dcf0710d04ff29b /chapter28b/README.md
parent2d80a348bad4b1e3165bd955ceaff3e18a96e516 (diff)
downloadSimple-0e7c50b22d7f900b9c3c8db3765f3b7af41e5dd1.tar.gz
Simple-0e7c50b22d7f900b9c3c8db3765f3b7af41e5dd1.zip
Update incremental build checkmain
Diffstat (limited to 'chapter28b/README.md')
-rw-r--r--chapter28b/README.md19
1 files changed, 15 insertions, 4 deletions
diff --git a/chapter28b/README.md b/chapter28b/README.md
index f464fed4..0a7baa68 100644
--- a/chapter28b/README.md
+++ b/chapter28b/README.md
@@ -116,10 +116,18 @@ normal inlining heuristics. The combined graph goes through the normal
compilation phases, including peepholes, Opto and TypeCheck.
Dependencies between `CompUnit`s are recorded. An explicitly requested source
-file is always compiled. Other source files are recompiled if their object is
-missing, their source is newer, or a recorded dependency's object in the build
-directory is newer. These timestamp checks are not yet a complete incremental
-build system, there is some modest future work needed to finish this.
+file is always compiled. Before reusing another local object, `CompUnit` walks
+its recorded dependencies and checks every source bundled into each local
+object. A missing input or a newer source or dependency object forces parsing
+again, before saved types or IR are imported. This includes transitive
+dependencies: if A has inlined B, editing B's source invalidates A even while
+B's object is unchanged. A visited set lets this check follow cycles.
+
+Library dependencies use the same search paths for checking and loading.
+Object-only libraries must be supplied as a coherent build; timestamps alone
+cannot establish their compatibility. These checks are not a complete build
+driver: explicit requests still compile, and input hashes, compiler/ABI
+versions, and automatic relinking remain future work.
Loading currently works at the object granularity. Unrelated objects can stay
unloaded, but selecting an object loads its entire saved graph and follows its
@@ -163,6 +171,9 @@ constructors, initialization cycles across objects, shared static data, native
function thunks, and native library/client execution. Make also builds the
modular `sys` object used by the library tests. Clients can import that object
with `-L`; they do not need to parse the standard library's source again.
+`IncrementalBuildTest` checks reuse, transitive edits, bundled cycles, missing
+inputs, and changed library objects using controlled timestamps. It also
+compares native execution after an edit with a clean build.
`make release` builds the launcher jar and standard library; `make view`
starts the shared graph viewer.