[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