DIP 1008 Preliminary Review Round 1

MysticZach via Digitalmars-d digitalmars-d at puremagic.com
Wed May 24 16:51:11 PDT 2017


On Tuesday, 23 May 2017 at 22:40:43 UTC, Martin Nowak wrote:
> The proposal is a very mechanical fix, throwing several special 
> cases at one specific problem.
> Why does it have to be refcounted? Seems like there is only 
> ever one reference to the current exception (the catch 
> variable).
> The only thing that seems necessary is to require scope on 
> catch variable declarations, so that people do not escape the 
> class reference, then this info might be used by the runtime to 
> free exception objects after the catch handler is done.
>
> Amaury put a bit more words into that.
> http://forum.dlang.org/post/gtqsojgqqaorubcsneie@forum.dlang.org
>
> Has staticError been considered? It has a potential issue with 
> multiple nested exceptions, but otherwise works fine.
> https://github.com/dlang/druntime/blob/bc832b18430ce1c85bf2dded07bbcfe348ff0813/src/core/exception.d#L683

I'm trying to understand your and Amaury's point. Normally, when 
you say `new` you get memory from the GC allocator. The @nogc 
attribute is supposed to prevent this, if I understand it 
correctly. Are you saying that `@nogc` as such is misconceived, 
because what a good language feature should really be doing is 
identifying and preventing new memory that _can't_ be 
deterministically destroyed? Is the problem here with the @nogc 
attribute? Because I think Walter's goal with this DIP is to make 
it so that you can put @nogc on _called_ functions that throw 
using `new`. Whereas your solution is to ignore that `new 
Exception` allocation, on account of the fact that you can 
deterministically destroy the Exception, provided you use `scope` 
catch blocks at, or above, the call site. Your solution might 
actually have its priorities straight, and `@nogc` may be 
designed badly because it clumps all GC allocations into one big 
basket. However, getting new memory from the GC still could 
trigger a collection cycle, which is what @nogc was created for, 
and simply knowing that you can reliably destroy the allocated 
memory doesn't change that.

Thus, if I understand correctly, you and Amaury are arguing that 
`@nogc` as currently designed is a false goal to be chasing, that 
the more important goal is memory that can be deterministically 
destroyed, and therefore it distresses you that the language may 
be altered to chase the false prize of `@nogc` everywhere, 
instead of focusing on a real prize worth attaining?



More information about the Digitalmars-d mailing list