Unpin
Unpin (핀 보장 불필요 타입 트레이트)
어떠한 핀(pin) 보장도 필요로 하지 않는 타입을 위한 auto 트레이트예요.
출처: Rust 공식 문서
본문
"핀 고정(pinning)"이 무엇인지에 대한 정보는 pin 모듈 문서를 참고하세요. T에 대해 Unpin 트레이트를 구현하는 것은 T가 핀 고정과 무관함(pinning-agnostic)을 표현해요. 즉 핀 고정 보장을 노출하지도 의존하지도 않는다는 뜻이에요. 이는 Pin으로 감싼 그런 타입의 포인터가 완전히 제한 없는 API를 가질 수 있음을 의미해요.
다시 말해, T: Unpin이면 T 타입의 값은 Pin이 가리키고 "핀 고정"되어 있을 때조차 핀 고정이 제공하는 불변식에 묶이지 않아요.
이 트레이트의 아이디어는, 어떤 타입에는 안전성을 위해 Pin 사용이 필요하지만 핀 고정에 신경 쓰지 않는 다른 타입에도 쓰이고 싶은 API의 축소된 인체공학(ergonomics)을 완화하는 것이에요. 그러한 API의 대표적인 예가 Future::poll이에요. 핀 고정에 신경 쓰지 않는 많은 Future 타입은 Unpin을 구현해 API의 핀 고정 관련 제한을 우회할 수 있어요.
Unpin은 핀 고정되지 않은 데이터에 대해서는 전혀 영향이 없어요. 특히 mem::replace는 !Unpin 데이터도 자유롭게 이동시켜요. 다만 Pin에 감싸여 핀 고정된 !Unpin 데이터에는 mem::replace를 사용할 수 없어요.
pub auto trait Unpin { }