Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:114989 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 52291 invoked from network); 21 Jun 2021 20:16:42 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 21 Jun 2021 20:16:42 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 5C5C21804CC for ; Mon, 21 Jun 2021 13:34:47 -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.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from ts201-smtpout73.ddc.teliasonera.net (ts201-smtpout73.ddc.teliasonera.net [81.236.60.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 21 Jun 2021 13:34:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telia.com; s=tssemail; t=1624307687; bh=i9SkyiNlacqOiaI/0b6Xc/vDHaOHglL6sSWrJyxCOv8=; h=Subject:To:References:From:Message-ID:Date:MIME-Version:In-Reply-To; b=LQ2JpwPlKboL4WtDm/niwcxjkVh2Nerv70w7tvESPu+vWx5BPoeOC8MxmbQt5V7xcky3QiD7kE58K0eY8tAFaVuqg6NRQ3C+7RZRKT/PW73f8krH6g5S6iNqgGIzQcbaCyUphqLpK2lO3hibIMJv0AnLh7EYXkBct+Qvz+qTtLuNYjmUwX4Expg5q4FfXG086T96L28nlbcKiueX1z/Z4ydm0Sem0WqlglVA8mmJKfJCy8Z5oiC17jDHqTJ6vu0UptlwFW23b8OwHKcc1zJYwjrzmlOvv8wG/Oroqy8BtbenEBdJ1WEyaoVKBoQo7S/zT1XJcbKIIpLrX1Q/dqtciw== X-RG-Rigid: 60C471FC0082F5A0 X-Originating-IP: [213.64.245.126] X-RazorGate-Vade: gggruggvucftvghtrhhoucdtuddrgeduledrfeefledgudegkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfvgffnkfetufghpdggtfgfnhhsuhgsshgtrhhisggvpdfqfgfvnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomhepuehjnphrnhgpnfgrrhhsshhonhcuoegsjhhorhhnrdigrdhlrghrshhsohhnsehtvghlihgrrdgtohhmqeenucggtffrrghtthgvrhhnpedttedutdejieevjeffgfeghfekgeeileevvdehkeduueffhfeuleegfedthfettdenucffohhmrghinhepphhhphdrnhgvthdpfehvgehlrdhorhhgnecukfhppedvudefrdeigedrvdeghedruddvieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhephhgvlhhopegludelvddrudeikedrjedruddungdpihhnvghtpedvudefrdeigedrvdeghedruddviedpmhgrihhlfhhrohhmpehukeelledtieegudejsehpnhgvrdhtvghlihgrrdgtohhmpdhrtghpthhtohepihhnthgvrhhnrghlsheslhhishhtshdrphhhphdrnhgvthdprhgtphhtthhopehkrhgrkhhjohgvsehgmhgrihhlrdgtohhmpdhrtghpthhtoheplhgrrhhrhiesghgrrhhfihgvlhguthgvtghhrdgtohhmpdhrtghpthhtohepnhhikhhithgrrdhpphhvsehgmhgrihhlrdgtohhm X-RazorGate-Vade-Verdict: clean 0 X-RazorGate-Vade-Classification: clean Received: from [192.168.7.11] (213.64.245.126) by ts201-smtpout73.ddc.teliasonera.net (5.8.716) (authenticated as u89906417) id 60C471FC0082F5A0; Mon, 21 Jun 2021 22:34:44 +0200 To: Joe Watkins , Nikita Popov , Larry Garfield Cc: PHP internals References: <222b3921-3d9b-47f9-8d13-e6a123f36fad@www.fastmail.com> <45b16626-2b04-404b-f5f9-2430004bbdc8@telia.com> Reply-To: =?UTF-8?Q?Bj=c3=b6rn_Larsson?= Message-ID: <8ec11744-6cb7-5a88-4ad7-22b825c7fecf@telia.com> Date: Mon, 21 Jun 2021 22:34:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/alternative; boundary="------------6E81C6B55551B03EA4B46C62" Content-Language: en-GB Subject: Re: [PHP-DEV] [Vote] Partial Function Application From: internals@lists.php.net ("Björn Larsson via internals") --------------6E81C6B55551B03EA4B46C62 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi and thanks for the clarification! So if I get it right, by not addressing null safe calls and strict types now we can address it later when we know a little bit more, which btw is not the first time it's done. And the feature proposed requires a non trivial implementation. I think it should be noted that this is a feature where PHP is in the forefront of language development, not a follower. Of course it requires some afterthought, which I think the RFC fulfils giving a broad explanation on  why it is like it is. Maybe a bit weak on the use cases, besides Pipe operator that would benefit from this feature. So I hope it passes, +1 from me (not having a vote though). Regards //Björn L Den 2021-06-21 kl. 18:27, skrev Joe Watkins: > I'd like to note a couple of things ... > > The behaviour of nullsafe and strict types being unspecified in the > RFC would allow us to solve those problems later. > > The behaviour of strict types right now is objectively wrong, the > partial takes strictness from the application site, so as Nikita > already knew when he asked the question; calls from a non-strict file > will not behave as you expect. > > With regard to the complexity in the implementation: I think it's > important to understand that the complexity of the implementation is a > product of the semantics we landed on during discussion. > > The first implementation where we only had ? was technically simpler, > but not intuitive from a user perspective. > > Now we have semantics that are easy to understand, that you can > communicate in a few lines. But the implementation is necessarily > complicated as a result of those semantics. > > We also have to remember that this is actually some kind of middle > ground, it's not the most complicated version of partial application > we could have - because that most complicated version would also > include support for re-ordering parameters (named placeholders), and > nor is it the simplest which offloaded a lot of (cognitive) overhead > onto the programmer. > > The question is not can we simplify the implementation, the question > is rather, is the necessary complexity of an implementation with the > kind of semantics that are desirable justified. > > Cheers > Joe > > > > > On Mon, 21 Jun 2021 at 16:26, Björn Larsson via internals > > wrote: > > Den 2021-06-18 kl. 16:08, skrev Nikita Popov: > > On Wed, Jun 16, 2021 at 6:17 PM Larry Garfield > > > > wrote: > > > >> Hi folks.  The vote for the Partial Function Application RFC is > now open, > >> and will run until 30 June. > >> > >> https://wiki.php.net/rfc/partial_function_application > > >> > >> Of particular note, a few people had asked about using ...? > instead of ... > >> for the variadic placeholder.  In the end we decided not to > explore that, > >> as Nikita explained off-list it was actually more confusing, > not less, as > >> it would suggest "placeholder for a variadic" rather than "a > placeholder > >> that is variadic."  Otherwise, it's just more typing.  The > syntax choices > >> section of the RFC has been updated accordingly. > >> > > > > A couple of notes on the content (or non-content) of the RFC: > > > > * The behavior of nullsafe calls with PFA has been brought up in the > > discussion, but is not mentioned in the RFC. For reference, > $foo?->bar(?) > > is the same as $foo !== null ? $foo->bar(?) : null. I don't > think the > > behavior is particularly unreasonable, but I also think it's not > > particularly useful and may be surprising (in that there is a > plausible > > alternative behavior). I think you may have been better off > forbidding that > > case. > > > > * The behavior of parameter names / reflection with regard to > variadic > > parameters is very odd. For function test(...$args) and test(?, > ?, ?) you > > get back a function that nominally has three parameters with the > name > > $args. Parameter names in PHP are generally required to be > unique, and of > > course this also has implications for named arguments, for > example this > > works, while it probably shouldn't: > > https://3v4l.org/cQITD/rfc#focus=rfc.partials > To be honest, I'm > not sure > > what the right way to handle this is, but I don't think this is > it. A > > possibility would be to bring back the concept of name-less > parameters we > > had prior to PHP 8 (for internal functions only), or possibly to > make the > > signature less precise by simply retaining an ...$args > parameter, and just > > making the enforcement of "at least three parameters" an > implementation > > detail. The latter seems like the best option. > > > > * The RFC doesn't specify how PFA interacts with strict types. > If I create > > a partially-applied function in strict_types=1 file and call it in a > > strict_types=0 file, what happens? Will it use strict_types=0 > semantics, > > including for arguments that were bound in the strict_types=1 file? > > > > * It's worth noting that the "new Foo(?)" syntax will create and > destroy a > > Foo object as part of creating the partial (not just a call to the > > partial). I've mostly convinced myself that this is *probably* > harmless. It > > would have interacted negatively with an earlier version of > > https://wiki.php.net/rfc/new_in_initializers > , but I think the > problem there > > was not on the side of partials. > > > > In any case, I'm voting no on this one: While PFA is simple on a > conceptual > > level, the actual proposal is complex and has lots of tricky > edge cases. > > Especially once you take a look at the implementation. I'm not > convinced > > that PFA in its full generality is justified for inclusion in PHP. > > > > Regards, > > Nikita > > > Would you look on this feature in a different light if the above > concerns about strict types and nullsafe calls could be clarified / > solved? Or is it about the implementation with it's complexity and > tricky edge cases? > > I myself think one should take into account that this is a feature > that would make PHP stand out even more. Not being a follower of > other languages here :-) > > Regards //Björn L > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > > --------------6E81C6B55551B03EA4B46C62--