Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:113775 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 23131 invoked from network); 25 Mar 2021 15:09:57 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 25 Mar 2021 15:09:57 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 80C7B1804D3 for ; Thu, 25 Mar 2021 08:05: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.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-il1-f178.google.com (mail-il1-f178.google.com [209.85.166.178]) (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 ; Thu, 25 Mar 2021 08:05:58 -0700 (PDT) Received: by mail-il1-f178.google.com with SMTP id z9so2396846ilb.4 for ; Thu, 25 Mar 2021 08:05:58 -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=0npvqPNUejcGz7VGONsQh9mkWdGsjzLoUTgiCJsV9qg=; b=TjBRsP+983mb/sZO3riwOpJL0XpfWlbtO93dNdrEFkv6YE36EbA0qdMb/ppMGGRSsh o/zH0GPujuzGNJB6+Q2SgVpM++CMoGR61pvVvRX0lx/a7AyEh3H9MLUM2QW6RPAnp3Dz B/XZ/hm8xzk7DbJlhML8p82Fa6WZ557uZuvrY+g5q8wb6W6aQJf3TzKHUgOCi4TlxDi1 Lm901hUpr7fFwYkcjzDqUlCRV06pWZQPUGq5UREBXqON0F/haKaokP5RP1kn0swidW+Q 18vIQMWlBvM6k0IZi1EHjJlaGhJAzUPXAYybmwJsvA7Aq6v7tEwW2t6AT+wyv0ybvEgY ykww== 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=0npvqPNUejcGz7VGONsQh9mkWdGsjzLoUTgiCJsV9qg=; b=WOX/HoqkQlh1MHEDTMZbOBVi6zovJvibt60zGl3jPRpGLa87tFcTyT9gVpDlV4l+rO IjyaJ/5DY4VMNBqFWRT/x3kGaG01zTcJcaPXhh97WsRN/vHauGCoTz9DANMaRax8oTeP z5GM1VLaby9zH1PNt9WYCfq2oNzr4dLOsBYD9apUdk6C25Qs6LrOsV3U9Bza+LQU2gvU M0Fhv+ykh+nPXKSq4/H1T9Jzf5d/DRkBcIJ/zEvg44IcwwKrT3GXALPYG17uqFaj01s0 QFNT/mGr0uW3bYbpSbOeBbvIVUmavXgXByxVXIzvLzDvm9s5MUcmZ+TABOxtqGPreey3 NExA== X-Gm-Message-State: AOAM532fT5IFmoJPx/biSywevVMqSc3Gi89jm2aYG1zagugtI8+9FT8V wqiScGDF3cy1o9ZLEnS0iGzZLSAcMrnXlPTepTI= X-Google-Smtp-Source: ABdhPJzLTC0jJItuHqWmxQEd7k0fIT3Z3MoozUMFA4rKatejWH5cSviHnm1zUGzH3Ay1G8766GG74i+EWmCUDbvv//8= X-Received: by 2002:a92:6b10:: with SMTP id g16mr7261110ilc.26.1616684756671; Thu, 25 Mar 2021 08:05:56 -0700 (PDT) MIME-Version: 1.0 References: <88c9eb5f-f80c-4869-b7f8-1b58b9e2eaa3@www.fastmail.com> <4DC3B66E-A91A-4AA9-8872-8EE9DE92C2D4@cschneid.com> <8c72c162-83c0-7c7f-2fa7-4fbe3fb30a4a@gmail.com> <605bae82.1c69fb81.f49f7.d11eSMTPIN_ADDED_MISSING@mx.google.com> <919e30e7-3e5e-d955-7bb4-1e1b5825cdd1@gmail.com> <635DD146-FC6F-4991-8D2C-5A6B492722D5@newclarity.net> <734f12de-da98-6b76-c2fe-8682f4d177aa@gmail.com> In-Reply-To: Date: Thu, 25 Mar 2021 16:05:22 +0100 Message-ID: To: Rowan Tommins Cc: PHP internals Content-Type: multipart/alternative; boundary="000000000000a2a35d05be5dc096" Subject: Re: [PHP-DEV] [RFC] Auto-capture multi-line closures and shortfunctions take 2 From: deleugyn@gmail.com (Deleu) --000000000000a2a35d05be5dc096 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > * Because it's shorter, people will decide it's the "better" version, > when they don't actually need any variable capture. An explicit syntax > like "use(*)" instead makes this a deliberate choice. Does this mean you agree that people (PHP users) are very likely to like/enjoy/"think it's the better version", but you still object to it because people will like the new syntax so much that they will use it even when they don't need auto-capture? On Thu, Mar 25, 2021 at 3:41 PM Rowan Tommins wrote: > On 25/03/2021 12:31, Nuno Maduro wrote: > > > The reason why we believe the vast majority of PHP Developers are going > to > > appreciate this RFC is because multi-line short closures (aka > > Auto-capturing multi-statement closures) *are more simple, shorter to > > write, and prettier to read *=E2=80=94 and the community love these cha= nges as > > proven on "property promotions", "one-line short closures", etc. > > > My main point was that the RFC needs to spell out this argument, rather > than taking it for granted that everyone agrees on "those situations > where that is warranted". > > Most of the current text should be summarised in a "syntax choices" > section somewhere near the end. I would like to see much more space > devoted to: > > * Why we need this feature. What has changed since it was left out of > the arrow functions RFC? What problems is it addressing? Why do you > think it is the best approach to those problems? > * The exact semantics proposed: How will the variables to be captured be > determined? Will it distinguish variables which are written before > they're read, and if so how is that defined? Can auto-capturing closures > be nested, i.e. will "fn() { return fn() { echo $a; } }" capture $a from > the outermost scope? And so on... > > > > Besides, one advantage of this RFC is that it is consistent with the > > current syntax of the language and with the short-functions RFC[2]. For > > example, by proposing that "fn" keyword indicates a function will > > auto-capture variables, by value. > > > While it's a cute rationalisation, there's no intuitive reason why "fn" > should have that meaning; we could pick any aspect of the current arrow > function syntax and say "the 'fn' keyword means that". > > > > > On the other hand "use (*)" has no usages / or current meaning in the > > language. > > > This is a straw man argument. I could equally say that "fn() { } has no > usages or current meaning in the language" - of course it doesn't, we > haven't added it yet! > > The "function use() {}" part of "function use(*) {}" has a > well-established meaning, and "*" to mean "everything" is a notation > developers are likely to be very familiar with. > > The two disadvantages I see with using "fn" as proposed are: > > * Because it's shorter, people will decide it's the "better" version, > when they don't actually need any variable capture. An explicit syntax > like "use(*)" instead makes this a deliberate choice. > * There is no obvious way to expand it to support any by-reference > capture, which is something people have previously expressed a desire for= . > > > Regards, > > -- > Rowan Tommins > [IMSoP] > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > > --=20 Marco Aur=C3=A9lio Deleu --000000000000a2a35d05be5dc096--