[phobos] enforce() improvement

Steve Schveighoffer schveiguy at yahoo.com
Thu Jul 1 10:15:31 PDT 2010


User: your application exited with an error message
Developer: What was the message?
User: Need nonnegative i
Developer:  Well, don't pass in a negative i then!

:)

-Steve



----- Original Message ----
> From: Lars Tandle Kyllingstad <lars at kyllingen.net>
> To: Discuss the phobos library for D <phobos at puremagic.com>
> Sent: Thu, July 1, 2010 10:15:36 AM
> Subject: Re: [phobos] enforce() improvement
> 
> 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 <
> href="mailto:lars at kyllingen.net">lars at kyllingen.net>
> > To: 
> Phobos mailing list <
> href="mailto:phobos at puremagic.com">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:
> ymailto="mailto:phobos at puremagic.com" 
> href="mailto:phobos at puremagic.com">phobos at puremagic.com">
> ymailto="mailto:phobos at puremagic.com" 
> href="mailto:phobos at puremagic.com">phobos at puremagic.com
> 
> http://lists.puremagic.com/mailman/listinfo/phobos
> 
> 
> 
>      
> 
> _______________________________________________
> phobos mailing 
> list
> 
> href="mailto:phobos at puremagic.com">phobos at puremagic.com
> 
> href="http://lists.puremagic.com/mailman/listinfo/phobos" target=_blank 
> >http://lists.puremagic.com/mailman/listinfo/phobos


_______________________________________________
phobos 
> mailing list

> href="mailto:phobos at puremagic.com">phobos at puremagic.com

> href="http://lists.puremagic.com/mailman/listinfo/phobos" target=_blank 
> >http://lists.puremagic.com/mailman/listinfo/phobos


      


More information about the phobos mailing list