- (the controversial one) Atomicity is simply too confusing and
    potentially astonishing to piggyback on "primitive-ness" or
    "reference-ness" in a codes-like-a-class world.


(Controversial with me at least; I keep thinking who are these people who can understand the rest of how to safely write non-locking concurrent code yet would struggle with this?)

So, the reason I'm being so dogmatic about this is that it undermines the belief that "immutable classes are always thread-safe".  I think the "objects vs values" distinction is too subtle; hiding atomicity behind primitive-ness is too subtle.  I can get behind saying "immutable classes are always thread-safe, unless they have been explicitly marked as non-atomic", because this is a clear indication that can't be confused for anything else.


    Would I be right that we can achieve primitive unification even
    without B4? There is nothing wrong with our delivering many
    performance gains while leaving others on the table for later.
    Yes, delivering primitive unification first means you can't have
    flat Complex yet.


But they still get /often-flat/ Complex? Sounds like /always-flat/ Complex is the perfect thing to punt on then.

They'll get flattening on the stack, but the layout of a Complex[] will likely be an array of pointers for a long time, until some heroics kick in.  I don't necessarily have a problem with a phased delivery where flattening comes later, but I'll note, too, that this is where *most of the heap flattening win is* -- arrays of nontrivial numerics.  Because there are lots of them, and such code will likely iterate over the arrays plenty, doing small amounts of CPU work per element, and then stalling when the memory subsystem chokes on a cache miss.  So we can't punt for that long.

Reply via email to