Sean Kelly wrote:
On Jul 29, 2010, at 9:37 PM, Andrei Alexandrescu wrote:
Sean Kelly wrote:
On Jul 29, 2010, at 8:21 PM, Walter Bright wrote:
Andrei Alexandrescu wrote:
Walter Bright wrote:
I think we misunderstand each other. A file copy program
that fails due to, say, the disk being full, should not
produce a core dump. It should produce an error message
like:
error: disk full
An uncaught exception is NOT an invalid or crashed program
in D.
I think Sean talks about Throwable objects that are not
Exception objects.
It's reasonable for seg fault exceptions to produce a core
dump. It isn't for recoverable Exceptions, or for
non-recoverable ones like out of memory.
At the moment, we don't differentiate between seg faults and
non-recoverable errors. Though seg faults are only thrown as
exceptions on Windows which doesn't have core dumps anyway, as
far as I know. For what it's worth, I was investigating this bug:
http://d.puremagic.com/issues/show_bug.cgi?id=4385
I see. Overall, my opinion is that regular exceptions that escape
main(0 should simply print their error message to stderr and
exit(1). There should be no stack trace, abort(), core dump, or
anything worse than that. Print the string and exit(1). Anything
more will force most people to actually insert a try/catch in main
to do the simple thing.
I think the stack trace at least should remain. People have been
begging for that for years, and I do think it's pretty useful. Simply
printing an error message says nothing about the context, and it's
context that gives error messages meaning.
I for one really enjoy stuff like:
void main(string[] args)
{
enforce(args.length > 1, "Usage: prog arg");
...
}
Having a stack trace tacked there... not good. Exception messages are
meant to be seen by users. Stack traces are meant to be seen by the
programmer. The fact that we print both by default doesn't sit well at all.
As for core dumps, if the user wants them for unhandled exceptions
rather than just segfaults, there's currently no way to get them with
a D app because main() catches everything.
Well we need to do something about that.
I'm not sure about the
merit of failing via abort() vs. returning -1, but I do think it's a
nice option to have available. Personally... I dunno. I'd mostly
want them for segfaults and bus errors, and I can do that with signal
handlers. I'd have to defer to someone else on that.
Is it reasonable to say that Exception is the "nicer" thing and
Throwable is the "less nice" thing that is handled differently? Then
come bus errors, which are "not nice at all".
Andrei
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos