Rust'ta something.macro!(x, y, z) şeklinde bir sözdizimi sağlayan postfix makrolar özelliği, uzun süredir tasarım sorunları nedeniyle askıda kalmış durumda. Temel sorunlardan biri, makroların ifadeyi doğrudan alması durumunda "geri izleme yok" (no-backtracking) kuralını ihlal edebilmesi. Bu durum, x.is_some().while! { ... } gibi yapılarda is_some() çağrısının her döngüde yeniden değerlendirilmesi gerektiği gibi beklenmedik davranışlara yol açabilir. Geliştiriciler, kod okunabilirliğini ve sürprizleri azaltmak için ifadenin bir kez değerlendirilip sonucun makroya aktarılmasını istiyor.
Bu hedefe ulaşmanın basit bir yolu olan let x = <expr>; x.method() şeklinde bir dönüşüm, "yer ifadeleri" (place expressions) nedeniyle hatalı sonuçlar doğurabilir. Örneğin, self.count.take() gibi bir ifadede, self.count bir yer ifadesidir. Geçici bir değişkene kopyalamak, orijinal yerine kopyayı değiştirmeye yol açar ve bu da yanlış bir değerden yere dönüştürme (place-to-value coercion) ekler. Postfix makrolar için de benzer bir sorun geçerlidir. İdeal çözüm, değerden yere dönüşümden kaynaklanan tüm geçicileri önceden değerlendirmek ve ifadenin kalanını makroya olduğu gibi aktarmak olan "kısmi yer değerlendirmesi" (partial place evaluation) olarak adlandırılıyor.
Ancak, autoderef gibi özellikler bu süreci karmaşıklaştırıyor. Örneğin, Box<Foo> türündeki bir x için x.field.macro!() ifadesi, makronun içeriğine bağlı olarak deref veya deref_mut çağrılarına genişletilmesi gerekebilir. Bu durum, basit bir sözdizimsel dönüşümün istenen davranışı sağlamakta yetersiz kalacağını gösteriyor. Makale, bu zorlukları aşmak için "bir yeri bir kez hesapla ve birden çok kez kullan" fikrini ifade eden let place kavramını bir çözüm olarak sunuyor. let place p = <expr>; sözdizimi, <expr> ifadesini bir yer olarak değerlendirir ve p bu yerin bir takma adı haline gelir.
Rust'taki postfix makro önerisi, ifadelerin nasıl değerlendirildiği ve yer ifadelerinin doğru şekilde nasıl ele alınacağı konusunda karmaşık dil tasarımı zorlukları barındırıyor.