Don wrote:
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).

My mock object library <http://dsource.org/projects/dmocks/> uses:
mixin(method!("name", returnType, arguments...));

The implementation is a long and ugly string mixin.

There's a bug that prevents you from implementing interface methods with aliases. If this were removed, I could replace the long and ugly string mixin with a very short string mixin and a short template mixin.

Due to problems with .stringof, my current system usually fails for methods with templated arguments or return types (eg void filter(HashSet!(int) integers).

Now that I think of it, I could probably make things better by using a forwarding function.

Reply via email to