On Fri, Apr 17, 2020 at 12:43 PM Benjamin Eberlei <kont...@beberlei.de> wrote:

> On Fri, Apr 17, 2020 at 6:11 PM Theodore Brown <theodor...@outlook.com> wrote:
> 
> > Can you provide an example of an attribute name containing whitespace
> > that would be allowed with the shift left/right tokens but not with the
> > attribute token?
> 
> This is about [whitespace] between token and attribute name, so `@:Foo`
> is allowed but `@: Foo` is not. Whereas with the hugging As, `<<Foo>>`
> and `<< Foo >>` is allowed.

Ah, that makes a lot more sense. Thanks for the clarification. I guess
allowing whitespace could also be considered a downside, since it will
lead to style guide wars about which spacing convention to use.

> This is a personal assumption here, but I would assume 95% of developers
> have never used >> or << before or for a long time and maybe 80% don't
> even know what bit shift means and how it works. I would think nobody
> needs this in attributes.

Even if bit shifts are rarely used, the fact that such syntax is valid
means there's a higher cognitive load when reading attributes to
understand whether a shift token is part of a parameter value or
delineating the start/end of an attribute declaration.

Quick, does this function have two attributes with one parameter each,
or one attribute with two parameters?

```php
<<SomeAttribute(2 * 3 + 3)>><<Foo(4 + 5 * 2)>>
function foo() {}
```

How about this one?

```php
const Foo = 2;

<<SomeAttribute(2 * (3 + 3)>>Foo, (4 + 5) * 2)>>
function foo() {}
```

Even if the syntax is technically unambiguous, reusing shift tokens as
attribute delineators results in symbol-heavy code which is harder to
quickly and correctly understand.

FWIW Hack is apparently moving away from the shift token attribute
syntax to one using `@` (see 
https://github.com/facebook/hhvm/commit/3983bd2ca6b252a93d98f2bb2d7e8e89f6f004d1);

Sincerely,
Theodore

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

Reply via email to