[phobos] enforce() improvement

David Simcha dsimcha at gmail.com
Thu Jul 1 10:25:42 PDT 2010


Should we put a separate alwaysAssert() function into Phobos that does
output the line number and file, and then remove this from enforce()?  I see
two use cases for enforce:  As a function that asserts even in release mode,
and for real error handling.

I tend to use enforce in a lot of places where I would otherwise use assert,
but want to leave the check on in release mode.  I find that I very
frequently don't want every array access bounds checked or expensive asserts
checked, but still want the asserts that have negligible performance cost to
be checked even in release mode.  However, using enforce() like this
sometimes devalues it for "real" error handling because you can't catch the
exception it throws without possibly catching what's logically an assert
error.

On Thu, Jul 1, 2010 at 1:15 PM, Steve Schveighoffer <schveiguy at yahoo.com>wrote:

> 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
>
>
>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/phobos/attachments/20100701/c5bfe2d2/attachment-0001.html>


More information about the phobos mailing list