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