forcing "@nogc" on class destructors

Vladimir Panteleev via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 20 13:41:15 PST 2015


On Tuesday, 20 January 2015 at 21:38:50 UTC, ketmar via 
Digitalmars-d wrote:
> On Tue, 20 Jan 2015 21:34:54 +0000
> Freddy via Digitalmars-d <digitalmars-d at puremagic.com> wrote:
>
>> On Tuesday, 20 January 2015 at 18:12:27 UTC, ketmar via 
>> Digitalmars-d wrote:
>> > Hello.
>> >
>> > as there is no possibility to doing GC allocations in class
>> > destructors, wouldn't it be nice to just force "@nogc" 
>> > attribute on
>> > such dtors?
>> >
>> > i know, i know, "this will break alot of code". i'm pretty 
>> > sure that
>> > this will break alot of INVALID code, which better be broken 
>> > at
>> > compile-time anyway.
>> >
>> > sure, we have alot of code of pre- at nogc era, and alot of 
>> > code where
>> > authord didn't bother to add attributes at all. so we can 
>> > introduce
>> > "--force-dtor-nogc" CLI arg and document this change, making 
>> > it opt-in
>> > for, say, six month and opt-out after that.
>> >
>> > and i know that D devs (Walter at least) are resistant to 
>> > command-line
>> > flags that changing compiler behavior. i don't know how to 
>> > overcome
>> > this. say, by adding "@gc" attribute, which dfix can 
>> > automatically add?
>> >
>> > but i still believe that instead of telling people again and 
>> > again that
>> > they should not allocate in class destructors, we can use 
>> > computer
>> > itself to track and stop this behavior.
>> >
>> > let's see how this proposal will be rejected. will there be 
>> > some sane
>> > reasons, or only the good old song about "broken code"? make 
>> > your bets!
>> Not an error, Make it a warning.
> alas, attribute violations are errors. turning that into 
> warning means
> that compiler needs new flags and new code to determine if that 
> is
> "hard restriction" or just "advise". the point of my proposal 
> is that
> it can be done painlessly with one or two very simple changes in
> compiler code.

We already have warnings such as:

Warning: toHash() must be declared as extern (D) size_t toHash() 
const nothrow @safe, not const uint()

It could issue a similar warning to destructors declared without 
@nogc.


More information about the Digitalmars-d mailing list