A Refcounted Array Type

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Mar 2 12:43:42 PST 2015


On 2/27/15 11:18 PM, ketmar wrote:
> On Fri, 27 Feb 2015 20:51:54 +0000, deadalnix wrote:
>
>> On Friday, 27 February 2015 at 04:13:03 UTC, Steven Schveighoffer wrote:
>>> In that case, you shouldn't be subject to any kind of race conditions.
>>> But we can't make the library/language based on this assumption. Your
>>> case is the exceptional case.
>>>
>>>
>> His case is not @safe, so we can ignore that problem.
>
> the compiler tends to disagree:
>
> === test.d ===
> int myglobal;
>
> class A {
>    ~this () @safe { if (myglobal == 42) assert(0); }
> }
>
> void main () {
>    auto a = new A;
> }
> ======
>
> dmd -w -c -o- test.d
>
> wow! no warnings, no errors!
>

I think in this case, the compiler can probably statically reject the 
code. But there are definitely ways around that, so I don't think full 
compliance is possible. I also think it's wrong-headed to have the 
compiler reject such code based on a GC deficiency.

The only solution is to have GC-allocated data be destroyed in the same 
thread it's allocated in. This brings the multi-threaded program into 
the same realm as yours -- looks like one thread for unshared data :)

-Steve


More information about the Digitalmars-d mailing list