docs(benchmarks): record the pass-29 dead end and the #8 weak-parent decision
The byte-path close-quote consume candidate measured NEUTRAL in an interleaved A/B despite the sampler attributing ~4% of parse to the advance() chain it replaced: decoding one ASCII scalar into a small-string-backed Character costs about the same as consume's literal-matching path. Recorded under Known structure of the gap so no future round redoes it, with the meta-lesson that sample attribution overstates single-character round trips and only the interleaved A/B verdict counts. Also records the #8 decision: the TreeNode weak-parent side-table cost (~9% of parse) is accepted for now. unowned is rejected outright since a trap after release contradicts the never-crash posture and the documented nil-after-release behavior; the arena/index-based tree remains the designed future path, sequenced after the scanning-architecture work, which carries ~47% of parse to this finding's ~9%.
This commit is contained in:
parent
2b6da0d0a0
commit
36f1485f2e
@ -117,6 +117,23 @@ patched.
|
|||||||
trap, a public behavior change; `unowned(unsafe)` is a dangling pointer.
|
trap, a public behavior change; `unowned(unsafe)` is a dangling pointer.
|
||||||
Recovering this ~9% requires a design decision (an arena/index-based tree,
|
Recovering this ~9% requires a design decision (an arena/index-based tree,
|
||||||
or an API-versioned semantics change), not an optimization pass.
|
or an API-versioned semantics change), not an optimization pass.
|
||||||
|
**Decided (#8, closed): accept for now.** Switching `parent` to `unowned`
|
||||||
|
is rejected outright (a trap after release contradicts the never-crash
|
||||||
|
posture and breaks documented nil-after-release consumers); an
|
||||||
|
arena/index-based tree is the designed future path but is sequenced AFTER
|
||||||
|
the scanning-architecture work, because scanning carries ~47% of parse to
|
||||||
|
this finding's ~9% and the arena is a large, correctness-sensitive change
|
||||||
|
that should not be taken for the smaller lever first. Reopen #8 when the
|
||||||
|
scanning lever has landed and the remaining gap justifies it.
|
||||||
|
- **Dead end, do not redo (measured after pass 28):** replacing
|
||||||
|
`consumeAttributeValueCloseQuote`'s `advance()` with the byte-path
|
||||||
|
`consume(_:)` (so the already-byte-confirmed closing quote is consumed
|
||||||
|
without being decoded into a buffered `Character`) measured NEUTRAL in an
|
||||||
|
interleaved A/B despite the sampler attributing ~4% of parse to that
|
||||||
|
`advance()` chain: decoding one ASCII scalar into a small-string-backed
|
||||||
|
`Character` and dropping it costs about the same as `consume`'s
|
||||||
|
literal-matching path. Sample attribution at this granularity overstates
|
||||||
|
single-character round trips; trust only the interleaved A/B.
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user