Re: [RFC] Pipe Operator, take 2

From: Date: Sun, 04 Jul 2021 02:12:29 +0000
Subject: Re: [RFC] Pipe Operator, take 2
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-115285@lists.php.net to get a copy of this message
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


Thread (28 messages)

« previous php.internals (#115285) next »