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