On 4/24/2016 1:00 PM, Zeev Suraski wrote: > > >> -----Original Message----- >> From: Sebastian Bergmann [mailto:sebast...@php.net] >> Sent: Sunday, April 24, 2016 12:14 PM >> To: internals@lists.php.net >> Subject: Re: [PHP-DEV] [RFC] PHP Attributes >> >> On 04/21/2016 11:13 PM, Dmitry Stogov wrote: >>> I would like to present an RFC proposing support for native annotation. >> >> Dmitry, >> >> please use "annotation" as the name for this feature and not "attribute". >> >> We already have attributes: it's what we use to store data in objects. And >> while some people call them "member variables" or "properties" the correct >> term for them (AFAIK) is "attribute". > > I don't think I've ever heard properties referred to as attributes in the > context of PHP. The PHP manual defines them and refers to them throughout as > 'properties'. > > (I'm not voicing an opinion on attributes vs. annotations; Just pointing out > that data storage inside objects isn't named attributes). > > Zeev >
The terminology here is pretty clear and you can just look it up, it has nothing to do with PHP or Java or whatever. The main problem is simply that people do not know the terminology and get mixed up. That is usually okay in a casual discussion where each peer understands what the other is referring to. However, we are dealing with language specification here and need to be very exact or we fuck it up for the users. `$x` is a property in the following example: class A { $x; } https://en.wikipedia.org/wiki/Property_%28programming%29 `private` is an attribute of property `$x` and an access modifier (not visibility, because the property is still visible, e.g. via reflection, and it only alters access to the property): class A { private $x; } https://en.wikipedia.org/wiki/Attribute_%28computing%29 Note that these things go further up in the terminology hierarchy to: Field - https://en.wikipedia.org/wiki/Field_%28computer_science%29 Record - https://en.wikipedia.org/wiki/Record_%28computer_science%29 Data Structure - https://en.wikipedia.org/wiki/Data_structure This is not the whole image yet, there are more things like (random order): - functions - methods - members - class variables - static variables - behavior - data - ... You will notice, if you read all Wikipedia articles and related documents, that these terms are too often used interchangeable. This is, as mentioned before, mainly the case because people to not care about terminology in general. To sum it up, calling them attributes is outright wrong because not all parts of a source code of a programming language has attributes. That is why Sun chose the word annotation. Annotation means metadata that was added to data. It does not say anything about the data itself and it does not necessarily alter the data in any way, however, it can. This is exactly what this feature is about. Since, an entity annotation does not alter the data (in this case a class) itself but this additional metadata may be used to configure other parts of the program. The same is true for a method that has been annotated with test. The data is not altered at all but is helps other parts of the program to configure specific data and behavior based on this additional metadata that was added to the data. Execution of the same method without those other parts that react on the metadata does not do anything and the program will execute normally. TL;DR this feature *MUST* be called annotations (unless someone knows an even better term) and the annotations *MAY* be used to add attributes to properties but for many other things too. -- Richard "Fleshgrinder" Fussenegger
signature.asc
Description: OpenPGP digital signature