Move Expressions
17 days ago
- #Rust
- #closures
- #ergonomics
- Move expressions are proposed as an alternative to explicit capture clauses in Rust, improving ergonomics and readability.
- The syntax `move($expr)` within closures or futures creates a temporary value moved into the closure, simplifying capture management.
- Example usage shows replacing `let _some_value = self.some_value.clone();` with direct `move(self.some_value.clone())` in closures.
- Multiple clones can be handled within closures, e.g., `move(tx.clone()).clone()` for `FnMut` closures.
- The idea originated from community discussions, with `move` keyword proposed by @simulacrum, improving on earlier `super` keyword suggestions.
- Move expressions make closures more 'continuous', aligning with Rust's underlying model by allowing precise control over captures.
- The proposal suggests teaching closures starting with move expressions, with `move ||` as a convenient default for capturing all variables by move.
- Prefix `move($expr)` is preferred over postfix `$expr.move` due to clearer evaluation timing and scope delineation.
- Move expressions are seen as a step towards Rust's goal of being 'low-level enough for a Kernel, usable enough for a GUI'.
- The simplicity and generalization of Rust's existing design are key advantages of the move expressions proposal.