Maybe D is right about GC after all !
thedeemon
dlang at thedeemon.com
Fri Dec 22 05:11:09 UTC 2017
On Thursday, 21 December 2017 at 22:45:23 UTC, Neia Neutuladh
wrote:
> You can use mprotect(2) for write barriers, and that doesn't
> require compiler support. It's relatively inefficient, though.
As I understand it's prohibitively inefficient, that's why this
approach is not used by any real world GC.
>> Without such help from the compiler you can't make anything
>> decent, just a slow half-conservative GC that scans whole heap
>> every time and leaks memory being unable to tell whether some
>> stack value is a number or a pointer.
>
> Numbers tend very much to be small, and pointer values tend not
> to be small, especially on 64-bit. So it shouldn't be that
> common to confuse the two. It should be more common to confuse
> floating point values for pointers, but the odds go down as
> address space increases.
Floating point values are also numbers, real numbers. ;)
Indeed in 64 bits our current GC is not too leaky. But still
people encounter leaks occasionally, when trying to make long
running services.
> Actually, there's an idea. Instrument real-world code to
> determine what address ranges are least likely to be hit by a
> false pointer, then try to arrange the GC to concentrate
> allocations in those ranges.
I'm not sure all major OSs will let you choose freely address
ranges when allocating memory.
> D also offers better support for not allocating than Go.
> const/immutable to reduce defensive copies.
> std.experimental.allocator. GC.addRange for when you mix the GC
> with manually allocated memory.
Sure, carefully written D code has all the means to outperform Go.
More information about the Digitalmars-d
mailing list