<p>Am 13.04.2016 13:02 schrieb "Michael Van Canneyt" <<a href="mailto:michael@freepascal.org">michael@freepascal.org</a>>:<br>
><br>
><br>
><br>
> On Wed, 13 Apr 2016, Maciej Izak wrote:<br>
><br>
>> Moved from: "Initialize/Finalize management operators and Default<br>
>> intrinsic". I'd like to keep Initialize/Finalize topic more clear ;P<br>
>><br>
>> Small introduction:<br>
>><br>
>> for selected language elements in Delphi is possible to use attributes. For<br>
>> example in Delphi we have:<br>
>><br>
>>  TCustomAttribute = class(TObject)<br>
>>  end;<br>
>>  WeakAttribute = class(TCustomAttribute);<br>
>>  UnsafeAttribute = class(TCustomAttribute);<br>
>>  RefAttribute = class(TCustomAttribute);<br>
>>  VolatileAttribute = class(TCustomAttribute);<br>
>><br>
>> which is used like this:<br>
>><br>
>> procedure Foo([ref] const X: TFoo); // AFAIK FPC equivalent is procedure<br>
>> Foo(constref X: TFoo);<br>
>><br>
>> or like this for TObject field for ref. count for ARC:<br>
>><br>
>> [Volatile] FRefCount: Integer;<br>
><br>
><br>
> Sorry. This is simply very bad design.<br>
><br>
> 1. We already have a syntax for this kind of thing, it is called modifiers.<br>
>    No need to introduce a second syntax. You just introduce extra modifiers.<br>
><br>
> 2. You make the COMPILER dependent on USER-DEFINED classes.<br>
>    What kind of nonsense is that ?<br>
>    It is even worse than the enumerator syntax Borland/Embarcadero invented.<br>
><br>
> If the compiler needs to know about it and act on it (and it does for ARC), then it must be a keyword or modifier.<br>
><br>
> Attributes are meant for user-space information.<br>
><br>
> The compiler has no business with it, from the point of view of the compiler<br>
> the presence or non-presence of attributes is entirely irrelevant. It is<br>
> meant to be extracted easily by the user. No more, no less.<br>
><br>
> Attributes used like this are self-contained. You can use it or not, it<br>
> makes no difference to the compiler. This is an example of _good_ design.<br>
><br>
> If you use attributes to start controlling ARC or whatever other _language feature_, this is _bad_ design, because you link one feature to another, which simply is not related to it at all.</p>
<p>Agreed. Attributes are nice and well, but only for the area they had been designed for.</p>
<p>Regards,<br>
Sven</p>