<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:12pt"><div>Ref counting still has to be thread aware because anything allocated on the heap can be destroyed in any thread, even if the type is not shared.  I think that is Michel's point.  Even if you don't store the reference types on the heap, something that contains the reference could be stored on the heap (think of a File member of a class).<br><br>-Steve<br></div><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div style="font-family: arial,helvetica,sans-serif; font-size: 12pt;"><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><font face="Tahoma" size="2"><b><span style="font-weight: bold;">From:</span></b> David Simcha <dsimcha@gmail.com><br><b><span style="font-weight: bold;">To:</span></b> Discuss the
 phobos library for D <phobos@puremagic.com><br><b><span style="font-weight: bold;">Sent:</span></b> Mon, November 1, 2010 11:33:19 AM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [phobos] Fwd: Re: Ruling out arbitrary cost copy construction?<br></font><br>
<meta http-equiv="x-dns-prefetch-control" content="off">Sounds reasonable iff we assume that ref counted stuff will never be shared across threads, which we seem to be assuming anyhow.<br><br><div class="gmail_quote">On Mon, Nov 1, 2010 at 12:21 AM, Andrei Alexandrescu <span dir="ltr"><<a rel="nofollow" ymailto="mailto:andrei@erdani.com" target="_blank" href="mailto:andrei@erdani.com">andrei@erdani.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Alright, then how do we solve refcounting of constant objects (see Michel Fortin's question)? My solution involves casting away const and keeping immutability information at runtime. Is that acceptable?<br>
<font color="#888888">
<br>
Andrei</font><div><div></div><div class="h5"><br>
<br>
On 10/31/10 5:32 PM, Shin Fujishiro wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I think cheap copy construction is must.  Since any accesses to sealed<br>
range elements involve copy construction.<br>
<br>
I read older discussions and found that they mostly focused on swap<br>
and moveX.  But the problem lies not only in the swap operation.  It's<br>
everywhere and move doesn't help.<br>
<br>
Note that *every* access to an element of sealed range involves a copy<br>
construction.  When sorting a sealed range of BigInts (Array!BigInt),<br>
even an innocent comparison creates two BigInt copies:<br>
<br>
     if (!less(r[i], r[p]))  // Creates two temporary copies.<br>
<br>
I think these copies can't be elided since original objects exist in a<br>
container at the same time.  Still the compared elements could be moved<br>
out and then assigned back, but that's terribly awkward.<br>
<br>
We mostly don't want to move out elements - just want to read them.<br>
Sealed ranges are inherently copy intensive, so if you will put forward<br>
the concept, copy cost of elements must be assumed to be cheap IMO.<br>
<br>
<br>
Shin<br>
<br>
Andrei Alexandrescu<<a rel="nofollow" ymailto="mailto:andrei@erdani.com" target="_blank" href="mailto:andrei@erdani.com">andrei@erdani.com</a>>  wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I am highly interested in the opinion of Phobos contributors in the<br>
matter of copy construction (just posted the message below).<br>
<br>
Andrei<br>
<br>
-------- Original Message --------<br>
Subject: Re: Ruling out arbitrary cost copy construction?<br>
Date: Sat, 30 Oct 2010 22:56:24 -0500<br>
From: Andrei Alexandrescu<<a rel="nofollow" ymailto="mailto:SeeWebsiteForEmail@erdani.org" target="_blank" href="mailto:SeeWebsiteForEmail@erdani.org">SeeWebsiteForEmail@erdani.org</a>><br>
Newsgroups: digitalmars.D<br>
<br>
On 10/30/2010 09:40 PM, Michel Fortin wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
On 2010-10-30 20:49:38 -0400, Andrei Alexandrescu<br>
<<a rel="nofollow" ymailto="mailto:SeeWebsiteForEmail@erdani.org" target="_blank" href="mailto:SeeWebsiteForEmail@erdani.org">SeeWebsiteForEmail@erdani.org</a>>  said:<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
On 10/30/10 2:24 CDT, Don wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
At the moment, I think it's impossible.<br>
Has anyone succesfully implemented refcounting in D? As long as bug 3516<br>
(Destructor not called on temporaries) remains open, it doesn't seem to<br>
be possible.<br>
Is that the only blocker, or are there others?<br>
</blockquote>
<br>
I managed to define and use RefCounted in Phobos. File also uses<br>
hand-made reference counting. I think RefCounted is a pretty good<br>
abstraction (unless it hits the bug you mentioned.)<br>
</blockquote>
<br>
I like the idea of RefCounted as a way to automatically make things<br>
reference counted.<br>
</blockquote>
<br>
Unfortunately it's only a semi-automated mechanism.<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
But like File and many similar ref-counted structs, it has this race<br>
condition (bug 4624) when stored inside the GC heap. Currently, most of<br>
Phobos's ref-counted structs are race-free only when they reside on the<br>
stack or if your program has only one thread (because the GC doesn't<br>
spawn threads if I'm correct).<br>
<br>
It's a little sad that the language doesn't prevent races in destructors<br>
(bug 4621).<br>
</blockquote>
<br>
I hope we're able to solve these implementation issues that can be seen<br>
as independent from the decision at hand.<br>
<br>
Walter and I discussed the matter again today and we're on the brink of<br>
deciding that cheap copy construction is to be assumed. This simplifies<br>
the language and the library a great deal, and makes it perfectly good<br>
for 95% of the cases. For a minority of types, code would need to go<br>
through extra hoops (e.g. COW, refcounting) to be compliant.<br>
<br>
I'm looking for more feedback from the larger D community. This is a<br>
very important decision that marks one of the largest departures from<br>
the C++ style. Taking the wrong turn here could alienate many<br>
programmers coming from C++.<br>
<br>
So, everybody - this is really the time to speak up or forever be silent.<br>
<br>
<br>
Andrei<br>
</blockquote>
_______________________________________________<br>
phobos mailing list<br>
<a rel="nofollow" ymailto="mailto:phobos@puremagic.com" target="_blank" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br><span>
<a target="_blank" href="http://lists.puremagic.com/mailman/listinfo/phobos">http://lists.puremagic.com/mailman/listinfo/phobos</a></span><br>
</blockquote>
_______________________________________________<br>
phobos mailing list<br>
<a rel="nofollow" ymailto="mailto:phobos@puremagic.com" target="_blank" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>
<a rel="nofollow" target="_blank" href="http://lists.puremagic.com/mailman/listinfo/phobos">http://lists.puremagic.com/mailman/listinfo/phobos</a><br>
</div></div></blockquote></div><br>
<meta http-equiv="x-dns-prefetch-control" content="on"></div></div></blockquote>
</div><br>

      </body></html>