Another day in the ordeal of cartesianProduct
bearophile
bearophileHUGS at lycos.com
Sat Oct 27 04:41:06 PDT 2012
Peter Alexander:
> void foo(ForwardRange Range)(Range r)
> {
> r.popBack();
> }
>
> And *immediately* get a type error without having to
> instantiate it with a variety of different range types.
It's not an easy problem. To solve it the Rust language uses
typeclasses adapted from Haskell. But unlike the usual Haskell
compilers Rust doesn't use global type inferencing and it keeps
the C++-style monomorphization, so at run-time its generic
programming is as efficient as C++ generic programming.
I also hope Rust designers will take a look at this (Efficient
Dynamic Dispatch without Virtual Function Tables. The SmallEiffel
Compiler), an alternative to virtual tables. Maybe the D
front-end could do the same on request with a compilation switch
(with no changes in D language):
http://smarteiffel.loria.fr/papers/oopsla97.pdf
Bye,
bearophile
More information about the Digitalmars-d
mailing list