Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115174 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 89135 invoked from network); 28 Jun 2021 14:32:38 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 28 Jun 2021 14:32:38 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id EBCA31804C3 for ; Mon, 28 Jun 2021 07:52:24 -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,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (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, 28 Jun 2021 07:52:24 -0700 (PDT) Received: by mail-lj1-f180.google.com with SMTP id q4so17714621ljp.13 for ; Mon, 28 Jun 2021 07:52:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=bd44pMUjhzu1MrjrpDYvnuuDf07HuFoO61RhGuMHLZo=; b=MwHrh14y1J0o1Mf2H5uB5mZDF15G+CEKNN4WxV3e/kHOvn5H8TsdcZdM2Qw52jcMc5 AQCyLt1mCRgTs0WBlDIez62/YZQyCteAJoaAN/Bj77zg5YJFcbY3vQXrbpz/+RPX0KaJ Mkc/TyIZ5Ncs6PaiH+Ihkaq0eytI23pWrgUTb7UtldcdFa23f3nAvRWmRtSR4GqxSY3e xtU0BbsCD73C1wNDJYNks3r9Z5d4Za1jGC+U2Ra7RtN0x3JfOzUbhUOymRg/wXATt7IQ bxZGn2egZkJKtHPCmpi7S4ibzUMuLvJG4Q1lD+KZOEcz5d1E1WnlKNNugPIbnkUL0pg3 Ddeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=bd44pMUjhzu1MrjrpDYvnuuDf07HuFoO61RhGuMHLZo=; b=aKc9CCHE5CBQvj/igEGX8donJYcxxeNcTNjzy10mf5kBVRrVZWxsmQdNNxi5TCLuWI 0vS9W/Bog8rpqC53iF1PsxZ6SevZbPffZx/viIdbAYaoDx1LSIgt4lsJp2NG58WyfWvy V+R0dETumJk4oQEkNrHtx2fDBGGeV+XWlnTDaiUFVPdyIgsLy+95ovb1gCACfOLHKHLM Fo2NxQiUyYMW8XYRkINXD/ezXIJKHU9o+W83L8HS+hBFqaQ8XMDz3it38J+ygajBp+aW GNlzRtusmE/LKh3poU203g68q2w7WJCEJv26uLFCPBjAiyFPPmTvHVfOPWbGt8QBNqpB kDSw== X-Gm-Message-State: AOAM533AAeIlmFcdsG1UeGgEVNd8o9SBwdzdAvKosVaASS24GORDSo3b pQtgvbAukAbFRtH+CWvxrP9hSr0PrVQsRpldSCc= X-Google-Smtp-Source: ABdhPJy1M/ZEVUJKCZF0E7aAx7LB/cbYSPev7qp+rhK2wUKkV34rEkbNGl3VDAFvaa3cHB1NvtaQyWMCkYet0n37JQA= X-Received: by 2002:a05:651c:516:: with SMTP id o22mr21030057ljp.29.1624891941440; Mon, 28 Jun 2021 07:52:21 -0700 (PDT) MIME-Version: 1.0 References: <222b3921-3d9b-47f9-8d13-e6a123f36fad@www.fastmail.com> <45b16626-2b04-404b-f5f9-2430004bbdc8@telia.com> In-Reply-To: <45b16626-2b04-404b-f5f9-2430004bbdc8@telia.com> Date: Mon, 28 Jun 2021 16:52:05 +0200 Message-ID: To: =?UTF-8?Q?Bj=C3=B6rn_Larsson?= Cc: PHP internals , Larry Garfield Content-Type: multipart/alternative; boundary="000000000000f7cf1d05c5d4a29c" Subject: Re: [PHP-DEV] [Vote] Partial Function Application From: nikita.ppv@gmail.com (Nikita Popov) --000000000000f7cf1d05c5d4a29c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 21, 2021 at 4:26 PM Bj=C3=B6rn Larsson 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 placehold= er > >> 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 !=3D=3D null ? $foo->bar(?) : null. I don't think t= he > > 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(?, ?, ?) y= ou > > 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=3Drfc.partials To be honest, I'm not s= ure > > 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 t= he > > 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=3D1 file and call it in a > > strict_types=3D0 file, what happens? Will it use strict_types=3D0 seman= tics, > > including for arguments that were bound in the strict_types=3D1 file? > > > > * It's worth noting that the "new Foo(?)" syntax will create and destro= y > 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 convince= d > > 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? > These were just some notes on implementation details, they don't really impact my overall opinion of the RFC. I should also say that I'm not strongly opposed here, I'm just not convinced this is worthwhile :) The complexity of the feature would be rather easy to overlook if I felt the functionality was important. 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 :-) > Heh, it's the other way around for me: This just makes me more apprehensive. Is there some special property of PHP that makes this feature more relevant to us than other languages? All other mainstream languages do well without this feature, so why do we need it? Regards, Nikita --000000000000f7cf1d05c5d4a29c--