Pin projection
De vraag of een veld binnen een vastgepinde struct zelf ook vastgepind is. Rusts antwoord: dat moet per veld worden gekozen, en die keuze maakt deel uit van het contract van het type.
De achtergrond is dat een async-blok wordt gecompileerd tot een toestandsmachine die verwijzingen naar zichzelf kan bevatten, en dus niet in het geheugen mag verhuizen zodra hij is gestart. Rust drukt dat uit met een wrappertype dat belooft dat wat eronder ligt blijft staan. Het probleem ontstaat bij een eigen future die uit andere futures is opgebouwd: om een binnenste veld aan te sturen moet je van de belofte over de hele struct naar een belofte over dat ene veld komen. Dat mag, maar alleen als je tegelijk toezegt het veld nooit eruit te verplaatsen, nooit een gewone mutabele referentie ernaar uit te delen en het niet te verplaatsen in een eigen destructor. Omdat de voorwaarden gemakkelijk over het hoofd worden gezien, gebeurt de projectie vrijwel altijd met macro's uit de pin-project-familie in plaats van met de hand.