Closed
Description
@eholk and I theorise that 'safe' Rust, for not having mutable shared state, currently has two methods for causing nondeterminism - select
/fail
(fail
is basically isomorphic to select
in terms of semantics, though implemented differently under the hood), and I/O.
It would be really, really slick if we could prove that one-to-one message-passing is deterministic, and then, pending an effect system, could label all relevant library functions with #[effect(nondeterminism)]
. Enterprising users could then #[forbid]
it, and be off to... well, NOT be off to the races.