Re: [RFC] Pipe Operator (again)

From: Date: Wed, 12 Mar 2025 14:19:30 +0000
Subject: Re: [RFC] Pipe Operator (again)
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message


On 11 March 2025 09:00:52 GMT, "Côme Chilliet" <[email protected]> wrote:
>This would be way better on performances as a single foreach, no?
>I feel like this pipe operator encourages coders to use array_* functions with closures, which
>is often terrible performances compared to a loop.

I think this highlights something that has been mentioned a few times over the years: PHP badly
needs more native functions for working with iterators. If each stage of the pipeline is lazily
consuming an iterator and yielding each value in turn, one major source of performance impact goes
away, because we don't have to repeatedly allocate intermediate arrays. It also makes it much
easier to work with infinite inputs, which obviously can't be flattened to an array.

It also highlights why just letting all array functions accept iterable would *not* be the right
approach: array_map(iterable):array would still have to eagerly iterate its input, so we need a
separate iter_map(iterable):NonRewindableIterator (or whatever name). Even iter_sum() might shortcut
if an invalid value was defined as an Error rather than Warning.

This feels like one of those cases where different proposals complement rather than blocking each
other: iterator functions make pipes more efficient to use, and pipes make iterator functions more
pleasant to use. I'd like both please. :)

Rowan Tommins
[IMSoP]


Thread (38 messages)

« previous php.internals (#126727) next »