Re: [RFC] Pipe Operator, take 2
| From: | Joe Watkins | Date: | Tue, 06 Jul 2021 23:16:42 +0000 |
| Subject: | Re: [RFC] Pipe Operator, take 2 | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-115334@lists.php.net to get a copy of this message | ||
Just to clarify,
I said it didn't look like it could be a pure AST implementation, and that
it looks like you may need one additional instruction.
It does look that way to me - if only to throw a sensible error
specifically for pipes but also because it makes the imposition of specific
behaviour for pipes a little easier, but it doesn't make it a super
complicated thing.
I also said I didn't know what the right answer was with regard to refs. I
still don't, although I lean towards blocking them at the moment having
spent a little more time looking at it.
I don't really think we've had long enough to have this conversation
properly.
Cheers
Joe
On Tue, 6 Jul 2021 at 19:05, Larry Garfield <larry@garfieldtech.com> wrote:
> On Mon, Jul 5, 2021, at 11:05 AM, Larry Garfield wrote:
> > On Sat, Jul 3, 2021, at 9:12 PM, Larry Garfield wrote:
> > > 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
> >
> > Based on feedback on the PR, I've updated the RFC to forbid functions
> > that pass or return by reference. They're not really useful in pipes
> > at all, and were only supported before because the implementation
> > happened to allow it.
> >
> > The PR hasn't been updated for that yet, but I figure that's easy
> > enough to update post-vote if it passes.
>
> Sorry for the noise, but after some discussion with Joe it looks like
> blocking references in pipes is actually much harder than it sounded like,
> and would require a completely opcode based implementation rather than the
> completely AST-based implementation. References on pipes are not really
> useful but in practice they don't hurt anything. I've instead added more
> tests to validate that they behave "as expected" and noted that in the RFC
> instead.
>
> --Larry Garfield
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>