Promise combinator fast path for non-thenable elements
4ed24b8
The ECMAScript spec mandates that Promise.all/allSettled/any/race call Promise.resolve(element) for each input, which checks for a callable .then property. For non-thenables this produces a fulfilled Promise whose sole purpose is to queue the downstream callback as a microtask — pure allocation overhead. The optimisation is only safe if the thenability check is performed without observable side effects.
This commit adds a fast path that skips allocating an intermediate Promise.resolve(value) JSPromise cell for provably non-thenable elements, instead queuing the resolver microtask directly. A new isNonThenable predicate gates the optimisation.
Significance
Benchmarks show 1.4–1.7x speedup for arrays of primitives or plain objects, but the isNonThenable predicate must be airtight: any false positive changes observable ECMAScript behaviour.
Audit directions
a Aaaaaaa Aaaaaaaaaa Aaa Aaaa Aaaaaaaa Aaaaaaa Aaaaaaaa Aaaaaa Aa Aa Aaaaaaaaaaa Aa Aaaaaaaaaaaaaaa Aaaa a Aaaaaaaaa Aaaaa Aa Aaaaaaaaaaaaa Aaaaaa Aaaa Aaaaaaaa Aaaaa Aaaaaaaaaaaaa a Aaaaaaaa Aa a Aaaaaaaaa Aaaaaaaaaaaaaa Aaaaaa Aaaaaaa a Aaa Aaaaa Aa Aaaaaaaaaaaaaa
a Aaaaaaaaaaa Aaaaa Aaaaaaaaaaaaaa Aaaaa Aaaaaaa Aaa Aaaaaaaaaaaa Aaaaaa Aaaaaaaaa Aa Aaaaa Aaaaaaaaa Aaaaa Aaa Aaaaaaaa Aaa Aaaaa Aaaa Aaaa Aaa Aaaa Aaaaa Aa Aaa a Aaaaaaaaaaaaaaa Aaaaa Aaaaaaaaaaa Aaaaaaaa Aaaaaa Aa Aaaaa Aaaaaaaa Aa Aaaaaaaaaaaaaaaaaa Aa Aa Aaaaaaaaaaaa Aaaaaaaaaa
a Aaaaaaaaaaaaaa Aaaaaaaaa Aaaaaaaaaa Aaaaaaa Aaaaaaaa Aa Aaaaaa a Aaaaaaaaaa Aaaaaaaa Aa Aaaaaa Aaaa Aaaaaa Aaa Aa Aaa Aaaaaaaaa Aaa Aaaaaaaaa Aaaa Aaaaa Aaaaaaaaaaaa Aaa Aaaa Aaaaaaaaa
a Aaaaaaaaa Aaaaaaaaaa a Aaaaaaaaaaaaaaaa Aaaaaaaaaaaaaaa Aaaaaa Aaaaaaaaaa Aaaaaaaaaa Aaaaaaaaa Aaaaa Aa Aaaaaaaa Aa Aaa Aaaa Aaaa Aaaaaaaa Aaa Aaaaaaaaaa Aaaaaaaaa Aaaaaaaaa
a Aaaaa Aaaaaaaaaaaaaa Aa Aaa Aaaaa Aaaaaaaaaaaa Aaaaa Aaaaaaa Aaaaaaaaaa Aaa Aaaaa Aaa Aaaaaaa Aaaaaaaaaaaaaaaa Aaaaaa Aaa Aaaa Aaaaaaaa Aaa Aaaaaa Aaaaaa Aaaaa Aaaaa Aaaaaaaaaaaaaaa
🔒The soundness of the new thenability predicate across object model edge cases is worth close inspection — audit directions included.
Subscribe to read more