48 hour game jam

Peter Alexander peter.alexander.au at gmail.com
Mon Oct 15 12:18:33 PDT 2012


On Monday, 15 October 2012 at 17:19:43 UTC, so wrote:
> On Monday, 15 October 2012 at 16:37:08 UTC, Peter Alexander 
> wrote:
>> ...
>> - Simple(r) templates
>
> I keep seeing things like this and probably i am failing to 
> understand it.
> This is a vast understatement for D templates. Yes, easier to 
> use, i agree.
> But C++ templates are stone age comparing to D and i don't see 
> this mentioned enough where it matters most.
>
> <snip>

I'm going to start a bit of a rant now.

D templates are certainly powerful, and are inarguably an 
improvement over C++ templates, but they are still based on C++ 
templates, and inherit a lot of their fundamental problems.

The main problem is the whole duck typing thing. Duck typing is 
the cause of all the horrible error messages in C++ templates, 
and D carried it over.

Consider this:

auto s = chain("a,b,c,", "d,e,f").splitter(",");

Seems like a reasonable thing to do, but you get an error:

std/algorithm.d(2020): Error: undefined identifier 'length'
... similar errors from inside std.algorithm ...

What am I supposed to make of that?

D attempts to mitigate this by adding template constraints, but 
this just makes the error messages shorter, not more useful. 
Here's another example, this time trying to instantiate a 
constrained template:

bool b = filter!(not!isPunctuation)("Hello, 
world!").endsWith("world");

Again, seems reasonable. I want to remove all the punctuation 
from a string and then test if it ends with the word "world". 
Again, I get an error:

Error: template std.algorithm.endsWith does not match any 
function template declaration
std/algorithm.d(4375): Error: template std.algorithm.endsWith 
cannot deduce template function from argument types 
!()(FilterResult!(not,string),string)

This error message is no more useful than saying "you can't do 
that". Why doesn't any function match? Why can't it deduce the 
template parameters?

I don't believe there's any easy way to solve these problems with 
the current template design. You really need something like 
concepts or typeclasses to get quality errors. These aren't 
things that are easily tacked on.

So yeah, D's templates are better than C++'s, but they're still 
templates.


More information about the Digitalmars-d mailing list