Léxico TI › Programación › Proyección de pin

Proyección de pin pin projection

Programación Svenska → Actualizado: 2026-09-04

La cuestión de si un campo dentro de una estructura fijada (pinned) está a su vez fijado. La respuesta de Rust es que hay que elegirlo campo por campo, y que esa elección forma parte del contrato del tipo.

El trasfondo es que un bloque async se compila a una máquina de estados que puede contener referencias hacia sí misma, lo que impide moverla en memoria una vez que ha empezado a ejecutarse. Rust expresa esto con un tipo envoltorio que promete que aquello a lo que apunta permanece quieto. El problema aparece al implementar un future propio compuesto por otros futures: para poder avanzar un campo interno hay que pasar de la promesa sobre toda la estructura a una promesa sobre ese campo en concreto. Está permitido, pero solo si al mismo tiempo uno se compromete a no sacar nunca el campo, a no entregar jamás una referencia mutable corriente hacia él, y a no moverlo en un destructor propio. Como las condiciones son fáciles de pasar por alto, la proyección casi siempre se hace con macros de la familia pin-project en lugar de a mano.

← Volver al léxico