Nikita and all,

On Thu, Oct 1, 2015 at 10:58 AM, Nikita Nefedov <inefe...@gmail.com> wrote:
> On Thu, 01 Oct 2015 15:33:51 +0300, Rowan Collins <rowan.coll...@gmail.com>
> wrote:
>
>> That's not how Rasmus expressed it
>> [http://marc.info/?l=php-internals&m=144107616411299&w=2]:
>>
>>  > I made a very deliberate decision In the very first implementation of
>> PHP to avoid scope side-effects like this. Inside a function everything is
>> local unless explicitly declared not to be. This has carried through for the
>> past 20+ years in slightly different ways, but the basic rule has stayed
>> consistent even for closures.
>
>
> Ok, it proves that it's not evolutionary that scopes aren't chained. Taking
> my words back.
>
>
>> It is a tool for making them shorter, yes, but it is not the only way, and
>> it comes with a cost of changing established behaviour. Again, look at C++'s
>> lambda syntax - it is much shorter than PHP's, but requires a list of all
>> variables from the outer scope being captured.
>
>
> C++11 doesn't *require* the list of all variables, but it does require
> explicit "wildcard" ([=] for copy semantics, [&] for capturing by
> reference).
> But C++ is not the best place for picking up syntax choices, quite frankly
> it's one of the least readable languages in a way that it allows you to
> write very cryptic code easily (but still allows to write perfectly readable
> code as well).
> I'm not aware of reasons why ISOCPP decided that automatic capture should be
> disabled by default, maybe it was because it was hard to decide whether it
> should default to by-value or to by-reference semantics, or maybe [] tokens
> were needed because of parsing limitations.
>
>
>> You've picked on one syntax I explicitly labelled as "a straw man", and
>> one idea which was proposed by somebody else a few hours ago, and use those
>> to somehow dismiss the whole idea of a short syntax which lists captured
>> variables. I have come up with about a dozen different ideas in various
>> parts of this discussion, and could list dozens more. They would all have
>> their pros and cons, but I don't see how you can dismiss the whole concept,
>> UNLESS you consider the auto-capture to be an end in its own right, rather
>> than "just a way of making it shorter".
>
>
> I don't think there was a dozen of different ideas, I could only find those
> about `lambda(arg-list; use-list; expression)` and variations of it with
> different keywords and different return-type syntax.
> I do understand that this is quite subjective, but neither this syntax nor
> `fn(arg-list; use-list) expression` look obvious and easily readable to me.

The problem is that semicolons are non-obvious, especially in a
context where commas are used (and traditionally used).

Example, tell the difference quickly between

fn($a, $b; $c) => $a + $b + $c;

and

fn($a; $b, $c) => $a + $b + $c.

At a glance, they are identical. You have to actually look at each
item to realize that there's a difference. At least with use() there's
a syntactical separator there to draw your eye to the contextually
relevant information.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to