On Wednesday, 24 December 2014 at 23:14:53 UTC, Delirious wrote:
On Saturday, 20 December 2014 at 22:11:35 UTC, Xinok wrote:
(2) Furthermore, we need to improve the performance of the garbage collector.

"Performance" is a complex issue in the case of GCs. There is not "highest performance GC", only GCs optimally tuned for certain scenarios. While a simple, imprecise, mark-and-sweep collector like the one used by D right now is not that complicated, modern, industrial GCs are very complex.

There are many decisions to be made and there is no single "right" answer.

A simple philosophy to follow is to "optimize for the common case". As I stated, I'm not expecting an optimal solution within the next year, just something that's "good enough". There's lots of details to work out, but that's not a problem. It's not uncommon for discussions here to go beyond 200+ posts, so I have no doubt decisions will be made.

At this point I would like to quote a post about the evolution of the Go garbage collector because Go originally had a primitive GC too but is now far head of D's by any standard:

...

All the more reason why this issue needs resolution. D was first released 13 years ago whereas Go is only five years old and already has a far superior garbage collector. I know it's to be expected as Google has billions of dollars at it's disposal, but all most people see is what they're given.

That's possibly the greatest challenge of D, the fact that it's a community-developed language. If you can't get the community to agree on specific goals and deadlines, then people will work on whatever interests them and it becomes a disorganized mess.

Replacing the GC with a different one is controversial, for example:

except for very large heaps, it is unclear whether a generational GC would be faster overall package "unsafe" makes it hard to implement fully precise GC and compacting GC

I'm not saying we need to replace the GC altogether, and that's probably an unrealistic goal to achieve within the next year anyways. For example, making the GC precise would add a bit of overhead but it would also benefit by scanning less memory overall (no need to scan ubyte[] for pointers). Furthermore, if we stick to the stop-the-world model we have now, there's no reason we can't implement a concurrent sweep like Go has. ;-)

Reply via email to