Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115332 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 88701 invoked from network); 6 Jul 2021 16:43:13 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 6 Jul 2021 16:43:13 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id DA6741804D1 for ; Tue, 6 Jul 2021 10:04:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_NONE autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 6 Jul 2021 10:04:59 -0700 (PDT) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id D42F55C01B4 for ; Tue, 6 Jul 2021 13:04:57 -0400 (EDT) Received: from imap43 ([10.202.2.93]) by compute1.internal (MEProxy); Tue, 06 Jul 2021 13:04:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=k9X11z +5XTpWQpxWTjqugeqfHzn0UokqvM7gnNEzots=; b=n+KKdwYLzI6Xd93u9S/nme ZMGpz8DCrHF9X+0lrA/zglc5bUIB1RqTS7258Wx7xpf7aixDR7YKUYpkANJthvoA zvMwWm+QcL3tM3sdoxYoHUrhI5iQdbNuCcLDCeKJIWCt/4a5CrqLf9srgKVNXvNr ePDULxGKnhqNKw2t3O+sqruIBwFVYtXo7vjHzNrmtzWFlB6YXN6WNixSQxcAeYDh fwSTZvo454Y8WacAQyOOkYqvTD4HaMxm634Q/SUBrJF0FqKhIMR6qr2hlbIoO6qD xnspAhZxjhd/qylCeb1/XReDQIN8eS3mhPHRiRJDaBr4v2f6Aq7qjZyK+0fnb7Aw == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrtddtgdeijecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvufgtsehttdertderredtnecuhfhrohhmpedfnfgrrhhr hicuifgrrhhfihgvlhgufdcuoehlrghrrhihsehgrghrfhhivghlughtvggthhdrtghomh eqnecuggftrfgrthhtvghrnhepleehjeefvdeitdegteegkedtveejuedtkeettedtteej teettddugeefueehteeknecuffhomhgrihhnpehphhhprdhnvghtpdhtfihithhtvghrrd gtohhmnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep lhgrrhhrhiesghgrrhhfihgvlhguthgvtghhrdgtohhm X-ME-Proxy: Received: by mailuser.nyi.internal (Postfix, from userid 501) id 7D92DAC0076; Tue, 6 Jul 2021 13:04:57 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.5.0-alpha0-531-g1160beca77-fm-20210705.001-g1160beca Mime-Version: 1.0 Message-ID: In-Reply-To: <48bc0d19-ba92-4dbf-b2d4-a32688ed4e25@www.fastmail.com> References: <63aa426c-30bc-4f00-8740-532fa0bef6f2@www.fastmail.com> <48bc0d19-ba92-4dbf-b2d4-a32688ed4e25@www.fastmail.com> Date: Tue, 06 Jul 2021 12:04:36 -0500 To: "php internals" Content-Type: text/plain Subject: Re: [PHP-DEV] [RFC] Pipe Operator, take 2 From: larry@garfieldtech.com ("Larry Garfield") 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