Is it possible to deinitialize the class without calling the gc?

12345swordy alexanderheistermann at gmail.com
Sat Aug 4 14:49:36 UTC 2018


On Saturday, 4 August 2018 at 04:51:55 UTC, Adam D. Ruppe wrote:
> On Saturday, 4 August 2018 at 02:21:48 UTC, 12345swordy wrote:
>> Which is converted to void type when passing the object to 
>> rt_finalize, which causes to lost all type information.
>
> It still has run-time type information, but indeed, the compile 
> time info is lost.
>
>
>>> Child classes have independent destructors which do not need 
>>> to adhere to the attributes of the parent class destructor,
>> Why is this an issue? Simply don't call them.
>
> Then the object isn't fully destroyed....
I know the risks behind it, @nogc and others only care that 
non- at nogc functions are not called. That's why I propose 
destructor_hook function for clear transparency.

>
> So, even with the changes I outlined above, @nogc destroy would 
> be valid if and only if it is passed a class whose *static* 
> type explicitly includes the @nogc guarantee, which is only 
> allowed if all the parent chains, all the way up, have either 
> trivial destructors or their own @nogc guarantees.
I was thinking along of lines of "Canary in a coal mine" when it 
comes to class static typing if the compiler couldn't determine 
the child classes that are currently inheriting the current 
non-final class. A system attribute "Canary" Boolean value can be 
override by compiler to set it to false if it detects a "Gas 
leak".

> But you can derive the bits you need from compile time info if 
> the child destructors were restricted as described above. 
> Unless I'm missing something too....
>
You want me to introduce the "restrict" keyword in my dip for 
maximum safety? Fine, I don't mind.

> of course you could just do the sane thing and pretend @nogc 
> doesn't exist. then this stuff becomes a lot easier and you can 
> just get back to work.
People are treating classes like a neglected child due to the 
lack of @nogc. We could solve the "is it @nogc?" issue by having 
the compiler provide a strict readonly body of the 
function/class/module (after all the meta-programming has been 
applied obviously) and statically analyze it, but there are fears 
that this will lead to AST, and I don't have enough spare time to 
argue all day on this atm.

-Alexander



More information about the Digitalmars-d mailing list