summaryrefslogtreecommitdiff
path: root/chapter28b/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'chapter28b/README.md')
-rw-r--r--chapter28b/README.md10
1 files changed, 6 insertions, 4 deletions
diff --git a/chapter28b/README.md b/chapter28b/README.md
index 008f34d2..f313dcf3 100644
--- a/chapter28b/README.md
+++ b/chapter28b/README.md
@@ -191,9 +191,10 @@ already known to be initialized.
The compiler must also reject cycles in which class initializers depend on one
another. Simple keeps *function summaries* that list calls and classes that
may need initialization, so the compiler can check for cycles before loading
-bodies. If a possible cycle appears, it loads all remaining bodies, optimizes,
-and checks again. A constant returned by a some other code outside the cycle
-can make a branch disappear and remove the cycle.
+bodies. After ordinary optimization, any remaining possible cycle is an
+error; the compiler does not load more bodies to try to disprove it. Inlining
+and other optimizations can remove a dependency, so changing optimization
+decisions can change whether a program passes this check.
All required object files must be found before execution. Native code is
linked before the program starts. Eval2 can wait until a call needs a body
@@ -219,7 +220,8 @@ the modular `sys` objects used by the library tests. Programs can import
inputs, and changed library objects using controlled timestamps. It also
compares native execution after an edit with a clean build.
`SelectiveLoadingTest` checks summarized calls, loading for inlining, native
-link dependencies, and refinement of a potential initialization cycle.
+link dependencies, and rejection of a possible initialization cycle without
+loading more bodies.
`make release` builds the launcher jar and standard library; `make view`
starts the shared graph viewer.