On Wed, 2016-09-07 at 20:32 +1200, rikki cattermole via Digitalmars-d- learn wrote: > […] > Ok, I have it mostly compiling. > > void run_mean() {} > void run_mode() {} > void run_stdDev() {}
For my code the functions have to be declared within the main function rather than being at module level. But this turns out to be a non- issue. > void main() { > import std.datetime; > import std.algorithm : map; > import std.conv; > import std.array; I am still not a fan of this import all symbols approach, like the map import, I would do the same for the other modules' functions used. > const results = benchmark!(run_mean, run_mode, run_stdDev)(1); > const times = map!((TickDuration t) { return > (to!Duration(t)).total!"seconds"; })(results[]); It turns out my problem was here. See below. > import std.stdio; > foreach(v; times) { > writeln(v); > } > } > > However times really can't be const. Since times is an input range > which > gets modified as part of the iterations. Indeed. I keep forgetting that ranges are use once mutable entities, and there is no option. s/const/auto/ solves the problem, but the more likely general solution is to retain the const and reify the array. But it depends on usage, obviously. > So what exactly do you want times to be? If you want an array .array > from std.algorithm it which can be const. Either way there is > something > I'm missing as to why const is so important here. In this case it isn't as you can't use a constant range. The problem I am having is when I cannot use const or better immutable. I'm a single assignment sort of person, but D ranges break all that orthodoxy. -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
signature.asc
Description: This is a digitally signed message part