Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:113784 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 42065 invoked from network); 25 Mar 2021 16:53:31 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 25 Mar 2021 16:53:31 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id BCB271804D8 for ; Thu, 25 Mar 2021 09:49:32 -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=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,SPF_NONE autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) (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 09:49:32 -0700 (PDT) Received: by mail-qt1-f179.google.com with SMTP id c6so2161925qtc.1 for ; Thu, 25 Mar 2021 09:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=newclarity-net.20150623.gappssmtp.com; s=20150623; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=8T53SLTXeH0iup+6e5v78TLhs77XknT80ExB06SvZo4=; b=ViwtcUdqylfFzvHw/9h4FtYC58Sww2I4kHH1cxn4XN8mc3tN3HjITotc2nIEpiFkT5 inQxlUHbfB7t+8N8Sq+H796tOQ5qcV97QF0h8vskSpu1u0UU0O3q4YOMkkTw7Vf7FVK2 bdYmaRW4a4PO1Q6fBzNMfijc1cc04Z+0jAWNAhTEKGn4vM24+Y9RKuqvrqfI6H61FkXF kFV9mUgJOgx91oStyB3awagfdBgbNIY33+ypQZaqxmDqhVP+AcBM+JchUY8wo5hvNV1f TH210m+c8tQ47XQ/xh2YpyFPIZtstHJONViYhCbqGVf5/b7K1gXB3GUa5pOdDWc+dzsD IzLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=8T53SLTXeH0iup+6e5v78TLhs77XknT80ExB06SvZo4=; b=NUopiHebDA0XCKFCeIyQ383P9Q1ZevbZWLbQ3JhiI5ifjDcewtPY38JaH2oGigvPML 0w4/KyaGK2zivD3hv9ZRiVUMWa/HUbCvjRp0+5rFO+7N0CApSWBWJOzjU8xnfKAya1ig 2lcKUjWOKXBcaaQZNhfyr+CwDxWizTKFbLEHsBirh4oCfvElAKDANwlrouMGB9UkgMOG m+QjF8K3CexpLow2fE+ixcqYD0IbBC9wQG0VALLyQebTj+jb0wQj/w9zYz4D2hrKqD2t CCTlJ501z54XNSrY88wmC922KLwYkYTpHhrf66G+FMmxqoILOoK1jpxKQmWYgcooloEO uI7w== X-Gm-Message-State: AOAM533rW+c5Kiul/Os4KQjo5ew7ipyE+Zcw8T6iKX3fbBRGVEliXQIQ Eeu2Dw1va5wMFZkLSfCgFAGvaA== X-Google-Smtp-Source: ABdhPJydpa/6fSVerg0Mat6OPifTXhw3/r2rXxZfKeqoTbwXGHqQFzaL9UKr8Wj6lnqo96SnSbeMmA== X-Received: by 2002:aed:206c:: with SMTP id 99mr8649323qta.64.1616690971543; Thu, 25 Mar 2021 09:49:31 -0700 (PDT) Received: from [192.168.1.239] (c-24-98-254-8.hsd1.ga.comcast.net. [24.98.254.8]) by smtp.gmail.com with ESMTPSA id p7sm4553808qkc.75.2021.03.25.09.49.30 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Mar 2021 09:49:31 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) In-Reply-To: Date: Thu, 25 Mar 2021 12:49:30 -0400 Cc: PHP internals Content-Transfer-Encoding: quoted-printable Message-ID: <15AE4315-A456-4ED8-990A-49EBD76C5B46@newclarity.net> 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> <36E45DD6-E2BD-4801-BAAE-4355C83D1AC3@newclarity.net> To: =?utf-8?Q?Olle_H=C3=A4rstedt?= X-Mailer: Apple Mail (2.3608.120.23.2.4) Subject: Re: [PHP-DEV] [RFC] Auto-capture multi-line closures and shortfunctions take 2 From: mike@newclarity.net (Mike Schinkel) > On Mar 25, 2021, at 11:22 AM, Olle H=C3=A4rstedt = wrote: >=20 > 2021-03-25 16:02 GMT+01:00, Mike Schinkel : >>=20 >>=20 >>> On Mar 25, 2021, at 10:41 AM, Rowan Tommins = >>> wrote: >>>=20 >>> On 25/03/2021 12:31, Nuno Maduro wrote: >>>=20 >>>> 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 = changes as >>>> proven on "property promotions", "one-line short closures", etc. >>>=20 >>>=20 >>> 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". >>>=20 >>> 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: >>>=20 >>> * 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... >>>=20 >>>=20 >>>> 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. >>>=20 >>>=20 >>> 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". >>>=20 >>>=20 >>>=20 >>>> On the other hand "use (*)" has no usages / or current meaning in = the >>>> language. >>>=20 >>>=20 >>> 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! >>>=20 >>> 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. >>>=20 >>> The two disadvantages I see with using "fn" as proposed are: >>>=20 >>> * 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. >>=20 >> And yet adding " use (*)" makes the syntax longer, which goes against = one of >> the goals many people have for it: to be shorter. >=20 > I don't understand why this is a target in the first place. Shorter > does not mean more readable, and readable is more important than > writable. I agree that readable is more important than writable, but shorter also = does not necessarily mean it is *less* readable, either. =20 For some people, shorter makes it more readable because there is less to = read and more whitespace surrounding it. Ironically readability is why I = prefer fn() w/autocapture over "function(...) use (...) {...}." Also, it appears you may be discounting that readablity evolves as = people's familiarity with a new syntax increases. For example, I found = RegEx completely unreadable for a long time, but today I find them = completely readable because I now understand them. Have you already = considered whether or not you would still find fn() w/autocapture less = readable even after you have more time and experience seeing it in other = people's code, and decided that you would still find it less readable? I do recognize that ever developer has their own preference and I am = sensing that your preference is for more verbose syntax, at least in = this case? If that is true shouldn't you just state that more verbose is = your preference and if you have a vote then vote against the RFC? Isn't = it unfair to implictly assert that "shorter is less readable" when = really it is just a preference? -Mike