Andrei used that idiom quite extensive in Phobos, unfortunately, I dare to say. It makes the code a lot harder to read. But the alternative, using __traits(compiles, ... ) is even worse IMO, because even as is a little more obvious, is quite verbose.

Something I would like to see with template constraints, is the ability to show text messages, like when static if is used.

Yao G.

On Sun, 13 Jun 2010 14:36:14 -0500, Leandro Lucarella <llu...@gmail.com> wrote:

Walter Bright, el 13 de junio a las 12:01 me escribiste:
http://www.drdobbs.com/blog/archives/2010/06/constrained_tem.html

Anyone want to do the honors and post to reddit, ycombinator, etc. ?

Nice article, but when I read:

        T gcd(T)(T a, T b)
                if (is(typeof(a % b)))
        {
                ...
        }

Under the presence of such beauty as template constraint syntax is,
"is(typeof(a % b))" makes my eyes hurt, and my brain wonder. When you
get used to this idiom, it might not look to bad, but I'm seeing people
new to D wonder "why in the hell was that syntax used?" while they try
to decode what is(typeof()) means.

I think is really a shame, all the beauty and clarity gained by the
simple "if" of template constraints, is lost with the cryptic
is(typeof()) (well, maybe not all, but a significant part).

I would love to see this fixed/simplified. For example, by applying the
changes in suggested in bug 3702 [1]. This looks much better, and is
pretty clear to anyone (even people that doesn't know D):

        T gcd(T)(T a, T b)
                if (meta.compiles(a % b))
        {
                ...
        }

I guess at this point this is not going to happen for D2, a real shame
:S

The, the article made me think that, even when template constraints are
useful not only for improving error reporting, they are often used only
for that. Since the compiler knows all the operations a template
parameter will need to satisfy from the function body, it would be nice
to have some sort of way to tell the compiler to write the template
constraints for us (the obvious ones at least, there might be other
template constraints desired besides the ones the ones the compiler can
figure out). This way, the errors can be improved without user
intervention.

[1] http://d.puremagic.com/issues/show_bug.cgi?id=3702



--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

Reply via email to