Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115305 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 76307 invoked from network); 5 Jul 2021 15:45:36 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 5 Jul 2021 15:45:36 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id DDB0E1804DB for ; Mon, 5 Jul 2021 09:07:07 -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_H3,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 out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (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 ; Mon, 5 Jul 2021 09:07:07 -0700 (PDT) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id C178A5C00D3 for ; Mon, 5 Jul 2021 12:07:05 -0400 (EDT) Received: from imap43 ([10.202.2.93]) by compute1.internal (MEProxy); Mon, 05 Jul 2021 12:07:05 -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=MswEIB X5+Tft5idJhpQesafHDwt74Gw6450yJK+SEzQ=; b=dWuzQbFXQaYQ98QEZQLROo KyNACt3Ap2pEg3tzD1uwqNulPHy0vMWN2qsRi2dO8f1oxUgoyZ0A8bzswOmjjWr8 EnYmWzIc5dK3RGYKYBA2HZqAZPlqp568vodeQwZ0lMLHxYodXF1xKei/ea+Wkh8a 9E0Q+Q1D4egMlpKha1rVq+jnnQtPSKsqzne/FDS93w3rgBRkM9jv3eukaLrMsqVa uZuLIYcjeRV8+aROrod+b6vRhOHcdGXzaL51zQr+fdkJjFt9ruhJo0zecqvTmr+1 g4M3eubqJlBiumnvR6wTGW/joIKPbH1ZN9M8HceM/MUrVL+0J7Ou6MxTFfR6X7nA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrfeejgedgleegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvffutgesthdtredtreertdenucfhrhhomhepfdfnrghr rhihucfirghrfhhivghlugdfuceolhgrrhhrhiesghgrrhhfihgvlhguthgvtghhrdgtoh hmqeenucggtffrrghtthgvrhhnpeelheejfedviedtgeetgeektdevjeeutdekteettdet jeettedtudegfeeuheetkeenucffohhmrghinhepphhhphdrnhgvthdpthifihhtthgvrh drtghomhenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehlrghrrhihsehgrghrfhhivghlughtvggthhdrtghomh X-ME-Proxy: Received: by mailuser.nyi.internal (Postfix, from userid 501) id 7D0F1AC007C; Mon, 5 Jul 2021 12:07:05 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.5.0-alpha0-530-gd0c265785f-fm-20210616.002-gd0c26578 Mime-Version: 1.0 Message-ID: <48bc0d19-ba92-4dbf-b2d4-a32688ed4e25@www.fastmail.com> In-Reply-To: <63aa426c-30bc-4f00-8740-532fa0bef6f2@www.fastmail.com> References: <63aa426c-30bc-4f00-8740-532fa0bef6f2@www.fastmail.com> Date: Mon, 05 Jul 2021 11:05: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 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. --Larry Garfield