diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-26 18:42:42 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-26 18:42:42 -0700 |
| commit | b3ec548422f6ec63f40e17cdca72f86927aa4f4e (patch) | |
| tree | 4ef9023f79d31f435a8058b3d52e3944924a8033 /docs/roadmap.md | |
| parent | 0e7c50b22d7f900b9c3c8db3765f3b7af41e5dd1 (diff) | |
| download | Simple-b3ec548422f6ec63f40e17cdca72f86927aa4f4e.tar.gz Simple-b3ec548422f6ec63f40e17cdca72f86927aa4f4e.zip | |
More incremental loading
and compilation.
Diffstat (limited to 'docs/roadmap.md')
| -rw-r--r-- | docs/roadmap.md | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/docs/roadmap.md b/docs/roadmap.md index 75ee8d54..29bc77de 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -35,7 +35,7 @@ signed and unsigned fields and compare ideal evaluation with generated code. ### Reliable incremental builds Chapter 28b now checks the reachable source-backed inputs before reusing saved -IR, including transitive dependencies, bundled sources, and missing inputs. +IR, including transitive dependencies and missing inputs. The remaining work is a build driver with recorded input identities, beyond those conservative timestamp checks. An unchanged public signature does not establish compatibility: optimization imports bodies and constants too. @@ -46,6 +46,11 @@ timestamps and changed library search paths. Distinguish rebuildable source from incompatible source-free libraries; their installation timestamps alone cannot validate a set of objects compiled against one another. +Native separate compilation should also detect a library changing between +reading its types and linking the executable. One possible mechanism is a +SHA-256-named symbol that callers require and the matching library defines. +This remains future link-time validation; Eval2 assumes a coherent build. + An unchanged build should do no compilation or linking. Publish outputs only after successful compilation, and relink when an object or other link input changes. Start with a small build driver and conservative rebuilding of every @@ -53,17 +58,19 @@ dependent; finer interface/body fingerprints can follow. The [incremental-build design](../skills/incremental-builds.md) records the input ownership rules and validation cases. -### Selective loading of library IR +### Function-level loading of library IR -Importing `sys.io.p` currently loads all ten units bundled in `sys.o`. -Independent, unrelated objects can remain unloaded, but selecting an object -reconstructs all its saved IR and follows its recorded dependencies. +Chapter 28b emits one object per compilation unit and reads declarations and +`SummaryNode` information without loading bodies. Optimization can request an +object's IR for inlining; Eval2 resolves its object dependencies before +execution, then materializes bodies on executed calls. Suspected +initialization cycles request full loading before type checking completes. +A requested object still reconstructs all of its functions. -Design member-level IR loading and dependency discovery together. Splitting -objects alone is insufficient while reexports and unused function bodies -still pull in their dependencies. Preserve type identity, initialization rules, +Further selectivity would require a function-body index within each object +and narrower metadata discovery. Preserve type identity, initialization rules, and imported escape summaries. Loading, initializing, and emitting a class -are separate decisions. This optimization is independent of making +remain separate decisions. This optimization is independent of making incremental rebuilding correct. ### Deterministic inlining |
