Juan Carlos Arevalo Baeza wrote:
Andrew Coppin wrote:
Some guy told me that templates are "the best feature in the
language", and proceeded to show me a huge chunk of highly
complex-looking code which is approximately equivilent to
join :: Array x -> Array x -> Array x
I was unimpressed.
Now I'm curious to know what chunk of code he showed you. FWIW, that
declaration you put there is done in C++ like so:
template < typename X >
Array<X> join(Array<X> const&, Array<X> const&);
Nothing more. I like both languages for very different reasons. C++
for its insane amount of flexibility, and Haskell for its
expressiveness. And I've encountered equally harsh roadblocks in both
whenever I try to get "too crazy" while using them.
Well no, he included the implementation as well as just the signature.
Actually, that's a lie. I was impressed that such a low-level
language could manage even that much abstraction. But I still prefer
the Haskell way...
The dynamic range of the C++ language is probably unparalleled. In
particular, templates enable implementing high level abstractions in a
way such that we're still discovering how far it can go. But of
course, it's not just templates: it's templates when united to all
other language features like overloading.
C++ has some interesting ideas. I haven't learned how to use templates
yet, but what I do find interesting is that there is no automatic memory
management, and yet you can still do fairly dynamic programming. I've
never seen any other language that allows this. (I had assumed it's
impossible...) This makes me wonder just now necessary GC really is, and
whether there is some way to avoid it...
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe