Exceptions in @nogc code
Adam D. Ruppe via Digitalmars-d
digitalmars-d at puremagic.com
Sat Apr 1 17:09:09 PDT 2017
On Saturday, 1 April 2017 at 14:54:21 UTC, deadalnix wrote:
> The problem you want to address is not GC allocations, it is GC
> collection cycles. If everything is freed, then there is no GC
> problem. not only this, but this is the only way GC and nogc
> code will interact with each others.
Amen. Moreover, for little things like exceptions, you can
probably also just hack it to not do a collection cycle when
allocating them.
pseudocode:
So right now, we have:
void* gc_alloc(T)(size_t sz) {
auto alloc = malloc(sz);
if(alloc is null) {
collection_cycle();
retry();
if(alloc is null) // still
onOutOfMemoryError();
}
return alloc;
}
But imagine if it was
if(alloc is null && !is(T : Throwable))
so it just abort()'s if it can't allocate the exception instead
of collecting. How would that be any different than malloc()'ing
it?
But, if you DO get a chance to run the GC, it will be collected,
and, of course, you can manually/automatically free it too.
Works with existing code with no more likelyhood of leaking than
we already have, maintaining memory safety... and removes the
risk of a new exception of triggering a gc cycle.
so why not?
> Things are unfolding exactly as predicted at the time. Ad hoc
> solutions to various problems are proposed one by one and the
> overall complexity is growing much larger than initially
> proposed solutions.
Yeah, my gut reaction to this was "gross moar attributes come on"
More information about the Digitalmars-d
mailing list