What Does Haskell Have to Do with C++?

Don nospam at nospam.com
Thu Oct 29 01:47:57 PDT 2009


Andrei Alexandrescu wrote:
> Don wrote:
>> Jeremie Pelletier wrote:
>>> http://bartoszmilewski.wordpress.com/2009/10/21/what-does-haskell-have-to-do-with-c/ 
>>>
>>>
>>> Bartosz's second part of 'Template Metaprogramming Made Easy (Huh?)', 
>>> its quite a read :)
>>
>> Yes, it is excellent. Two comments:
>> (1) Bartosz's D examples make me seriously question 'static foreach' 
>> which is scheduled for implementation (bugzilla 3377).
>> If implemented, it will be a source of frustration, since it will not 
>> be very usable inside templates. The ability to exit from a 'static 
>> foreach' is something which is possible with a 'return'-style syntax, 
>> but is not possible with the 'eponymous template hack'.
> 
> I think breaking early out of a static foreach is not necessary (but 
> indeed convenient) for writing good loops.
> 
>> (2) It seems pretty clear that we need to allow the eponymous trick to 
>> continue to work when more than one template member is present. I 
>> think everyone who's ever attempted template metaprogramming in D has 
>> proposed  it!
> 
> Yes, that was on the list for a long time. Bartosz even has participated 
> to many related discussions. I'm surprised the article made it seem an 
> unescapable matter of principles, when it clearly is a trivially fixable 
> bug in the language definition.

Yes, looking at the compiler source, it doesn't look too difficult.  The 
fact that something like this works:

template foo(int X)
{
    static if (bar!(X)) { const int foo = 57; }
    else { const char [] foo = "abc"; }
}
makes it pretty clear that the difficult part has already been done.

I don't know what happens with template mixins, though. I hate template 
mixins (and I'm not convinced they're useful for anything, either).

> We discussed using "this" instead of the template's name, but that has a 
> few ambiguity problems. Currently, we want to allow a template to define 
> private symbols in addition to the eponymous trick (a term that Bartosz 
> shouldn't have implied paternity of, sigh). Those private members would 
> be accessible from inside the template's definition, but not from the 
> outside. That would effectively remove the issue.
> 
> 
> Andrei



More information about the Digitalmars-d mailing list