On Friday, 17 October 2014 at 09:17:52 UTC, ZombineDev wrote:
I saw [this][0] proposal for adding ranges to C++'s standard
library. The [paper][1] looks at D style ranges, but concludes:

Since iterators can implement D ranges, but D ranges cannot be used to implement iterators, we conclude that iterators form a more powerful and foundational basis.

What do you guys think?

"Since assembly code can be used to implement Java but java cannot be used to implement assembly code, we conclude that assembly code forms a more powerful and foundational basis."

I probably could have chosen that example better, but I hope it gets my point across. It's always possible to reduce a library interface to something that's even more stripped-down, which is by definition more powerful and foundational. But if the user never wants to work at that low level of abstraction then you're just imposing an unnecessary burden upon them.

A well-designed library provides power and flexibility in a form that encourages a good coding style and which inherently reduces the chance of mistakes. Getting this right is really, really hard to do. I think D gets it more right than C++ though, across the board.

Regarding iterators vs. ranges, there are still places where ranges struggle to meet the facility of iterators. But I don't think this is a flaw in the concept so much that it's still fairly new and people are still working out the details. Given the standardization process for C++, they're probably right to remain with iterators for now and wait for all the kinks to be worked out of range design. Maybe get ranges into Boost (if they aren't there already) and see how it goes. But dismissing ranges out of hand for not being sufficiently "powerful and foundational" is just silly.

Reply via email to