>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?
No, a message is always consistent, both in the actor model and in hardware memory. My point is just that if you restrict your messages to those supported by hardware memory, you get exactly the same semantics when sharing the actor as you do for hardware shared memory. However, the actor model _also_ allows you to define higher-level messages that are consistent in a way that is defined by the application semantics.
>> 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’.
>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?