<p>Am 13.04.2016 09:42 schrieb "Maciej Izak" <<a href="mailto:hnb.code@gmail.com">hnb.code@gmail.com</a>>:<br>
> Michael Van Canneyt really doesn't like them :) :</p>
<p>I don't like their use for this either. For their intended purpose, namely to decorate types or properties I have no complains (aside the syntax, but that's a different topic).</p>
<p>> If attribute is used you already know that it has more "flag idea" (by analogy to RTTI attributes, anyway it does not have to be just like a flag), as in our example presented in "Initialize/Finalize management operators and Default intrinsic" topic - is more visible whole context. Introducing many new keyword is the waste and can collide with existing keywords. <br>
><br>
> I don't want the language with thousands of keywords, some things can be delegated to attributes. *That helps to keep main language more clear*.<br>
><br>
> Usage of attributes is more readable than mix of many keywords (it depends of context ofc). I think in many areas it is matter of taste. Of course is possible to implement new keywords, but <br>
> *the main idea of using attributes for syntax elements is to omit explosion of new keywords*... Just imagine this as attributes for nodes of compiler. Pure theory:<br>
><br>
>   // open mp - attributes way<br>
>   [OmpParallel]<br>
>   begin<br>
>     [OmpFor]<br>
>     for i := 1 to 10 do<br>
>       WriteLn(i);<br>
>   end;</p>
<p>And this is something I'm strongly opposed to and which is exacty the orthogonality Michael was talking about. Attributes are supposed to be related to the RTTI, but adding them to blocks or fors does not extend any RTTI, because there is none to begin with! And that is where this whole thing stinks!</p>
<p>> FINAL COMPROMISE: is good to allow selected attributes for Delphi compatibility (in Delphi mode only) for example to allow usage of [ref]. I'd like to run my Generics.Collections in Delphi too :). No big deal:<br>
><br>
> procedure Foo([ref] const X: TFoo);<br>
><br>
> can be interpreted just like:<br>
><br>
> procedure Foo(constref X: TFoo);</p>
<p>Then just use an ifdef then.</p>
<p>That "[ref] const ..." Is even more an abomination than the attribute syntax itself already is.</p>
<p>> or in the future:<br>
><br>
> [Volatile] FRefCount: Integer;<br>
><br>
> can be interpreted like:<br>
><br>
> FRefCount: Integer; volatile;</p>
<p>Variable/field access is always volatile anyways.</p>
<p>Regards,<br>
Sven</p>