Sparsh Mittal:
So, is there a way, an array can be made immutable and still initialized? Thanks a lot for your time.
There are various ways to do it. One of the safest way to do it is to create a mutable array inside a strongly pure function, and then when you return it assign it to immutable:
import std.stdio, std.datetime, std.range; double myAbs(in double n) pure nothrow { return n > 0 ? n : -n; } enum long DIM = 1024L * 1024L * 128L; double[] genSignal() pure nothrow { auto signal = new double[DIM + 1]; foreach (immutable i; 0 .. DIM + 1) { signal[i] = (i + DIM) % 7 + (i + DIM + 1) % 5; } return signal; } void main() { immutable signal = genSignal(); double sample[2] = [4.1, 7.2]; StopWatch sw; sw.start; foreach (immutable i; 0 .. DIM) { double temp = myAbs(sample[0] - signal[i]) + myAbs(sample[1] - signal[i + 1]); } sw.stop; writeln(" Total time: ", sw.peek.msecs / 1000, "[sec]"); } A less safe way to do it is to use assumeUnique from Phobos. Bye, bearophile