[phobos] enforce() improvement

Lars Tandle Kyllingstad lars at kyllingen.net
Thu Jul 1 11:06:45 PDT 2010


There is no need to add anything, Throwable already has this structure.
That was the main point behind my proposal:  enforce() puts the
information in the wrong place.

I'll look into it.

-Lars



On Thu, 2010-07-01 at 10:47 -0700, Andrei Alexandrescu wrote:
> I think it would be a good improvement to add such structure to 
> exceptions. So toString() would continue to print essentially the same 
> message, but it would assemble it from the separately-available 
> properties file, line, and reason.
> 
> Go for it, or submit a ticket so it's not forgotten.
> 
> Andrei
> 
> Lars Tandle Kyllingstad wrote:
> > The library user would still get the information, because
> > Throwable.toString() would still give the file and line number, and like
> > I said, Throwable.file and Throwable.line are supposed to be filled with
> > that information.  My point was that enforce() puts the information in
> > Throwable.msg, which I find completely redundant.
> > 
> > Also, if you are using plain enforce() for error checking (like Phobos
> > does in a lot of places), Throwable.msg is your only source of
> > information to pass to the user, since enforce() by default throws an
> > Exception and not an InsightfulInformationException.
> > 
> > -Lars
> > 
> > 
> > 
> > On Thu, 2010-07-01 at 07:00 -0700, Steve Schveighoffer wrote:
> >> I disagree.  The "user" in this case, is the user of the library code.  He does in fact need to know the file/line that caused the problem, and more useful would be the full stack trace so he can see where his code used the offending value.
> >>
> >> If you are relying on enforce to give insightful error messages to an actual user (that is, someone who runs your program), then you need some training in user interface design :)
> >>
> >> -Steve
> >>
> >>
> >>
> >> ----- Original Message ----
> >>> From: Lars Tandle Kyllingstad <lars at kyllingen.net>
> >>> To: Phobos mailing list <phobos at puremagic.com>
> >>> Sent: Thu, July 1, 2010 9:50:15 AM
> >>> Subject: [phobos] enforce() improvement
> >>>
> >>> Often, at least in small programs, when an exception is thrown you just
> >> want 
> >>> to present a sensible message to the user and abort the 
> >>> current
> >> operation.  Example:
> >>
> >>         void 
> >>> doStuff(int i) { enforce(i >= 0, "Need nonnegative i"); }
> >>   
> >>>       try doStuff(-1);
> >>         catch 
> >>> (Exception e) writeln("Error: ", e.msg);
> >> In this case, the user will 
> >>> see
> >>         Error: b.d(5): Need nonnegative 
> >>> i
> >> My point is that the user doesn't need to see the file and line 
> >>> number
> >> that caused the error.  This is only useful for the 
> >>> programmer.  So I
> >> suggest we make either of the following changes to 
> >>> enforce():
> >>      1. Drop the file and line number from the 
> >>> message.  The Throwable
> >>         class has dedicated 
> >>> 'file' and 'line' fields which we can
> >>         populate 
> >>> with that information without polluting the error
> >>         
> >>> message.
> >>      2. Another option is to include the file and line 
> >>> only in debug
> >>         builds.
> >>
> >> -Lars 
> >>
> >> _______________________________________________
> >> phobos mailing 
> >>> list
> >>> href="mailto:phobos at puremagic.com">phobos at puremagic.com
> >> http://lists.puremagic.com/mailman/listinfo/phobos
> >>
> >>
> >>       
> >> _______________________________________________
> >> phobos mailing list
> >> phobos at puremagic.com
> >> http://lists.puremagic.com/mailman/listinfo/phobos
> > 
> > 
> > _______________________________________________
> > phobos mailing list
> > phobos at puremagic.com
> > http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos




More information about the phobos mailing list