shouting versus dotting

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Oct 4 21:06:48 PDT 2008


The problem I see with "!" as a template instantiation is not technical. 
I write a fair amount of templated code and over years the "!" did not 
grow on me at all. I was time and again consoled by Walter than one day 
that will happen, but it never did. I also realized that Walter didn't 
see a problem with it because he writes only little template code.

I didn't have much beef with other oddities unique to D. For example, I 
found no problem accommodating binary "~" and I was wondering what makes 
"!" different. I was just looking at a page full of templates and it 
looked like crap.

One morning I woke up with the sudden realization of what the problem 
was: the shouting.

In C, "!" is used as a unary operator. That may seem odd at first, but 
it nevers follows a word so it's tenuous to associate it with the 
natural language "!". In D, binary "!" _always_ follows a word, a name, 
something coming from natural language. So the conotation with 
exclamation jumps at you.

That's why I find the choice of "!" poor. I believe it can impede to 
some extent acquisition of templates by newcomers, and conversely I 
believe that using .() can make templates more palatable. I tried using 
".()" in my code and in only a couple of days it looked and felt way 
better to me. Based on that experience, I suggest that "!()" is dropped 
in favor of ".()" for template instantiation for D2.

Sean's argument that "The exclamation mark signifies an assertion of 
sorts" is exactly where I'd want templates not to be: they should be 
blended in, not a hiccup from normal code. Serious effort has been, and 
still is, made in D to avoid shell-shocking people about use of 
templates, and I think ".()" would be a good step in that direction.


Andrei




More information about the Digitalmars-d mailing list