Threads, server functions, GPU kernels, and distributed training all need rules for values used across an execution boundary. The shared language-design problem is to specify which values are admissible and how an accepted value becomes usable at the destination.
Working thesis: boundary crossing can be part of a language’s type and semantic contract. For a given boundary, the language can define admissible values, their destination types or representations, and the operations that copy, move, share, serialize, or proxy them. A compiler can check the applicable rules and arrange the corresponding runtime operations.
The central proposal has two connected parts:
Define which values may be used across a boundary, and define what sending or sharing each accepted value means.