On Wednesday, 2 January 2013 at 21:43:31 UTC, Jonathan M Davis
wrote:
On Thursday, January 03, 2013 01:25:17 Dmitry Olshansky wrote:
What do you think?
Hmmm. Typically the thing that you really want to know is which
portions were
true and which were false, and this doesn't help with that at
all. What it
does is make the errors more understandable for newbies, which
is good. But
for those of use who know more, they'd actually be annoying I
think, because
what I really want to know is what the actual constraint was so
that I can
figure out what's wrong. But I'm likely to look at the source
for that anyway,
since it's far more legible there than it is the error message.
So, this could be a good idea in that it could make the errors
more
understandable for newbies, but it still really doesn't help
tell you what's
wrong, which is what you really want to know. It just tries to
translate the
constraint into English. So, I don't know.
I'm not opposed to the idea, but I'm not exactly sold on it
either. Certainly,
I don't think that it would benefit me, personally, at all, but
it may be worth
it for newbies.
- Jonathan M Davis
Well, to be honest, some of our overloads are really
*complicated*. I swear that for some of them, even understanding
what the constraint are and why is a huge headache. Having some
english in there can't hurt, IMO. That said, judicious use of
traits (even private traits) can achieve the same goal, and
reduce the complexity.
----
That said, I think another field of improvement we should
concentrate in phobos is to have a single public entry point, and
then privately forward to private specialized overloads.
Users really shouldn't have to deal with functions whose
restraints are things such as "input range, but not random
access", or "random access with length, but not sliceable" or
some of our other *6* liners. It gets especially bad when the
compiler lists all 7 of our (implementation defined) overloads.
Nobody needs to see that.
As a end user, I'd really want to see a single function with
"isForwardRange!R". Period. The fact that the implementation
differs depending on all that *crap* really isn't my problem and
shouldn't show up in my interface >:(