On Mon, Jun 7, 2021, at 2:00 PM, Larry Garfield wrote:
> Hi folks. Me again.
>
> A year ago, I posted an RFC for a pipe operator, |>, aka function
> concatenation. At the time, the main thrust of the feedback was "cool,
> like, but we need partial function application first so that the syntax
> for callables isn't so crappy."
>
> The PFA RFC is winding down now and is looking quite good, so it's time
> to revisit pipes.
>
> https://wiki.php.net/rfc/pipe-operator-v2
>
> Nothing radical has changed in the proposal since last year. I have
> updated it against the latest master. I also updated the RFC to use
> more examples that assume PFA, as the result is legit much nicer. i
> also tested it locally with a combined partials-and-pipes branch to
> make sure they play nicely together, and they do. (Yay!) Assuming PFA
> passes I will include those tests in the pipes branch before this one
> goes to a vote.
Hi again.
With PFA being declined, I've again reworked the Pipes RFC.
1) It now does not use PFA in any examples, but it does use Nikita's first-class-callables RFC
that looks like it's going to pass easily.
2) With major hand-holding from Levi Morrison and Joe Watkins, the implementation has shifted a bit.
It now evaluates left-to-right, always, whereas the previous version evaluated right-to-left. That
is, instead of $a |> $b |> $c desugaring into $c($b($a)), it now becomes effectively $tmp =
$a; $tmp = $b($tmp); $tmp = $c($tmp); That matters if $b or $c are function calls that return a
callable, as they are then only called when the pipeline gets to that part of the expression. (If
all the functions involved are pure functions, then it doesn't make a difference in practice.)
3) I included references to several existing PHP libraries that implement similar logic, in mostly
complex and ugly ways.
4) Of note, Brent posted a Twitter poll last week about pipes, and the response was overwhelmingly
in favor. (https://twitter.com/brendt_gd/status/1408271132650885123) Naturally a Twitter poll is
extremely unscientific, but I think between the existing libraries and the response there the answer
to the question "is there actually a demand for this feature?" is unquestionably yes.
5) Examples have been reworked to be a bit prettier.
6) Added another language reference that has a pipe operator that works basically like described
here. (OCaml)
I am planning to take this version of the RFC to a vote on Monday or Tuesday, as Tuesday is the last
day possible to start a vote for 8.1 features.
--Larry Garfield