mailbox: Phase 4b — send_dyn bare-pid escape hatch (RFC 014 §4.6)
The explicit fallible fallback for when only an untyped Pid is in hand (off a Down, out of a future members()), so the typed send_to / send-by-name stay the default and callers don't grow workarounds around a missing primitive. - send_dyn::<M>(Pid, msg): one line over the shared send_to_pid core. Same identity-bound, no-redirect liveness as send_to (Dead once the incarnation is gone); the difference is the explicit M, so NoChannel is a real runtime outcome here rather than the debug_assert it collapses to on the typed paths. - Takes Pid<Erased> specifically: a typed Pid<A> must .erase() to reach it, so opting into the fallible downcast stays visible at the call site. tests/registry.rs: send_dyn_delivers_and_reports_wrong_type (right type delivers; live actor with no channel for the asked type -> NoChannel) and send_dyn_to_dead_pid_is_dead. Full suite + order-checker green, warning-free. This completes the RFC 014 send surface: Name<M> (re-resolving), Pid<A> (typed direct), send_dyn (bare-pid). send_after (§6) can now target any of them — its Dest question is answered.
This commit is contained in:
+3
-1
@@ -56,7 +56,9 @@ pub use monitor::{demonitor, monitor, Down, DownReason, Monitor, MonitorId};
|
||||
pub use mutex::{LockTimeout, Mutex, MutexGuard};
|
||||
pub use pid::{Addressable, Erased, Name, Pid, RawPid};
|
||||
pub use pg::{join, leave, members, pick, Incarnation, Member, NodeId};
|
||||
pub use registry::{install, register, send, send_to, unregister, whereis, RegisterError, SendError};
|
||||
pub use registry::{
|
||||
install, register, send, send_dyn, send_to, unregister, whereis, RegisterError, SendError,
|
||||
};
|
||||
pub use runtime::{init, Config, Runtime};
|
||||
pub use scheduler::{
|
||||
block_on_io, request_stop, run, self_pid, sleep, spawn, spawn_under, wait_readable,
|
||||
|
||||
Reference in New Issue
Block a user