On 31.03.2016 07:40, Jack Stouffer wrote:
$ ldc2 -O3 -release -boundscheck=off test.d $ ./test auto-decoding 1 sec, 757 ms, and 946 μs byCodeUnit 87 ms, 731 μs, and 8 hnsecs byGrapheme 14 secs, 769 ms, 796 μs, and 6 hnsecs
So the auto-decoding version takes about twenty times as long as the non-decoding one (1758 / 88 ≅ 20).
I still think the allocations from the `.array` calls should be eliminated to see how just iterating compares.
Here's a quick edit to get rid of the `.array`s: ---- uint accumulator = 0; void test(char[] var) { foreach (dchar d; var) accumulator += d; } void test2(char[] var) { foreach (c; var.byCodeUnit) accumulator += c; } ---- I get theses timings then: ---- auto-decoding 642 ms, 969 μs, and 1 hnsec byCodeUnit 84 ms, 980 μs, and 3 hnsecs ---- And 643 / 85 ≅ 8.