Nonscalable in this case means that the number of explicit implementations (template overloads in C++/D) needed for a specific traits requires M*N number of implementations, where M is number of algorithms and N is the number of types. C++ and D’s template system is designed around the idea to categorize the interface between algorithms and containers into different kinds of iterator- (C++) and range- (D) groups (input-, forward-, bidirectional-, randomaccess) to turn this count in M+N. M+N is scalable, M*N is not.

I see no reason for having explicit implementations of this trait for all the builtin integral types such as

`impl IntoParallelIterator for Range<u8> impl IntoParallelIterator for Range<u16> impl IntoParallelIterator for Range<u32> impl IntoParallelIterator for Range<usize> impl IntoParallelIterator for Range<i8> impl IntoParallelIterator for Range<i16> impl IntoParallelIterator for Range<i32> impl IntoParallelIterator for Range<isize>`

D solves this with template restrictions. such as `isIntegral`

in `std.traits`

. Rust must have this. Otherwise something is very wrong with Rust’s vision for compact, templated safe code.

Please correct me if I’m wrong. I’m hoping I’m wrong about this issue.