Code is simple, and created only for GC examination. Test was made with dmd 1.028, Tango trunk version (revision 3410) and Phobos that comes with 1.028 on my personal IBM T41 laptop. Both compiled with:
build -release -inline -cleanup -O
Tango result:
real 0m14.091s user 0m0.010s sys 0m0.020savg: 13.814
real 0m14.000s user 0m0.020s sys 0m0.000s
real 0m14.180s user 0m0.020s sys 0m0.000s
real 0m13.389s user 0m0.010s sys 0m0.010s
real 0m13.410s user 0m0.020s sys 0m0.030s
Phobos results:
real 0m19.058s user 0m0.010s sys 0m0.010savg: 19.266
real 0m20.649s user 0m0.020s sys 0m0.000s
real 0m19.378s user 0m0.010s sys 0m0.010s
real 0m18.617s user 0m0.010s sys 0m0.010s
real 0m18.626s user 0m0.020s sys 0m0.000s
As you see GC is much faster in Tango than in Phobos.
Code:
class TreeNode {
int item;
TreeNode left, right;
this(int item, TreeNode left=null, TreeNode right=null) {
this.item = item;
this.left = left;
this.right = right;
}
int check() {
return left is null ? item : item + left.check - right.check;
}
}
TreeNode makeTree(int item, int depth) {
if (depth > 0){
return new TreeNode(item, makeTree(2*item-1, depth-1), makeTree(2*item, depth-1));
} else {
return new TreeNode(item);
}
}
void main(char[][] args) {
const minDepth = 4;
int n = 16;
int maxDepth = (minDepth + 2) > n ? minDepth + 2 : n;
int check = makeTree(0, maxDepth + 1).check;
auto longLivedTree = makeTree(0, maxDepth);
for (int depth = minDepth; depth <= maxDepth; depth += 2){ int iterations = 1 << (maxDepth - depth + minDepth); check = 0; for (int i = 1; i <= iterations; i++) check += (makeTree(i, depth)).check + (makeTree(-i, depth)).check; } }
