GC Benchmark
The code and results below are meant to show the performance differences between Tango and Phobos, isolated to the garbage collector. Benchmark is contributed by Piotr Modzelewski.
Code
This same code for both: Tango and Phobos test. (No need to import anything, GC is a part of the runtime).
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; } }
Results
Tango
C:\coding\tangbench>rebuild -O -release -inline -full -cleanup bench.d C:\coding\tangbench>sh sh-2.04$ time bench.exe real 0m14.000s user 0m0.010s sys 0m0.010s
Phobos
C:\coding\tangbench>build -release -inline -O -full -cleanup benchphobos.d C:\coding\tangbench>sh sh-2.04$ time ./benchphobos.exe real 0m17.575s user 0m0.010s sys 0m0.010s