On 11/1/16 11:54 AM, Jonathan M Davis via Digitalmars-d-learn wrote:
On Tuesday, November 01, 2016 10:57:38 Steven Schveighoffer via Digitalmars-
d-learn wrote:
On 10/31/16 6:29 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
    assert(0, "format threw when it shouldn't be possible.");

This turns into a non-printing seg fault when compiled in release mode.

I'm well aware of that, and I don't see that as a problem. A message might
be nice, but the key thing is that it kills the program if there's a
problem, and given Mike's point about the C layer, having it segfault is
potentially preferable to throwing an Error to kill the program.

I disagree that avoiding the message printing is not a problem. I have had the unpleasant experience of having a program that dies on the order of 1-2 weeks with "SegFault", without any way of instrumenting the failure (debugging not an option, doesn't fail on dev machine). Just a tiny hint of what the problem is, can save weeks if not months of searching.

A little while ago, I added an internal tool to both abort a program, and print a message (including file and line number) to druntime. It's not exactly public, but may be useful to expose. It should be callable from any location, including signal handlers.

https://github.com/dlang/druntime/blob/master/src/core/internal/abort.d

Is there not some assumeNoThrow wrapper somewhere?

Someone added assemWontThrow to std.exception semi-recently, but I'd be very
surprised if it didn't incur performance overhead such that I'd just as soon
use an explicit try-catch and be done with it.

The function I'm imagining shouldn't add any overhead...

-Steve

Reply via email to