Hi Amemiya, This sounds like a reasonable approach, fast-paths for a valid NoElements protector is a pattern we use elsewhere so it makes sense to use it for Array.prototype.flat too. Please share your patch on Gerrit and we can discuss details there, you're welcome to put me as a reviewer.
Cheers, Leszek On Wed, Jan 28, 2026 at 10:33 AM Amemiya Riya <[email protected]> wrote: > Hi V8 team, > > I’m working on a patch to add a C++ fast path for Array.prototype.flat > (2-pass: precompute output length, preallocate, then write directly). > This is modeled after JSC’s C++ implementation but adapted for V8’s > elements/protector model. > > Summary of changes: > - Add runtime fast path for Array.prototype.flat > - Preconditions: FastJSArray + NoElements/ArraySpecies protectors intact > - Proxy/accessor/custom elements bail out to existing slow path > - Recursive flatten only when elements are JSArray; otherwise bail > - If length exceeds 2^53-1, throw TypeError (same as spec) > > Why: > - Current implementation writes element-by-element via property creation. > - For large arrays / deep nesting, we can significantly reduce overhead. > > Correctness: > - holes are skipped (no property), consistent with spec > - fallback is always used when protos/Proxy/accessors exist > > Performance (single-run huge array): > - input: outer=20000, chunk=1024 (output length 20,480,000) > - d8 fast (with patch): 58ms > - d8 slow (NoElements invalidated): 924ms > - speedup: ~16x > > Tests run: > - mjsunit/harmony/array-flat > - mjsunit/harmony/array-flatMap > - mjsunit/harmony/array-flat-species > - mjsunit/harmony/array-flatMap-species > - (additional large test run completed) > > I can share the patch and more detailed numbers if helpful. > Is this direction acceptable, or would you recommend any constraints or > additional checks? > > Thanks! > > -- > -- > v8-dev mailing list > [email protected] > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to the Google Groups > "v8-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/v8-dev/fa39a8c3-7aca-4c29-ac4b-bd34e70d44b6n%40googlegroups.com > <https://groups.google.com/d/msgid/v8-dev/fa39a8c3-7aca-4c29-ac4b-bd34e70d44b6n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/v8-dev/CAGxd1t8dirA-t9psdYcb5BkXbg1taGCPievVVGygRyy%3DQYqbqA%40mail.gmail.com.
