On Tuesday, 15 April 2014 at 21:42:51 UTC, Walter Bright wrote:
On 4/15/2014 2:41 PM, Brad Anderson wrote:
Yes, please. Too few of the attributes have inverse attributes.

That's a subject for another DIP.

This would go fairly well with Andrei's idea of passing true or false to an attribute to enable or disable it.

@gc(false) void fun() {}

Also, as was mentioned earlier in the thread, if @gc was actually implemented as a UDA just like any other, gc could simply be a struct that the compiler looks for, something along those lines.

struct gc
{
    bool enable;
    //...
}

Which naturally implements Andrei's proposed syntax. The same could be done for @property, @safe, etc. If we had DMD as a library, @gc probably wouldn't even need to be "special", i.e., compiler magic.

Finally, as MonarchDodra mentioned, the number of optional attributes to mark a function with can get to be a problem after awhile. I have two ideas on this. One is extending the concept of aliases to also alias attributes, like so:

//TypeTuple or just bare list?
alias everything = TypeTuple!(@safe, nothrow, pure, @gc(false));

or

alias everything(Attrs...) = Attrs;

I think that the Microsoft language with effect algebra (Bearophile has mentioned it before) does this. E.g., pure is actually: alias pure: noeffects nothrow //... (I don't remember the actual syntax)

Secondly, this could just be a "higher level attribute". I don't know if this would require a language change or not...

struct Everything
{
    bool _pure;
    bool _nothrow;
    //...
}

Reply via email to