forcing "@nogc" on class destructors
Jerry Morrison via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jan 24 15:53:56 PST 2015
On Wednesday, 21 January 2015 at 20:32:14 UTC, Steven
Schveighoffer wrote:
>> Actually there's nothing on the documentation about class
>> destructors
>> [1] that warns about that specific issue of the current (and
>> default) GC.
>>
>> [1] http://dlang.org/class.html#destructors
>>
>
> I think the docs are in need of updating there. It's not meant
> to be a secret that you cannot allocate inside a GC collection.
> I'll try to put together a PR.
Please do!
On Thursday, 22 January 2015 at 14:07:31 UTC, Steven
Schveighoffer wrote:
> In the vast majority of cases, nobody adds a dtor, or they use
> dtors for their intended purpose (deallocating non-GC
> resources) and everything works fine. And the runtime catches
> any slips with an appropriate handling (abort instead of
> corrupt memory).
While you're writing that PR, would you clarify that "The
destructor is expected to release any resources held by the
object." means ***non-GC resources*** and that `new` will abort?
Also would you be so kind as to make a bolder warning that member
refs to GC objects may be invalid? That's nasty and unexpected!
(Java finalizers don't work like that.) [Nulling them out would
be nicer for debugging...]
"This means that destructors cannot reference sub objects. This
rule does not apply to auto objects or objects deleted with the
DeleteExpression, as the destructor is not being run by the
garbage collector, meaning all references are valid."
That wording contradicts the previous paragraph about "the delete
expression ... [calls] ... the garbage collector calls the
destructor immediately". Maybe something like "...not being run
in a garbage collection..." would be better.
More information about the Digitalmars-d
mailing list