On Friday, 21 August 2015 at 22:39:29 UTC, Nick Sabalausky wrote:
Not at a pc, so can't test right now, but does Appender work at
compile time? If not, does ~= still blow up CTFE memory usage
like it used to? Any other best practice / trick for building
strings in CTFE?
I did two experiments:
import std.conv;
import std.stdio;
import std.array;
import std.range;
import std.algorithm;
string f(T)(T strings) {
auto a = appender("");
foreach (s ; strings)
a.put(s);
return a.data;
}
string g(T)(T strings) {
auto a = "";
foreach (s ; strings)
a ~= s;
return a;
}
void main(string[] args) {
enum a = iota(10000).map!(to!string).f;
//enum a = iota(10000).map!(to!string).g;
a.writeln;
}
Each make use of CTFE but the f (appender) variant blew my RAM
(old computer)
while the g (string) variant was nothing comparable in term of
memory
consumption and almost instantaneous. It looks like string
concatenation is
the best way to go, but this example is rather limited so
theoretical
confirmation would be great.