<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On 17 April 2014 21:57, John Colvin via Digitalmars-d <span dir="ltr"><<a href="mailto:digitalmars-d@puremagic.com" target="_blank">digitalmars-d@puremagic.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="">On Thursday, 17 April 2014 at 11:31:52 UTC, Manu via Digitalmars-d wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
ARC offers a solution that is usable by all parties.<br>
</blockquote>
<br></div>
Is this a proven statement?<br>
<br>
If that paper is right then ARC with cycle management is in fact equivalent to Garbage Collection.<br>
Do we have evidence to the contrary?<br></blockquote><div><br></div><div>People who care would go to the effort of manually marking weak references. If you make a commitment to that in your software, you can eliminate the backing GC. Turn it off, or don't even link it.</div>
<div>The backing GC is so that 'everyone else' would be unaffected by the shift. They'd likely see an advantage too, in that the GC would have a lot less work to do, since the ARC would clean up most of the memory (fall generally in the realm you refer to below).</div>
<div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
My very vague reasoning on the topic:<br>
<br>
Sophisticated GCs use various methods to avoid scanning the whole heap, and by doing so they in fact implement something equivalent to ARC, even if it doesn't appear that way on the surface. In the other direction, ARC ends up implementing a GC to deal with cycles. I.e.<br>

<br>
Easy work (normal data): A clever GC effectively implements ARC. ARC does what it says on the tin.<br>
<br>
Hard Work (i.e. cycles): Even a clever GC must be somewhat conservative*. ARC effectively implements a GC.<br>
<br>
*in the normal sense, not GC-jargon.<br>
<br>
Ergo they aren't really any different?</blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div>Nobody has proposed a 'sophisticated' GC for D. As far as I can tell, it's considered impossible by the experts.</div>
<div>It also doesn't address the fundamental issue with the nature of a GC, which is that it expects plenty of free memory. You can't use a GC in a low-memory environment, no matter how it's designed. It allocates until it can't, then spends a large amount of time re-capturing unreferenced memory. As free memory decreases, this becomes more and more frequent.</div>
</div></div>