On Tuesday, 8 October 2013 at 22:45:51 UTC, Adam D. Ruppe wrote:
Eh, not necessarily. If it expands to static
assert(!__traits(hasAnnotationRecursive, uses_gc));, then the
only ones that *need* to be marked are the lowest level ones.
Then it figures out the rest only on demand.
Then, on the function you care about as a user, you say nogc
and it tells you if you called anything and the static assert
stacktrace tells you where it happened.
Of course, to be convenient to use, phobos would need to offer
non-allocating functions, which is indeed a fair amount of
work, but they wouldn't *necessarily* have to have the specific
attribute.
But is it even necessary? There isn't a great deal of evidence
that someone interested in optimization will be blocked on this
particular problem, like Peter Alexander said.
GC hassle is quite common but not that big a deal:
- Manu: "Consequently, I avoid the GC in D too, and never had any
major problems, only inconvenience."
http://www.reddit.com/r/programming/comments/1nxs2i/the_state_of_rust_08/ccnefe7
- Dav1d: said he never had a GC problem with BRala (minecraft
client)
- Me: I had a small ~100ms GC pause in one of my games every 20
minutes, more often than not I don't notice it
So a definitive written rebutal we can link to would perhaps be
helpful.