[dmd-concurrency] real
    Andrei Alexandrescu 
    andrei at erdani.com
       
    Thu Jan 28 16:43:53 PST 2010
    
    
  
Walter Bright wrote:
> You say the 2 word atomics lead to an entirely different design than 
> 1 word atomics. I agree and think that is pretty clear.
In fact it's pretty darn subtle. It took the academic community years to
figure that out. For a while it was believed that e.g. CAS2 was strictly
more powerful than CAS. It turned out it's just as powerful, just more
convenient.
> My point was that in trying to make 16 <=> 32 bit portability, the
> problems with allocating 100,000 byte arrays led one inevitably to
> using entirely different designs between the two, even if the
> language tried to make such code portable. You couldn't hide those
> design changes behind a simple macro.
I agree that having a larger space also enables different designs. That 
doesn't make machine-dependent designs a good thing!
> But very few people advocated forcing 32 bit designs to be coded as 
> if they were 16 bit ones. Similarly, I can't see disabling support 
> for 128 bit atomics just because they don't work on some CPUs.
We could and should allow machine-specific support via intrinsics that 
may or may not be available, not by enabling or disabling assignments!
Let me clarify what the most dangerous situation is.
1. A developer develops on a certain machine with good capabilities.
2. As we all know software design is like a gas - it will fill 
everything it can, so sooner or later the programmer writes a shared 
array assignment. She may not remember it's a dicey feature, or she may 
use it without realizing it (e.g. by calling a function against a shared 
array).
3. Now the code will only compile on a subset of platforms. This has two 
problematic consequences.
3a. There was no way during development to turn on a flag saying 
"Portability issues are errors".
3b. Rewriting is much more costly now that the entire program has been 
already designed to take advantage of the shaky functionality.
This _is_ a problem, and please - parallels with 16 bit etc. do not 
hold. Let's talk about the durned CAS2!
> The user does have a choice
NO! That is a false choice! Nonportabilities that go undetected until 
you port are NOT a choice, they are a problem with the language.
> - he can program it using 32 bit 
> constraints, and it will work successfully on 64 bit machines.
If you want this to be remotely palatable, you must define a flag that 
enforces portability. Can we negotiate something in that direction?
Andrei
    
    
More information about the dmd-concurrency
mailing list