On Fri, Apr 17, 2020 at 5:49 AM Benjamin Eberlei <kont...@beberlei.de> wrote:
> As there has only been minimal new discussion after the last changes to the > RFC I wanted to give a heads up that I will open the vote on Monday > afternoon. > > If you have further remarks or questions about the RFC, please let me know. > > On Mon, Mar 9, 2020 at 3:42 PM Benjamin Eberlei <kont...@beberlei.de> wrote: > > > Hi all, > > > > I want to resurrect Dmitrys Attributes RFC that was rejected for 7.1 in > > 2016 with a few changes, incorporating feedback from the mailing list back > > then and from talking to previous no voters. > > > > The RFC is at https://wiki.php.net/rfc/attributes_v2 Hi Benjamin, Thanks for working on this RFC. I have a couple questions and thoughts about the proposed syntax options. First, the RFC says that the alternate T_ATTRIBUTE `@:` token has the downside "that it does not permit whitespace in attribute names to allow detecting the ending of the declaration." 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? The RFC says that "Semantically the attribute declaration should be read as instantiating a class with the attribute name and passing arguments to the constructor." But class names can't contain spaces, so how is it a downside for attribute names to not permit them either? It seems like it would be a massive footgun to allow attribute names that *can't* resolve to a class name, since there would be no way to migrate them to a declared attribute class without a BC break. For this reason, regardless of the final syntax choice I think whitespace should not be permitted in attribute names. Secondly, given that attribute arguments are evaluated as constant expressions, it's far easier for me to read the T_ATTRIBUTE `@:` syntax at a glance than the syntax reusing shift left/right tokens. With the latter my eyes tend to confuse shift left/right tokens in a constant expression with the open/close token of an attribute (especially since the syntax using bit shift tokens allows multiple attribute declarations on the same line). Consider this example using the shift left/right token syntax: ```php <<BitShiftExample(4 >> 1, 4 << 1)>><<OtherAttribute(4 >> 1, 4 << 1)>> function foo() {} ``` To me the same thing using the T_ATTRIBUTE syntax is far more readable: ```php @:BitShiftExample(4 >> 1, 4 << 1) @:OtherAttribute(4 >> 1, 4 << 1) function foo() {} ``` Best regards, Theodore -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php