Pin-projektion pin projection
Frågan om ett fält i en fastnålad struktur självt ska räknas som fastnålat. Rusts svar är att man måste välja per fält, och att valet är en del av typens kontrakt.
Bakgrunden är att ett async-block kompileras till en tillståndsmaskin som kan innehålla referenser in i sig själv, vilket gör att den inte får flyttas i minnet efter att den börjat köra. Rust uttrycker det med en omslagstyp som lovar att det den pekar på ligger still. Problemet dyker upp när man implementerar en egen future som består av andra futures: för att kunna driva ett inre fält måste man ta sig från löftet om hela strukturen till ett löfte om just det fältet. Det är tillåtet, men bara om man samtidigt förbinder sig att aldrig flytta ut fältet, aldrig ge ut en vanlig muterbar referens till det, och att inte flytta det i en egen destruktor. Eftersom villkoren är lätta att missa görs projektionen nästan alltid med makron ur pin-project-familjen istället för för hand.