diff --git a/docs/benchmarks.md b/docs/benchmarks.md index 7f17342..b9c856d 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -117,6 +117,23 @@ patched. trap, a public behavior change; `unowned(unsafe)` is a dangling pointer. Recovering this ~9% requires a design decision (an arena/index-based tree, 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