Another day in the ordeal of cartesianProduct
Peter Alexander
peter.alexander.au at gmail.com
Sat Oct 27 05:23:27 PDT 2012
On Saturday, 27 October 2012 at 11:41:07 UTC, bearophile wrote:
> 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.
Yeah, it's certainly not going to be easy. It's unfortunate that
D adopted the whole C++ style "glorified macros" approach to
templates -- it makes it very difficult to reason about (or
automate reasoning about) the semantics of your code.
Retrofitting some sort of structure to templates will be a
Herculean task, but I think it has to happen. It is clear to me
that the development process we use now (write the template, try
a few instantiations, pray) is unsustainable beyond simple
templates.
More information about the Digitalmars-d
mailing list