Assert
David B. Held
dheld at codelogicconsulting.com
Thu Jun 28 23:08:45 PDT 2007
BCS wrote:
> Reply to David,
>
>> I think assert() will get fixed when we get AST macros. It won't get
>> fixed by Walter, of course, but rather, by us. Everyone will invent
>> their favorite assert(), and the builtin will only get called by
>> Phobos.
>> And then, 10 years down the road, Walter will be writing "The Design
>> and Evolution of D", where he will have to explain why assert(o)
>> doesn't
>> do the obvious thing, even though everyone else's does. ;>
>
> what is there to fix? (that is not a rhetorical question)
Well, for one, the fact that "assert(obj)" doesn't do what 99% of noobs
(including me!) expect it to do. Two, you can't write a custom assert()
that has non-standard messaging. For instance, there is an extremely
common idiom in all languages (that support exceptions) that basically
looks like this:
if (!everything_ok)
{
throw SomeException("Helpful message");
}
Andrei happens to call this micro-pattern "enforce()", which I think is
a perfectly reasonable name for it. What we would like to do is
something like so:
#define enforce(cond, message) \
if (!cond) throw SomeException(#cond + ": " + message);
Bar* ptr = foo();
enforce(ptr != null, "foo() failed");
Obviously there's a thousand ways to riff on that basic idea, but try
writing this function in D. As you can see, it's essentially a form of
assert().
Dave
More information about the Digitalmars-d
mailing list