std.range.cacheFront proposal&working code: wraps a range to enforce front is called only once

Jonathan M Davis jmdavisProg at gmx.com
Wed Oct 23 18:48:20 PDT 2013


On Tuesday, October 22, 2013 23:40:00 Timothee Cour wrote:
> Following the recent thread "front evaluated multiple time with joiner
> depending on where extra arg given", I'd like to propose the following
> addition in std.range :
> 
> The goal is to ensure that a given range's 'front' method is called only
> once per element, allowing one to handle safely side effects in 'front'
> methods

Considering that front really isn't supposed to have side effects, I'm inclined 
to think that putting something like this in the standard library is a bad 
idea. It just encourages bad code. There's certainly no reason why you can't 
implement it for your own stuff if you want to, but I don't think that it's 
something that should be encouraged as it goes against the range paradigm. The 
getter property for front really should be logically const and logically pure, 
and a front with side effects should be something reserved for debugging.

- Jonathan M Davis


More information about the Digitalmars-d mailing list