On 8 March 2013 18:19, Artur Skawina <art.08.09@gmail.com> wrote:
On 03/08/13 18:54, Iain Buclaw wrote:
> Also not needed:
> - aligned:  because D has align() for that.

D's align wasn't nearly enough last time i looked. (There were changes to
it since, but as I can't upgrade, haven't looked at the details)

> - gnu_inline, artificial:  because D has no inline keyword, nor has need for one.

always_inline is needed, the heuristics are not always enough. Of course it
should map to just "inline".


inline and always_inline are two subtly different beasts.  But altogether I don't think either make any guarantees of an inline occuring (although always_inline is a little more relaxed about it all).

Some things are marked as always_inline anyway by gdc:  struct/class methods, lambdas and delegate literals.  Though it is probably known that this only worked within the module being compiled.  Cross-module inlining is not there yet.

 

> - pure, const:  Although D has pure keyword that does not necessarily follow same as C semantics, I don't think the inclusion of these are beneficial at all.

"const" may not be needed. "pure" is useful /exactly/ because of the D semantics.


Infact, strongly pure functions (where all parameters are immutable) are indeed marked as C "pure" by gdc if the functions are also nothrow.  Whether this might cause some bad behaviour I'm yet to run into or find a case of...


 
> - optimise, target:  I'm sure the guy who implemented these meant well, but I fail to see the point as to why you'd want such an attribute.

They are useful. And it reminds me that last time i looked, GDC handled "target", "tune"
etc wrongly: http://forum.dlang.org/post/mailman.1.1325716211.16222.digitalmars-d@puremagic.com


And I'd rather not want to spend time fixing it.  The code that handles these attributes are a bit bulky, and require a bit of questionable copying from the c-family frontend.


Regards
--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';