I think it's much less work to parse <<>> as comments in 7.0 instead of having every framework releasing and supporting two packages. In the past, frameworks released new major versions to use new PHP features, but this came with a lot of incompatibilities and many companies skipped the migration hell and stayed with old and unsupported versions.
Regards Thomas Benoit Schildknecht wrote on 24.04.2016 01:48: > If I was a popular framework creator, this wouldn't stop me. I would > release two packages : one for 7.0, another one for 7.1. And the 7.0 one > would be the 7.1 one that has been processed through a script to remove > any <<>> syntax, or to transform it (if pre/post attributes instructions > were to be implemented in the core). > > Regards, > Ben. > > Le Sun, 24 Apr 2016 01:09:08 +0200, "Thomas Bley" <ma...@thomasbley.de> a > écrit: > >> The <<>> syntax comes with the problem that previous versions cannot >> ignore it on parsing. >> So poeple write new frameworks for 7.0 which cannot be parsed in 5.x, >> then they write new frameworks for 7.1 which cannot be parsed with 7.0 >> and 5.x and so on. >> For companies staying on Linux distributions with long term support on >> 7.0, this is rather a nightmare for both users and framework maintainers. >> When choosing <<>> or any other non-backward compatible syntax for 7.1, >> there should be a patch for 7.0 to ignore the new syntax without parse >> errors. >> >> Regards >> Thomas >> >> Fleshgrinder wrote on 23.04.2016 17:29: >> >>> +1 for the basic idea, however, I have various remarks. >>> >>> The RFC text is hard to read and contains many grammatical mistakes. How >>> could one help you here? >>> >>> I think that the Hack name attributes is unintelligible and annotations >>> would be much clearer to any audience. Simply because the name is very >>> well known. >>> >>> I do not see the need for multi-annotation nor multi-value support. It >>> just creates multiple ways to achieve the exact same thing for no good >>> reason. >>> >>> I do not like the <<>> syntax. It requires many key strokes, is hard to >>> read, and looks ugly. Why not simply @ and be done with it. I am not so >>> sure about the bracket requirement, is it somehow required for the >>> parsing? Otherwise I would leave it off. I guess it might be hard to >>> find the end of an annotation but have you considered to use the >>> semicolon for that? Would align nicely with existing PHP syntax. The >>> following would be the ABNF for my proposal: >>> >>> ANNOTATION = "@" NAME [ " " VALUE ] >>> NAME = STRING >>> VALUE = QUOTED-STRING / PHP-CONSTANT / EXPRESSION >>> QUOTED-STRING = ( "'" / DQUOTE ) STRING ( "'" / DQUOTE ) >>> EXPRESSION = PHP-CODE ";" >>> >>> A semicolon would only be required if it is not a single quoted string >>> (see following example) or constant. A question that I see unanswered is >>> how embedding of variables in quoted strings should be dealt with. I see >>> no need for this but people might assume it is supported because PHP >>> supports it everywhere else. >>> >>> <?php >>> >>> $name = "Richard Fussenegger"; >>> $email = "p...@fleshgrinder.com"; >>> >>> @author "{$name} <{$email}>" >>> class A {} >>> >>> <<author("{$name} <{$email}>")>> >>> class B {} >>> >>> ?> >>> >>> Requiring PHP code to be terminated with a semicolon should also ensure >>> that people do not start to write fully-fledged programs in annotations. >>> Since that is not what they are intended for. An alternative approach I >>> see here would be to go for the brackets but then again only for PHP >>> code: >>> >>> EXPRESSION = "(" PHP-CODE ")" >>> >>> Then again, it looks similar to a function call and this is imho not >>> good. Unless of course new annotations can be defined as special >>> functions directly in userland, e.g. with an `annotation function` >>> and/or `annotation class`. However, this would require more thought. >>> >>> Another question that is unanswered for me is: how to go about adding >>> annotations to a complete file as is currently possible with PhpDoc and >>> its file-level doc block: >>> >>> <?php >>> @author 'Richard Fussenegger <p...@fleshgrinder.com>' >>> @copyright '2016 Richard Fussenegger' >>> @license 'MIT' >>> >>> declare(strict_types=1); >>> >>> namespace Fleshgrinder\PhpInternals; >>> >>> @description 'True annotation support could be a very good thing.' >>> @invariant $this->balance >= self::MIN_BALANCE; >>> class Account { >>> >>> private const int MIN_BALANCE = 0; >>> >>> private int $balance; >>> >>> private Person $owner; >>> >>> @require $sum >= 0; >>> @ensure $this->balance === (old::$balance + $sum); >>> public function deposit(int $sum): void { >>> $this->balance += $sum; >>> } >>> >>> @require $sum >= 0; >>> @require $sum <= $this->balance - self::MIN_BALANCE; >>> @ensure $this->balance === (old::$balance - $sum); >>> public function withdraw(int $sum): void { >>> $this->balance -= $sum; >>> } >>> >>> @deprecated 'for various reasons' >>> public function setOwner(Person $wner): void { >>> $this->owner = $owner; >>> } >>> >>> } >>> >>> @inheritDoc >>> class OverdraftAccount extends Account { >>> >>> private const int MIN_BALANCE = -1000; >>> >>> } >>> >>> ?> >>> >>> We also need to make sure to add something regarding coding standards >>> for annotation names. I would propose to go for camelCase (same as for >>> method names) since this is what PhpDoc used to use for many years now. >>> >>> We also need to define how people can avoid to collide with internal >>> annotations. The typical double-underscore prefix approach that we have >>> for magic methods creates a lot of visual clutter and looks weird if >>> spread among all kinds of places. A namespace approach as we have it >>> already for userland code could help here. >>> >>> <?php >>> >>> use Doctrine\ORM; >>> >>> @ORM::entity >>> @ORM::table [ >>> 'name' => 'user', >>> 'unique_constraints' => [ >>> 'name' => 'user_unique', >>> 'columns' => [ 'username' ], >>> ], >>> 'indexes' => [ >>> 'name' => 'user_idx', >>> 'clumns' => [ 'email' ], >>> ], >>> 'schema' => 'schema_name', >>> ]; >>> class User {} >>> >>> ?> >>> >>> -- >>> Richard "Fleshgrinder" Fussenegger >>> >>> >> > > > -- > Utilisant le logiciel de courrier d'Opera : http://www.opera.com/mail/ > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php