Two unrelated
bearophile
bearophileHUGS at lycos.com
Thu May 8 02:36:47 PDT 2008
The first one is a little program that if correct shows that phobos dyna array reverse may enjoy a specialization for performance purposes:
import std.stdio: writefln;
import std.c.time;
double myclock() {
return clock()/cast(double)CLOCKS_PER_SEC;
}
void main() {
alias int Ty;
auto a = new Ty[10000];
const uint NLOOP = 1000;
auto t = myclock();
for (uint i; i < NLOOP; ++i)
a.reverse;
writefln("reverse method: ", myclock() - t, " s");
t = myclock();
for (uint i; i < NLOOP; ++i) {
if (a.length > 1) {
Ty tmp;
size_t lo = 0;
size_t hi = a.length - 1;
for (; lo < hi; lo++, hi--) {
tmp = a[lo];
a[lo] = a[hi];
a[hi] = tmp;
}
}
}
writefln("reverse: ", myclock() - t, " s");
}
------------------------------------------------------------------
This other little program crashes at the line I have marked with:
Internal error: ..\ztc\blockopt.c 609
template Tuple(T...) { alias T Tuple; }
template Interval(int n) {
static if (n < 1)
alias Tuple!() Interval;
else
alias Tuple!(Interval!(n-1), n) Interval;
}
int[] foo(int N)() {
int[N] a;
return a.dup;
}
void main() {
foreach(n; Interval!(198)) // error here
auto a = foo!(n);
}
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list