December 19, 2025
Place your bets, Rust!
Postfix Macros and Let Place
Rust devs split: clever shortcut or needless chaos
TLDR: A new Rust idea—“let place”—aims to make postfix macros safe and predictable by naming where data lives. Commenters are split: some say it’s overkill and prefer simple references, others note similar features in older languages, turning this into a debate about clarity versus complexity.
Rust’s long-stalled postfix macros RFC just got a spicy reboot with a proposal for “let place”, a way to name where data lives so macros don’t surprise you mid-line. Translation: make fancy “thing.macro!” call chains behave without the code doing a sneaky U-turn. The author’s fix aims to keep code readable while still letting macros work their magic. But the crowd? Oh, they showed up with popcorn. One camp says this is brilliant ergonomics; another calls it unnecessary ceremony. Rilindo dropped a zinger comparing it to the old mail server wars—“sendmail vs Postfix”—and declared it “unneeded,” sparking meme replies about “mailing your macros.” Meanwhile, kazinator flexed veteran cred with a history lesson: other languages did this already—TXR Lisp’s “placelet” and Emacs Lisp’s “gv-letplace”—so Rust isn’t breaking new ground. The most pragmatic hot take came from mmastrac: skip the new syntax and just use references like “let &p = &x.field,” aka keep it simple. The vibe: half the thread is cheering the clarity of no backtracking, half is side-eyeing yet another keyword, and everyone’s making “place your bets” jokes. For context nerds, there’s even a linked place magic explainer.
Key Points
- •Postfix macros in Rust aim to enable `expr.macro!(...)` but must uphold the no-backtracking rule.
- •Naïve desugaring to a temporary value changes semantics due to place-to-value coercion on the method call LHS.
- •“Partial place evaluation” proposes pre-evaluating temporaries while preserving the remaining expression as a place.
- •Autoderef introduces complexity, potentially requiring `deref` or `deref_mut` during macro expansion.
- •A `let place` alias (`let place p = <expr>;`) preserves place semantics and may underpin correct postfix macro design.