On Saturday, 12 July 2014 at 09:44:16 UTC, Piotr Szturman wrote:
W dniu 2014-07-11 05:18, Kapps pisze:
On Friday, 11 July 2014 at 02:32:00 UTC, Manu via
Digitalmars-d wrote:
So, we allow assert() in nothrow functions, the argument is
that
assert is non-recoverable, so it's distinct from user
exceptions.
I have this in my 'nothrow @nogc' function:
assert(false, "Message " ~ details);
It complains "Error: cannot use operator ~ in @nogc function"
I think it should be allowed to invoke the GC for formatting
error
messages inside of assert statements, just the same as
assert() is
allowed inside of nothrow functions.
Thoughts?
More generally, I'm somewhat surprised that @nogc does not
still allow
allocating Errors (including with assert), as who cares if
your program
may slightly pause when it's about to crash in a theoretically
unrecoverable way.
It does matter when entire program is marked with @nogc, so
there may be no GC code at all (GC code may not be linked).
Well, it wouldn't even link then...
But I think the more common route to go in such a case is to make
a stubbed out GC that provides only allocation functionality
(e.g. forwarding to malloc/free), but doesn't do any garbage
collection. After all, some kind of memory allocation needs to
present in almost all cases, it's just that it's done manually.