== Quote from Craig Black (craigbla...@cox.net)'s article
> I would have to agree and this is one of my causes for hesisation in
> adopting D.  The code I write requires the highest performance possible.  I
> am concerned that when I port it over to D, I will have to avoid using a lot
> of D features that use the GC (built-in arrays, closures, standard library
> features, etc.)  in order to get the best possible performance.  D does not
> adhere to the C++ zero-overhead principle, and I see this as a risk.  So
> if/when I end up porting my code to D I may evolve my own dialect of D that
> uses only the subset of features that tend to provide the best performance.

D's garbage collector is admittedly not that good, but there are some pretty
important mitigating factors that you should be aware of:

1.  You can use your limited dialect only in the performance-critical parts of
your code and program in a more Java-style "just allocate whatever needs to be
allocated and let it get GC'd whenever it gets GC'd" way in the other 80% of 
your
code.

2.  D provides enough low-level features (most importantly the ability to 
allocate
an untyped memory block) that you can write some pretty efficient custom memory
management schemes.  You can do object pools pretty well.  You can do 
mark-release
pretty well.  If you're doing a lot of numerics, you can implement a second 
stack
(similar to Andrei's proposed SuperStack, or my TempAlloc) to efficiently 
allocate
temporary workspace arrays.

Furthermore, D provides enough abilities to make these hacks well-encapsulated
that they start to appear significantly less ugly than they would in C or C++,
where the encapsulation would be weaker.

3.  You can use C's malloc (or nedmalloc) from D, though you do have to be 
careful
about making sure any region of the C heap that contains pointers into the GC 
heap
is marked with addRange().

Reply via email to