newCTFE Status July 2017

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 20 03:04:00 PDT 2017


On Thursday, 13 July 2017 at 12:45:19 UTC, Stefan Koch wrote:
> [ ... ]
Hi Guys,

The following code compiles now and runs in very reasonable time 
even for unreasonable repeat-counts.

string repeatString(string s, uint repeatCount)
{
     char[] result;
     uint sLength = cast(uint) s.length;

     result.length = sLength * repeatCount;
     uint p1 = 0;
     uint p2 = sLength;

     foreach(rc;0 .. repeatCount)
     {
         result[p1 .. p2] = s[0 .. sLength];
         p1 += sLength;
         p2 += sLength;
     }

     return cast(string) result;
}

Note: a version that uses `result ~= s` runs much much slower and 
will soon run out of the 16M heapMemory.

static assert(
     "o_o ".repeatString(24) ==
     `o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o o_o 
o_o o_o o_o o_o o_o o_o o_o o_o o_o `
);



More information about the Digitalmars-d mailing list