On Saturday, 27 May 2017 at 17:57:03 UTC, Mike B Johnson wrote:
And what if one isn't interfacing to C? All pointers should be
known.
Apparently some people are (were?) working on semi-precise GC:
https://github.com/dlang/druntime/pull/1603
That still scans the stack conservatively, though.
Therefor, in a true D program(no outsourcing) with no pointers
used, the GC should never have to scan anything.
All realistic programs (in any language) use a lot of pointers -
for example, all slices in D have embedded pointers (slice.ptr),
references are pointers, classes are references, etc.
It seems the GC can be smarter than it is instead of just
making blanket assumptions about the entire program(which
rarely hold), which is generally always a poor choice when it
comes to performance...
If you only have compile time information, making blanket
assumptions is inevitable - after all, compiler can't understand
how a nontrivial program actually works. The alternative is doing
more work at runtime (marking pointers that changed since
previous collection, etc), which is also not good for performance.
Who knows, some pointer externally might be peeping in on our
hello world program.
Of course, there is a pointer :)
void main()
{
import std.stdio;
writeln("hello world".ptr);
}