shouting versus dotting

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Oct 4 21:45:12 PDT 2008


dsimcha wrote:
> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>> 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
> 
> Personally, I think that ".()" looks a little too much like a normal
> function/method call.  The "!()" syntax looks just different enough to make it
> easy to keep straight in my head that stuff with the "!" is a compile-time
> construct and stuff without it can be evaluated at runtime.

I'm arguing we _should_ make template code look like "normal" code, 
whatever "normal" is :o). We _should_ strive for "quiet" templates.

You know what annoys the living heebiejeebies out of me? Nested template 
instantiations.

This!(That!(TheOther!(crap)))

I have a ton + change of those. In superdan's words: intercourse that.


Andrei



More information about the Digitalmars-d mailing list