# Local and Shared

- so far we have assumed basically single-threaded, async execution
- this is most code, but obviously a complete language needs to consider concurrency at a more fundamental level, across threads
- many ways to do this, TS already strongly biases into the "local-first" direction
- we could just generalise SharedArrayBuffer and friends?
- split local and shared memory spaces
- separate heaps, separate GCs
- worker-first, local-first, shared-nothing-first memory model

- local isolated heap per worker
- local and shared modifier on types
- local and shared modifier on bindings
- local and shared modifier on declarations
- worker-local stuff is .. local (Promise, Task, etc.)
- no need for Send and Sync, basically the 90 degree rotated version of that classic pair

- local borrowing managed is sound except across suspension
- how to keep local / shared safe
- proper managed object types on shared

- borrows are place polymorphic by default
- reference types are local by default unless otherwise specified
- `SharedSafe`
