[phobos] enforce() improvement

Andrei Alexandrescu andrei at erdani.com
Thu Jul 1 10:47:56 PDT 2010


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


More information about the phobos mailing list