Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:113776 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 25152 invoked from network); 25 Mar 2021 15:26:59 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 25 Mar 2021 15:26:59 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 392601804D0 for ; Thu, 25 Mar 2021 08:23:02 -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, 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-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) (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:23:01 -0700 (PDT) Received: by mail-lf1-f44.google.com with SMTP id i26so3105053lfl.1 for ; Thu, 25 Mar 2021 08:23:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=uXc3e1zxTL/Dpsj9kOsj8CVSm6gpEzpCpwdwwo91bhM=; b=KJH651VhXU9XLmGygdGO9oR9I5OeI1m81yXEvPUWhvSxyOy+HomHD0kWbZxssVQjOa ToEP27WSWO4/gc6yyEv3/nE/FRARG68cvnvZC2SFW+/WQ/tN3xmNVbZX9ejGRUg+yQRv n9y2/3Sxj8NHxiXBHiraBT3ZHXwh9o8bYGejehocITHKpQ2LZK+JT67IQ1r0Yg3NwQhf dWO5t2zRmmg+jS6pzrWo8WJXaWvYdtDUV5e3hPdezfqmf+gLwhTSaNcf7hI8ys6CB6XW HHRHif0UFRORqPd1UiN+5epOQWPVxwoMHjfRed70BhgcKhPElGR173ioJX4v342wKbV+ asyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=uXc3e1zxTL/Dpsj9kOsj8CVSm6gpEzpCpwdwwo91bhM=; b=kvh+yzSarFLwh7p9Z4pCngT7dMtm0B5Y6xOzDBvbM71mt80m3USFkfnN4hCfK6TAto zfqUwIKdbr4cWHJbxFRtqpveMwpN8KMut2WkBCGhq2W1qW6Nq/kDkhIn0gJ26ZgFL9Rn DLLjx7JOJo9nWt+MUmZDL2ZKc6zPoCVwBoAQoGTnazkV81k5b57+vmB3Mf7u2Tf3GGXU sny9iRiqvPz78rpkNKMZUJlL0P8+nvmPhI4Lhh6qwg0nb1hiQ4gG6H0NRYm9vEwIrlke uIArwOxJEZGGth//+jQusDNANH0LfuWL3nSMgZE2/tIJBLXEafCSLHpjrw1nqAmx9v3L gqcw== X-Gm-Message-State: AOAM5338+CZ7X0osc+IEG25A5zx5/wgQ5GhDqxB/JBILip4adG+TMTRV Hz2jgNUNJjSSZMNMh7rFseJB8T3V/J6bD/5Ob+s= X-Google-Smtp-Source: ABdhPJwJUQvUhREBRrTtFajN/X/8LlszmCzyUZaXhbqoYO435TjMGI9g6idkmfvkGBpzw2MmAGVXtRm7CNOSoyz6hAU= X-Received: by 2002:ac2:5f1b:: with SMTP id 27mr5319965lfq.425.1616685778808; Thu, 25 Mar 2021 08:22:58 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ab3:5f8f:0:0:0:0:0 with HTTP; Thu, 25 Mar 2021 08:22:57 -0700 (PDT) In-Reply-To: <36E45DD6-E2BD-4801-BAAE-4355C83D1AC3@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> Date: Thu, 25 Mar 2021 16:22:57 +0100 Message-ID: To: Mike Schinkel Cc: Rowan Tommins , internals@lists.php.net Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [PHP-DEV] [RFC] Auto-capture multi-line closures and shortfunctions take 2 From: olleharstedt@gmail.com (=?UTF-8?Q?Olle_H=C3=A4rstedt?=) 2021-03-25 16:02 GMT+01:00, Mike Schinkel : > > >> On Mar 25, 2021, at 10:41 AM, 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 whe= re >> 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 th= e >> 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 th= e >> 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, wh= en >> they don't actually need any variable capture. An explicit syntax like >> "use(*)" instead makes this a deliberate choice. > > And yet adding " use (*)" makes the syntax longer, which goes against one= of > the goals many people have for it: to be shorter. 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.