On Sunday, 15 April 2018 at 10:14:20 UTC, Dmitry Olshansky wrote:
On Sunday, 15 April 2018 at 06:39:43 UTC, Jonathan M Davis
wrote:
On Sunday, April 15, 2018 07:26:54 Shachar Shemesh via
Digitalmars-d wrote:
[...]
It's extremely common for range-based functions to copy front.
Even foreach does it. e.g.
[...]
Arguably it should “move” them.
This would have worked if input ranges didn’t have to cache
front to support multiple ‘front’ calls before popFront. Which
is a painful misfeature really as all algorithms would optimize
for touching front once anyway.
Input range should “produce” elements not keep cache of them,
forward ranges may cache current item alright.
On a related note this also destroys idea of “lock-free” or
“concurrent” input ranges since front/empty/popFront sequence of
calls can’t be cheaply synchronized in as a whole in presence of
multiple consumers.
[...]