fn foo(&big, &chungus)
is out,
async fn foo(&BIG_GLOBAL_STATIC_REF_OR_SIMILAR_HORROR, sendable_chungus.clone())
is in.
Or maybe you know
fn foo(&big, &chungus)
is out
async fn foo(big, chungus) -> (big, chungus)
is in
Or
async fn foo(big, chungus) { // ... tx.send((big, chungus)).await?; // ... }
is in
Moving (movable/sendable) data is not limited by number or direction, you know. And that second one even makes use of them great Hoare channels! And gives us control on how long we hold on to data before sending it back (modified or not). But I digress. Let’s go back to the important talking point that Hoare was right!
Zig’s approach seems even more low-level and manual: https://ziglearn.org/chapter-5/
(In general, I think Rust and Zig both seem valuable, and I think it’s a mistake to treat programming language success as a zero-sum game.)