Globals are program state, so they get a section rather than a frame
This commit is contained in:
parent
f231f62f52
commit
244f83fe53
23
DISCUSS.md
23
DISCUSS.md
@ -21,14 +21,23 @@ the stack, or a separate buffer.
|
|||||||
The real question is **which** globals. A program has hundreds and a listing of all of them is the backtrace problem
|
The real question is **which** globals. A program has hundreds and a listing of all of them is the backtrace problem
|
||||||
again: the thing you want is buried by the thing you don't.
|
again: the thing you want is buried by the thing you don't.
|
||||||
|
|
||||||
**Direction settled in conversation: per frame, beside the locals.** Opening a frame shows that function's locals *and*
|
**Direction: one Globals section, scoped to the stack.** Per-frame was considered and dropped. The reason is that a
|
||||||
the globals that function references. Each frame answers for itself — frame 0 shows what the innermost function touched,
|
global is not part of a frame — it is program state the frame happened to touch — so nesting it under one implies an
|
||||||
frame 3 shows what that one touched, and a global appearing in several frames is informative rather than redundant,
|
ownership that is not there, and the same name then appears once per frame that reads it.
|
||||||
because it says the whole chain was working with it. The compiler already knows the reference set per function, so
|
|
||||||
nothing is guessed and nothing is configured.
|
|
||||||
|
|
||||||
What this deliberately does not solve: a global nothing in the current frame names but that you still want visible —
|
So: a section of its own, whose contents are the **union of the globals every frame on the current stack references**.
|
||||||
the sand grid while stopped in a helper that never mentions it. That is watching, and it is item 10 rather than part of
|
That keeps the compiler doing the choosing (the reference set per function is already known) without repeating anything,
|
||||||
|
and without falling back to listing all of a program's globals, which is the backtrace problem again.
|
||||||
|
|
||||||
|
Two refinements that came out of the same conversation:
|
||||||
|
|
||||||
|
- **Annotate each entry with which frames touch it.** This recovers what per-frame would have told you — "the whole
|
||||||
|
chain is reading this" reads differently from "only the innermost one is" — at no cost in duplication.
|
||||||
|
- **Order by the innermost frame that touches it.** A deep stack makes the union large again, and proximity to the
|
||||||
|
error is the ordering that puts the likely culprit on top.
|
||||||
|
|
||||||
|
What this deliberately does not solve: a global that nothing on the stack names but that you still want visible — the
|
||||||
|
sand grid while stopped in a helper that never mentions it. That is watching, and it is item 10 rather than part of
|
||||||
this.
|
this.
|
||||||
|
|
||||||
## 2. The break buffer should appear by itself
|
## 2. The break buffer should appear by itself
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user