Parent: #475 Related: #460, #461, #480, #582
Problem
Intl.DisplayNames.prototype.of re-reads the formatter's internal \0opts object (type, fallback, languageDisplay, and style) plus \0locale through ordinary named-property lookup on every steady call. These values are fully normalized during construction and immutable by specification. Valid language/currency canonicalization also allocates multiple arena fragments per call.
The benchmark boundary uses only public Intl.DisplayNames APIs and byte-identical system-JSC outputs across English language, region, script, and currency rows. The distinct locale-data/composition gaps discovered by the differential are tracked in #582 and are excluded explicitly, not hidden by an order-insensitive checksum.
Scope
- Freeze a steady
of()row with construction outside the timer, equal work, exact string hashing, and language/region/script/currency option controls. - Publish one formatter-owned immutable native resolved record after all user option getters/coercions complete.
- Consume that record in
of()andresolvedOptions()without repeated generic internal option traversal. - Bound canonicalization scratch and retain only bytes whose lifetime requires object ownership.
- Preserve validation, aliasing, case canonicalization, fallback, missing-name behavior, and exact observable coercion order.
- Keep #582's generated locale-data work separate.
No-workaround rules
- No input/code/source recognition, benchmark-only path, system ICU/JSC dependency, unbounded cache, skipped validation, or locale omission presented as speed.
- Do not modify stacks, queues, jobs, Promise/microtask, or Worker lifecycle code.
Acceptance
- Committed public benchmark control agrees byte-for-byte with system JSC and exceeds the timing floor.
- Exact-parent repeated samples preserve the checksum and attribute wall/CPU, allocation, GC, retained memory, property locks, and RSS.
- OOM publication rollback, bounded heap, moving/concurrent GC, shared-realm read-only use, no-GIL, and TSan pass.
- DisplayNames + full Intl402 test262 and full units have no regressions.
- #582 remains visible for excluded semantic/data differences.