<div class="gmail_quote">On Fri, Jan 29, 2010 at 6:03 PM, Andrei Alexandrescu <span dir="ltr">&lt;<a href="mailto:andrei@erdani.com">andrei@erdani.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Walter and I just talked over the phone and agreed on the following. Of course the decisions are not final and are up for debate.<br>
<br>
1. Atomic array assignment is in.<br>
<br>
We discussed that and concluded the following:<br>
<br>
* CMPXCHG16B and friends are the norm of modern Intel-like machines, and are unlikely to go away soon. We are designing D for the future and the future looks like two-word assignment is in it.<br>
<br>
* Pre-2004 AMDs and probably some other chips still lack two-word assignment. We decided that we will look for creative solutions to those problems as they come up (hat tip to Kevin&#39;s idea of using a spin lock).<br>
<br>
2. Atomic assignment of real is still undecided.<br>
<br>
I think I&#39;ll write in TDPL that it&#39;s platform dependent. Assignment to 80-bit reals on 32-bit machines is still problematic.<br>
<br>
3. There are _no_ more synchronized or shared methods. That is, code like this is incorrect:<br>
<br>
class A { void fun() shared { } }<br>
class B { void fun() synchronized { } }<br>
<br>
Rationale: it is tenuous to offer mixed modes in the same class.<br>
<br>
4. The &quot;synchronized&quot; attribute is hoisted at class level:<br>
<br>
synchronized class A { ... }<br>
<br>
That means each and every method of that class is synchronized.<br>
<br>
5. The &quot;shared&quot; attribute is hoisted at class or struct level:<br>
<br>
shared class A { ... }<br>
shared struct B { ... }<br>
<br>
That means the implementation is lock-free and uses its own synchronization mechanisms.<br>
<br>
6. When defining an object of a synchronized of shared type, you still need to qualify it with &quot;shared&quot; in order to make it so. For example:<br>
<br>
synchronized class A { ... }<br>
shared A a; // fine<br>
A b;        // error<br>
<br>
(I&#39;m not 100% sure about this.)<br>
<br>
====================<br>
<br>
These rules will simplify and modularize concurrent code. With message passing, synchronized classes, and shared objects, I hope we get to put together a solid concurrency offering in D2. Please share your thoughts.<br>
<br>
<br>
Andrei<br></blockquote><div><br>I like it.<br><br>Kevin<br><br><br> </div></div>