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