std.unittests [updated] for review

Michel Fortin michel.fortin at michelf.com
Tue Feb 1 08:14:05 PST 2011


On 2011-02-01 10:34:26 -0500, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

> On 2/1/11 9:21 AM, Don wrote:
>> Jonathan M Davis wrote:
>>> Do you really find
>>> 
>>> assertPred!"=="(min(5, 7), 5);
>>> 
>>> to be all that harder to understand than
>>> 
>>> assert(min(5, 7) == 5);
>> 
>> I do. *Much* harder. Factor of two, at least.
>> In absolute terms, not so much, because it was the original assert is
>> very easy to understand. But the relative factor matters enormously.
>> Much as comparing:
>> a.add(b);
>> a += b;
>> 
>> And I think this is a very important issue.
>> 
>>  >I don't see how these functions could be anything but an improvement.
>>  > But even if they get into Phobos, you obviously don't have to use them.
>> 
>> This is not true. Including them in Phobos gives a legitimacy to that
>> style of programming. It's a role model.
>> 
>> Including stuff like this could give D a reputation for lack of
>> readability. My belief is that right now, the #1 risk for Phobos is that
>> it becomes too clever and inaccessible.
>> 
>> IMHO, something simple which has any appearance of being complicated,
>> needs a VERY strong justification.
> 
> Does this count as a vote against the submission?

To me this is a compelling argument against. That and the fact that it 
can't really mimic the true behaviour of assert in some situation. 
assertPred won't work correctly for 'in' contracts with inheritance, 
where the compiler generate the assertion code differently.

In my view, the correct way to improve assertion error messages is to 
improve how the compiler handle assertions (it should output messages 
like it does for static asserts).

assertPred might be fine as a stopgap solution, but personally I'd not 
make it part of the public API. We can't tell people to use assert() 
everywhere and then tell them they should use assertPred!op() if they 
want a useful error message except for 'in' contracts of virtual 
functions; that'd just be too confusing.

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/



More information about the Digitalmars-d mailing list