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 <[email protected]> > >>> To: Phobos mailing list <[email protected]> > >>> 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:[email protected]">[email protected] > >> http://lists.puremagic.com/mailman/listinfo/phobos > >> > >> > >> > >> _______________________________________________ > >> phobos mailing list > >> [email protected] > >> http://lists.puremagic.com/mailman/listinfo/phobos > > > > > > _______________________________________________ > > phobos mailing list > > [email protected] > > http://lists.puremagic.com/mailman/listinfo/phobos > _______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
