Truly @nogc Exceptions?

Jonathan M Davis newsgroup.d at jmdavisprog.com
Fri Sep 21 09:10:06 UTC 2018


On Wednesday, September 19, 2018 3:16:00 PM MDT Steven Schveighoffer via 
Digitalmars-d wrote:
> Given dip1008, we now can throw exceptions inside @nogc code! This is
> really cool, and helps make code that uses exceptions or errors @nogc.
> Except...

I pointed out this problem when the DIP was orginally proposed and have
always thought that it was kind of pointless because of this issue. The core
problem is that Exception predates @nogc. It predates ranges. Its design
makes sense if exceptions are rare, and you're willing to use the GC. IMHO,
it even makes sense in most cases with most code that is trying to avoid
allocations, because the allocations are only going to occur when an error
condition occurs. So, for most code bases, they won't affect performance.
The problem is that even though that usually makes perfect sense, if you've
written your code so that the non-error path doesn't allocate, you'd really
like to be able to mark it with @nogc, and you can't because of the
exceptions. The DIP helps but not enough to really matter. And of course, in
those code bases where you actually can't afford to have the error path
allocate, it's even more of a problem.

So, what we have is an Exception class that works perfectly well in a world
without @nogc but which doesn't work with @nogc worth anything. And if we
want to fix that, I think that we need to figure out how to fix Exception in
a way that we can sanely transitition to whatever the new way we handle
exception messages would be. I think that the message member was added by
Dicebot as an attempt to fix this issue, because Sociomantic needed it, but
I don't know exactly what's going on with that or @__future.

- Jonathan M Davis





More information about the Digitalmars-d mailing list