On Mon, 31 Aug 2026 at 14:26, سپهر محمودی <[email protected]> wrote: > > > > در تاریخ دوشنبه ۳۱ اوت ۲۰۲۶، ۱۶:۳۲ Bruce Weirdan <[email protected]> نوشت: >> >> Hi سپهر >> >> On Mon, Aug 31, 2026 at 12:21 AM سپهر محمودی <[email protected]> >> wrote: >>> >>> While `array_filter` with a closure can achieve this, it introduces >>> noticeable overhead in userland due to repeated closure invocations and >>> type checks on every element. >> >> >> If this overhead could be reduced, it would improve the performance of any >> built-in function that calls a user-land closure, not limited to the >> array_filter + str_contains combo. Have you considered solving this problem >> instead, at least for closures generated by partial applications of built-in >> functions? >> >> -- >> Best regards, >> Bruce Weirdan >> mailto:[email protected] > > -------- > > Hi Bruce, > > Thanks for the reply. > > You're right that the closure invocation overhead is not specific to > array_filter + str_contains — it applies to any builtin that calls a > userland callable. However, I see these as complementary rather than > mutually exclusive approaches. > > Optimizing closure invocation for partial applications is a deep change > in the engine (VM loop, call frames, possibly JIT/inline caching), and > would only benefit closures created from first-class callable syntax. > Even then, the userland code would remain more verbose, and the engine > would still have to materialize a call frame per element. > > A dedicated function avoids the call overhead entirely with a few lines > of straightforward C, keeps userland code short and readable, and is > shippable now rather than being tied to a long-term engine project. > > That said, I'd be genuinely interested in seeing a proposal for > optimizing first-class callable invocation — I think it would benefit > array_map/array_filter users broadly. But I don't think it should block > a small, pragmatic stdlib addition. > > Best regards, > Sepehr >
Hi Sepehr, In terms of performance, what numbers are we speaking of here? First-class callables have already been significantly improved in recent versions of PHP. How much difference is there from a dedicated function? I would rather see array_filter with a callable than a dedicated function. It's more understandable to me that way. Also, I agree with what others said that I don't consider this code pattern to be exceptionally popular to warrant a dedicated optimized function in the language. I have never found that to be a performance issue in any project. Regards, Kamil
