|
|
|
|
|
by Groxx
86 days ago
|
|
That would be this: >you can emulate a Turing-complete computer in a Turing-complete language If you've created semantics that allow for incomplete reads/writes, you allow incomplete reads/writes. The semantics don't seem to exist natively though - if you write a large object in one message and read it in another, is it possible to read part of your object, and part of another that some other message wrote, meaning you get data that no message ever wrote? Or is it always some "real" value? |
|
>> you can emulate a Turing-complete computer in a Turing-complete language
> If you've created semantics that allow for incomplete reads/writes, you allow incomplete reads/writes.
That's true, but isn't entirely relevant to the discussion for a few reasons. First, Turing-completeness does not require the existence of race conditions; it is perfectly possible to have a Turing-complete language (for example, standard Turing machines!) that doesn't have the ability to define data races. Second, my entire point here is that you don't have to ‘create semantics that allow for incomplete reads/writes’. That semantics is a subset of the standard actor semantics. In fact, I am claiming more broadly that all reads/writes are either complete or incomplete (to borrow your terminology) depending on your semantic perspective. The reads/writes of standard hardware shared memory are also ‘complete’ from the perspective of reading/writing individual words; the problem is just that almost all applications need a notion of ‘completeness’ that is higher-level than that, which gives rise to the (relativistic!) notion of ‘data race’.