On Tuesday, 8 October 2013 at 15:43:46 UTC, ponce wrote:
At least on Internet forums, there seems to be an entire
category of people dismissing D immediately because it has a GC.
http://www.reddit.com/r/programming/comments/1nxs2i/the_state_of_rust_08/ccne46t
http://www.reddit.com/r/programming/comments/1nxs2i/the_state_of_rust_08/ccnddqd
http://www.reddit.com/r/programming/comments/1nsxaa/when_performance_matters_comparing_c_and_go/cclqbqw
The subject inevitably comes in every reddit thread like it was
some kind of show-stopper.
Now I know first-hand how much work avoiding a GC can give
(http://blog.gamesfrommars.fr/2011/01/25/optimizing-crajsh-part-2-2/).
Yet with D the situation is different and I feel that criticism
is way overblown:
- first of all, few people will have problems with GC in D at
all
- then minimizing allocations can usually solve most of the
problems
- if it's still a problem, the GC can be completely disabled,
relevant language features avoided, and there will be no GC
pause
- this work of avoiding allocations would happen anyway in a
C++ codebase
- I happen to have a job with some hardcore optimized C++
codebase and couldn't care less that a GC would run provided
there is a way to minimize GC usage (and there is)
Whatever rational rebutal we have it's never heard.
The long answer is that it's not a real problem. But it seems
people want a short answer. It's also an annoying fight to have
since so much of it is based on zero data.
Is there a plan to have a standard counter-attack to that kind
of overblown problems?
It could be just a solid blog post or a @nogc feature.
I thought about an alternative approach:
Instead of using a (yet another) annotation, how about
introducing a flag similar to -cov, which would output lines in
which the GC is used.
This information can be used by an IDE to highlight those lines.
Then you could quickly navigate through your performance-critical
loop and make sure it's clean of GC.