3 ms·
I haven't touched async Rust, but have used normal Rust a little bit. My understanding is that 'static is program lifetime, meaning either static compile-time
by hjl22 3y ago
I haven't touched async Rust, but have used normal Rust a little bit.
My understanding is that 'static is program lifetime, meaning either static compile-time data like constant strings, or it is memory leaks. How does this apply to async in practice? Do you need to leak things that you want to make async?
- scottlamb 3y agoIt means spawned futures can't contain references that aren't 'static. But they can own memory. String for example is 'static. Likewise Vec<T>, Box<T>, Arc<T>, Rc<T>, etc. where T: 'static.
- hjl22 3y agoThanks for the explanation. I understand it now.
- pitaj 3y agoMost heap-allocated values like `String` are also static. Essentially it means that anything the value references is not on the stack.
- hjl22 3y agoThanks for the explanation. I understand it now.
- Georgelemental 3y ago`T: 'static` means that values of the type `T` own all their data (more specifically, their lifetime is not constrained by the lifetime of anything they reference). `&'static T` is a reference to something that lives as long as the program (static data or leaked memory).
- hjl22 3y agoThanks for the explanation. I understand it now.
- pornel 3y agoNo, when used as a bound, it doesn't really say how long data has to live. It just forbids use of all temporary references (types that are borrowing from something short-lived they don't own). Lifetime requirements simply don't apply at all to types that own their data. Or another way to see it is that self-contained types like Vec and String automatically meet every lifetime requirement, regardless of how long or short they actually live. Rust kinda screwed up with terminology here, because the general computing term of "object lifetime" applies to more things than the specific 'lifetime concept that Rust applies to references/loans.
- hjl22 3y agoThanks for the explanation. I understand it now.