On Tue, Aug 4, 2020 at 8:45 AM Derick Rethans <der...@php.net> wrote:

> Out of Banjamin's suggestion[1], I've updated the Shorter Attribute
> Syntax Change RFC to reflect that process:
> 
> https://wiki.php.net/rfc/shorter_attribute_syntax_change
> 
> Patches and comments welcome.

Hi Derick,

I don't agree with the main argument put forward in this RFC:

> The main concern is that @@ has no ending symbol and it's
> inconsistent with the language that it would be the only
> declaration or statement in the whole language that has no ending
> termination symbol.

Attributes are not a standalone statement or declaration; they are
metadata *on* a declaration. They cannot stand alone, but always
modify the following declaration, just as public and static modify
a method, or a type declaration modifies a parameter or property.

Modifying declarations (e.g. for visibility and type) do not have an
ending symbol. For example, we don't write something like:

    [public] function foo([int] $bar) {}

With the @@ syntax attributes a treated consistently with type and
visibility declarations:

    @@Jit
    public function foo(@@Deprecated int $bar) {}

So there is nothing inconsistent about not having a termination
symbol - this is in harmony with visibility and type declarations in
PHP, as well as the attribute syntax used by a majority of C family
languages. [1]

When it comes to supporting attribute grouping, I actually consider
this a downside of the #[], @[], and <<>> syntaxes. It complicates
the internal implementation, and makes it so developers have to
choose between two different syntaxes when adding more than one
attribute. In real-world use cases the @@ syntax is just as or even
more concise without the extra parser/compiler complexity:

    #[Attr1, Attr2] # 15 chars

    @@Attr1 @@Attr2 # 15 chars

    # 4 lines, 53 chars not counting whitespace
    @[
        AttrWithParam("foobar"),
        SomeOtherAttr("fizzbuzz"),
    ]

    # 2 lines, 52 chars
    @@AttrWithParam("foobar")
    @@SomeOtherAttr("fizzbuzz")

I agree that we want the best syntax, not necessarily the best
**looking** syntax. I still believe that the @@ syntax offers the best
balance here. It's familiar, concise without additional complexity,
and doesn't break useful syntax the way @[] and #[] do.

Kind regards,  
Theodore

[1]: 
https://wiki.php.net/rfc/shorter_attribute_syntax#comparison_to_other_languages
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to