@rfcbot fcp рдорд░реНрдЬ
рдлрд╝реАрдЪрд░ рдирд╛рдо: pin
рд╕реНрдерд┐рд░реАрдХрд░рдг рд▓рдХреНрд╖реНрдп: 1.32.0
рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛: # 49150
рд╕рдВрдмрдВрдзрд┐рдд RFC: рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 2349
рдпрд╣ "рдкрд┐рдирд┐рдВрдЧ" рдмрдирд╛рддреЗ рд╣реБрдП pin
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред
рд╕реНрдерд┐рд░ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд┐рди рдореЗрдореЛрд░реА рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИред
(рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдПрдХ рд╡реНрдпрд╛рдкрдХ "рд╕реНрдерд┐рд░реАрдХрд░рдг рд░рд┐рдкреЛрд░реНрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред)
[std|core]::pin::Pin
рдпрд╣ Pin
рдкреНрд░рдХрд╛рд░ рдХреЛ pin
std
/ core
рд╕рдмрдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИред Pin
рд╣реИ
рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ P
рдЖрд╕рдкрд╛рд╕ рдПрдХ рдореМрд▓рд┐рдХ, рдкрд╛рд░рджрд░реНрд╢реА рдЖрд╡рд░рдг, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ
рдПрдХ рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Pin<&mut T>
рдФрд░ Pin<Box<T>>
рджреЛрдиреЛрдВ рд╣реИрдВ
рд╡реИрдз, рдЗрдЪреНрдЫрд┐рдд рдирд┐рд░реНрдорд╛рдг)ред Pin
рд░реИрдкрд░ "рдкрд┐рди" рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ
рд╕реНрдореГрддрд┐, рдЬреЛ рдЬрдЧрд╣ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИ
рдЙрд╕ рд╕реНрдореГрддрд┐ рдХрд╛ред
Pin
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдХреБрдЫ рдХреЗ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ
рд╕реВрдЪрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ ( Box
, Rc
, рдЖрджрд┐)ред рдПрд╕рдЯреАрдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рднреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдПрдХ pinned
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЕрдВрджрд░ рдореВрд▓реНрдп, рдпреЗ рд╕рднреА рд╕рдВрдХреЗрдд Pin<&T>
рдХреА рдУрд░ рдиреАрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ Pin<&mut T>
ред рдкрд┐рди рдХрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рдбреЗрд░реЗрдлрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ &T
рд╡рд╛рдкрд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ
рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд╕реНрдкрд░: рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд get_mut
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реИ
рд╕рдорд╛рд░реЛрд╣ред
рдирддреАрдЬрддрди, рдХрд┐рд╕реА рдХреЛ рдкрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ рдХрд┐ рд╡реЗ рдХрднреА рднреА рдЙрд╕ рдбреЗрдЯрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХрднреА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рдХреЗ рд▓рд┐рдП)
рдЙрджрд╛рд╣рд░рдг) рдЖрддреНрдо рд╕рдВрджрд░реНрднред
Pin
рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдпреЗ рд╕реНрдерд┐рд░ API рд╣реЛрдВрдЧреЗ:
impl<P> Pin<P> where P: Deref, P::Target: Unpin
fn new(pointer: P) -> Pin<P>
impl<P> Pin<P> where P: Deref
unsafe fn new_unchecked(pointer: P) -> Pin<P>
fn as_ref(&self) -> Pin<&P::Target>
impl<P> Pin<P> where P: DerefMut
fn as_mut(&mut self) -> Pin<&mut P::Target>
fn set(&mut self, P::Target);
impl<'a, T: ?Sized> Pin<&'a T>
unsafe fn map_unchecked<U, F: FnOnce(&T) -> &U>(self, f: F) -> Pin<&'a U>
fn get_ref(self) -> &'a T
impl<'a, T: ?Sized> Pin<&'a mut T>
fn into_ref(self) -> Pin<&'a T>
unsafe fn get_unchecked_mut(self) -> &'a mut T
unsafe fn map_unchecked_mut<U, F: FnOnce(&mut T) -> &mut U>(self, f: F) -> Pin<&'a mut U>
impl<'a, T: ?Sized> Pin<&'a mut T> where T: Unpin
fn get_mut(self) -> &'a mut T
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рдХреНрд╖рдг Pin
рд╣реИрдВ, рдпреЗ рджреЛрдиреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ
рдЗрд╕рдХрд╛ рд╕рдВрдЪрд╛рд▓рди:
impl<P: Deref> Deref for Pin<P> { type Target = P::Target }
impl<P: DerefMut> DerefMut for Pin<P> where P::Target: Unpin { }
std::marker::Unpin
рдЕрдирдкрд┐рди рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдирд┐рдВрдЧ рдХреА рдЧрд╛рд░рдВрдЯреА рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдЕрдЧрд░ рдж
рдкрд┐рди рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рд▓рдХреНрд╖реНрдп Unpin
, рдпрд╣ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ
рдЗрд╕рдХреЗ рдкреНрд░рддрд┐ рдЙрджрд╛рд╕реАрдирддрд╛ред Unpin
рдкреНрд░рдХрд╛рд░ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ
Pin
рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП
рдЗрд╕рдореЗрдВ рд╕реНрд╡-рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдкрд┐рди рд╡рд╛рд▓реЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛
reference. рд╡рд┐рд╢реЗрд╖ рдХреЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Pin
рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реА рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ
рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд┐рдд рд╕рдВрд░рдЪрдирд╛рдПрдВ: рд╡реЗ рдкреНрд░рдХрд╛рд░ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИ
Pin
рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдзред
рдПрд╕рдЯреАрдбреА рдореЗрдВ Unpin
рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
impl<'a, T: ?Sized> Unpin for &'a T
impl<'a, T: ?Sized> Unpin for &'a mut T
impl<T: ?Sized> Unpin for Box<T>
impl<T: ?Sized> Unpin for Rc<T>
impl<T: ?Sized> Unpin for Arc<T>
рдпреЗ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдВрд╣рд┐рддрд╛рдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдирдбрдиреЗрд╕ рдкреВрд░реЗ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕рдХрд░реНрдордХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрд╕
рдПрдХ Pin<&T>
рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреЛ T
рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЬрдЧрд╣ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдХрднреА-рдХрднреА рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░
Pin<&mut Box<T>>
рдХреА рддрд░рд╣ T
рдЬрдЧрд╣ рдХрд╛ рдбреЗрдЯрд╛ рдкрд┐рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рди рдХрд░рддрд╛ рд╣реИ
рдореЗрдореЛрд░реА рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, Box
рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рдЬреЛ рдвреЗрд░ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХ рд╣реИред
std::marker::Pinned
Pinned
рдкреНрд░рдХрд╛рд░ рдПрдХ ZST рд╣реИ рдЬреЛ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
Unpin
рдХреЗ рдСрдЯреЛ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдерд┐рд░ рдкрд░ рджрдмрд╛рдПрдВ, рдЬрд╣рд╛рдБ !Unpin
рдирд┐рд╣рд┐рдд рд╣реИ
рдЕрднреА рддрдХ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЪрд┐рдордЯрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП std рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ:
Box::pinned(data: T) -> Pin<Box<T>>
Rc::pinned(data: T) -> Pin<Rc<T>>
Arc::pinned(data: T) -> Pin<Arc<T>>
рдкрд┐рдЫрд▓реЗ 9 рдорд╣реАрдиреЛрдВ рдореЗрдВ рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗ рд╣реИрдВ
рд╣рдордиреЗ рдЙрдирдХреА рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╢рдХреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ рдФрд░ рдЙрдирдХреА рдзреНрд╡рдирд┐ рдХреА рднреА
рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдЕрдм рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдПрдкреАрдЖрдИ рдПрдкреАрдЖрдИ рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ
рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдореИрдХреНрд╕рд┐рдорд╛ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдирд┐ рдФрд░ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдФрд░
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐; рдпрд╣ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдкрд┐рдирд┐рдВрдЧ рдХреЗ рдкреЗрдЪреАрджрд╛ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХрдм рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ
рдПрдХ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди : рдпрд╛рдиреА Pin<P<Target = Foo>>
рд╕реЗ a рдкрд░ рдЬрд╛рдирд╛
Pin<P<Target = Bar>>
, рдЬрд╣рд╛рдВ Bar
рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ Foo
ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ
рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ:
(Foo: Unpin) implies (Bar: Unpin)
: рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИFoo
(рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░) Unpin
Bar
(рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░) Unpin
редBar
рдХреЛ рдХрднреА рднреА Foo
рдХреЗ рд╡рд┐рдирд╛рд╢ рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПредFoo
рдХрд╛ рдХреЛрдИ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдзреНрдпрд╛рди рд╕реЗ рд╣реИFoo
(рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░) repr(packed)
,рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, std API рд╕реНрдЯреИрдХ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдХрд░ рдХрд┐ рд╡реЗ рд╕реНрдЯреИрдХ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдкрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рди рд╣рд┐рд▓рд╛рдПрдВред
pin-utils
crates.io рдкрд░
рдкрд┐рдирд┐рдВрдЧ рдФрд░ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рдиред рд╕реНрдЯреИрдХ рдкрд┐рдирд┐рдВрдЧ рдореИрдХреНрд░реЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкрд┐рди рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдХреНрд░реЛ рдореМрдЬреВрдж рд╣реИ
рдЬреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЬреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рдЧрд▓рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Unpin
, рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕реЗ pin::Unpin
рдкреБрдирдГ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЬрдм рддрдХ рдПрд╕рдЯреАрдбреА рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рд╕реБрдкрд░ рдореЙрдбрд▓ рд╣реИ (рдЬреИрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░рдирд╛
std::collections::hash_map::HashMap
рд╕реЗ std::collections::HashMap
)ред рдЗрд╕рдХреЗ рд▓рд┐рдП
рдХрд╛рд░рдг, std::marker::Unpin
рдХрд╛ std::pin::Unpin
рд╕реЗ рдкреБрди: рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ
рдЬрдЧрд╣ред
рдЗрд╕реА рд╕рдордп, рд╕реЗрдВрдб рдФрд░ рд╕рд┐рдВрдХ рдЬреИрд╕реЗ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ рдЗрд╕рд▓рд┐рдП Unpin
pin
рдореЙрдбреНрдпреВрд▓ рд╕реЗ
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ рд╣рдо std::marker::Unpin
рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрдирд╛рддреЗ рд╣реИрдВ,
рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ pin
рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, Pin
рдХреЗ рд╕рдВрдмрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╣реБрдд рд╕реЗ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рддрдерд╛рдкрд┐,
рдпрд╣ рдирд┐рдпрдо рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╣реИ
рдмрд╕ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рджрд┐рдпрд╛ред рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рдВрдХреЗрдд рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
deref, deref рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд deref рдпрд╛ deref рдирд╣реАрдВ
рд╡реИрд╕реЗ рднреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдирд╛рдо рдХрд╛рдлреА рдЕрдиреЛрдЦреЗ рд╣реИрдВ (рдЬреИрд╕реЗ map_unchecked
)
рдФрд░ рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо Pin
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреА рдпрдереЛрдЪрд┐рдд рдкреВрд░реНрд╡рддрд╛ рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛ
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдпреВрдПрдлрд╕реАрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рд╡реЗ рд╣реЛрдВрдЧреЗ
рдпрджрд┐ рд╣рдо рд╡рд┐рдзрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкрд┐рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
get_mut_unchecked
рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ get_unchecked_mut
рд╡рд░реНрддрдорд╛рди рдЖрджреЗрд╢ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред
impl<P> Unpin for Pin<P>
рдирд┐рдХрд╛рд▓реЗрдВрдпрд╣ рдирд┐рд╣рд┐рддрд╛рд░реНрде unpin impls рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рдФрдЪрд┐рддреНрдп рд╕реЗ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ: Pin<P>
рдФрд░ P
рдмреАрдЪ рдХреЛрдИ рд╕реВрдЪрдХ рджрд┐рд╢рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХреА рдЧрдИ рд╣реИред
рдЗрд╕ рдлреНрдпреВрдЪрд░ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреЛ P: Unpin
рдмрд╛рдЙрдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
Pin
repr(transparent)
рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдкрд┐рди рдХреЛ рдПрдХ рд╣реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕реВрдЪрдХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдЖрд╡рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд┐рди рдПрдкреАрдЖрдИ рд╕реНрдореГрддрд┐ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдЬреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЙрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВ
Unpin
, рдЙрдирдХрд╛ рдкрддрд╛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ
рд╕реНрд╡рдпрдВ-рд╕рдВрджрд░реНрднрд┐рдд рдЬрдирд░реЗрдЯрд░ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ред рдирддреАрдЬрддрди,
Pin
рдкреНрд░рдХрд╛рд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ future
API рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрдж рд╣реА рд╣реЛрдЧрд╛
рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдореЗрдВ рднреА (# 55704) рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
Pin
рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреЗ API рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЕрдЧреНрд░рджреВрдд рд╣реИ
Future
API, рдЬреЛ рдЦреБрдж рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЕрдЧреНрд░рджреВрдд рд╣реИ
async/await
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдкреВрд░реЗ futures 0.3
async IO рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдкрд░ред
cc @cramertj @RalfJung
@rfcbot fcp рдорд░реНрдЬ
рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп @withoutboats рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдЯреАрдо рдХреЗ рдмрд╛рдХреА рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╣реИ:
рдЪрд┐рдВрддрд╛рдУрдВ:
рдПрдХ рдмрд╛рд░ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдореАрдХреНрд╖рдХ рдЕрдиреБрдореЛрджрди рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдЕрдзрд┐рдХрддрдо 2 рдЕрдиреБрдореЛрджрди рдмрдХрд╛рдпрд╛ рд╣реИрдВ), рддреЛ рдпрд╣ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдП рдЧрдП рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдЙрдард╛рдПрдВ!
рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдореБрдЭреЗ рдХреНрдпрд╛ рдЯреИрдЧ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддреГрдд рд░рд╛рдЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @withoutboats! рдореИрдВрдиреЗ Pin
рдХреА рд╡рд┐рднрд┐рдиреНрди рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢реНрди рдорд┐рд▓реЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЧрдИ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдиреАрдЪреЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ "рдХреНрдпрд╛ Unpin
?" рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡рд┐рднрд┐рдиреНрди рдЧрд╛рд░рдВрдЯреА рд╕реЗ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдлрд┐рд░ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ T
рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИ рдФрд░ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ Unpin
, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ Pin<T>
рдХреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд╛рд░рдВрдЯреА рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╣ рд╕рд╣реА рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рд╣рд░ рдкреНрд░рдХрд╛рд░ рдЬреЛ рд╕реНрд╡рдпрдВ рд░реЗрдлрд░рд▓ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА: рдЬрдирд░реЗрдЯрд░ рдирд╣реАрдВ) Unpin рд╣реИ
рдпрд╣ рдХреЗрд╡рд▓ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕реНрдерд┐рд░ рдореЗрдореЛрд░реА рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ Pin
рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреАрдЪ-рдмреАрдЪ рдореЗрдВ рд╣реИрдВред
рдореИрдВ рдХреИрд╕реЗ Unpin
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреНрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рдмрд╛рд╣рд░реА рдХреЛрдб рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ Unpin
)ред рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк Pin
рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд API рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдмреЗрд╡рдлрд╛рдИ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ Unpin
рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред Pin
рдХреБрдЫ Unpin
рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рдЙрдкрд░реЛрдХреНрдд "рд╕реЗрдХреНрд╢рди рдСрди рдкрд┐рдирд┐рдВрдЧ рдПрдВрдб рд╕реЗрдлреНрдЯреА" рд╕реЗрдХреНрд╢рди 1 рдХреЗ рдЕрдВрдХ 1 рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдореНрдо рдореИрдВ рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Unpin
рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ Unpin
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдирдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ Unpin
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ! рдпрд╣ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░ (рдЖрд░реНрдХ / рдЖрд░рд╕реА / рдмреЙрдХреНрд╕ / рд╕рдВрджрд░реНрдн) Unpin
, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ? рдпрджрд┐ рдпрд╣ рдПрдХ рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ MyType
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Unpin
рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрдд рд╣реЛрддреЗ рд╣реИрдВ? рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?
рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдпрд╛ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ Unpin
рдЧрд╛рд░рдВрдЯреА рдФрд░ рдРрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдХрд░ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Unpin
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА Unpin
рд▓рд╛рдЧреВ рди рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Pin<P>
рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЖрдк P::Target
рдХреЗ рдХрд┐рд╕реА рднреА рдЗрдирд▓рд╛рдЗрди рд╕рджрд╕реНрдпреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?
@alexcrichton рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╢рд╛рдпрдж рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реИ рдХрд┐ рдЕрдирдкрд┐рди рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ!
рдЕрдирдкрд┐рди рдПрдХ рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕реЗрдВрдб рдпрд╛ рд╕рд┐рдВрдХ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд░ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдирд░реЗрдЯрд░ рдФрд░ async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ !Unpin
ред рдкреНрд░рдХрд╛рд░ рдЬреЛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдпрд╛ рдПрдХ async рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░) рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Unpin
рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд┐рд╣рд┐рддрд╛рд░реНрде Unpin
рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рди рд╣реЛрдВред рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрдд рддрдХ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрдпрд╛ рдХреЛрдИ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдХрд░ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдпрд╣рд╛рдБ рдПрдкреАрдЖрдИ рдПрдкреАрдЖрдИ рдХреЗ рдореМрд▓рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рдХрд╛рд░ P
, Pin<P>
P
рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ Pin
рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ:
&mut P::Target
рд╕реЗ рдПрдХ Pin<P>
, рдЖрдк рд▓реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП P::Target
редPin<P>
рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдХрднреА рднреА рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЕрдирдкрд┐рди рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИредрдЗрд╕ рд╕рдм рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк Pin<P>
, рддреЛ P
рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдШреБрд╕рдкреИрда рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЧрд╛рд░рдВрдЯреА рд╣реИ рд╕рдВрдЧреНрд░рд╣ред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Unpin
рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЗрд╕ рдЧрд╛рд░рдВрдЯреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк Unpin
рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ Pin
рдХреА рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдЧрд╛рд░рдВрдЯреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ - рдпрд╣ рд╕рдВрднрд╡рдд: рдЗрдВрдЧрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪрд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХреА рддрд░рд╣ рдПрдХ рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ Rc<T>
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ T
рдХреНрдпреЛрдВрдХрд┐ T
рдПрдХ рд╕реВрдЪрдХ рдХреЗ рдкреАрдЫреЗ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ Rc<T>
( Pin<Box<Rc<T>>
) рдореЗрдВ рдкрд┐рди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T
рдкрд┐рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд┐рди рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдкреАрдЫреЗ рдЕрдкрдиреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛ рд░рдЦрддрд╛ рд╣реИ Unpin
рддрдм рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдирдХреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЕрдирдкрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдХреНрд╖рдг рд╣реИ, рддреЛ рдпрд╣ рднреЛрд▓реЗрдкрди рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд┐рди рдХреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд╛рд░рдВрдЯреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдпрд╣ рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдмрд╕реЗ рдкреЗрдЪреАрджрд╛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдЧрд▓рдд рд▓рдЧрд╛ред
рдЕрдирдкрд┐рди рдХрд╛ рдЕрд░реНрде рд╣реИ "рдПрдХ рдмрд╛рд░ рдХреБрдЫ рднреА рдкрд┐рди рдореЗрдВ рдбрд╛рд▓ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдЗрд╕рдХрд╛ рдПрдХ рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред" рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рднреА рдореМрдЬреВрдж рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рдорд╛рди рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ: Drop
ред рддреЛ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ Drop
рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, Unpin
рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддрд╛ рд╣реИ? рдХрд╛рдлреА рдирд╣реАрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрд▓реНрдл рд░реЗрдлрд░реЗрдВрд╢рд┐рдпрд▓ рдЯрд╛рдЗрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХрд┐рд╕реА рдХреЛ рднреА рдХреЗрд╡рд▓ рд╕реЗрд▓реНрдл рд░реЗрдлрд░реЗрдВрд╢рд┐рдпрд▓ рдЯрд╛рдЗрдкреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ: рдЬреЗрдирд░реЗрдЯрд░ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рдлрдВрдХреНрд╢рди рд╕реНрдЯреЗрдЯ рдорд╢реАрдиред рдпреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ Drop
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ Pin<&mut T>
, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА рдПрдХ рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рдЧреБрдордирд╛рдо рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдирдкрд┐рди рдпрд╛ рдбреНрд░реЙрдк рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрди рдЧреБрдордирд╛рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ред Pin<&mut Fuse<Fut>>
рд╕реЗ Pin<&mut Fut>
рдХреНрд░рдо рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди" рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдореБрд╕реАрдмрдд рдореЗрдВ рднрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВ: рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рддреЛ рдЖрдк рдЙрд╕ рдлрд╝реАрд▓реНрдб рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдкрд┐рди рдкреНрд░рдХреНрд╖реЗрдкрдг рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ! рдкрд┐рдирд┐рдВрдЧ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдиреА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдХрдИ рдЪреАрдЬреЗрдВ рдХрднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдерд╛ред
рддреЛ, tl; dr: Drop
рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП Unpin
рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рдмрд╛рдд рдХреЛ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди unsafe
рдФрд░ рдЬреЛ рдХреЛрдИ рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкрд┐рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЬрдирд░реЗрдЯрд░ рдФрд░ async рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреЗрдЯ рдорд╢реАрдиред рдпреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдбреНрд░реЙрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд┐рди <рдФрд░ рдореНрдпреВрдЯ рдЯреА> рд╣реЛрдЧрд╛, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдирдкрд┐рди рдпрд╛ рдбреНрд░реЙрдк рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдПрд╕рд┐рдВрдХреНрд╕ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдореЗрдВ Drop
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдРрд╕реА рдЪреАрдЬреЗрдВ рдЬреЛ async рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рд╕реНрдЯреИрдХ" рдкрд░ рд╣реЛрддреА рд╣реИрдВ (рдЬреЛ рдХрд┐ рд╕рдВрднрд╡рддрдГ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ), рдЬрдм async рдлрд╝рдВрдХреНрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд░рджреНрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╛ рдпрд╣ рдЕрдиреНрдпрдерд╛ рд╣реЛрддрд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреНрдпрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ impl Drop for Foo {тАж}
рдЖрдЗрдЯрдо рдореМрдЬреВрдж рд╣реИ, рдЬреЛ &mut Foo
рдХреЗ рд╕рд╛рде рдХреЛрдб рдЪрд▓рд╛рдПрдЧрд╛ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП mem::replace
рдХрд╛ рдЙрдкрдпреЛрдЧ "рдПрдХреНрд╕рдлрд╝рд┐рд▓реНрдЯрд░" рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ Foo
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдпрд╣ "рдбреНрд░реЙрдк рдЧреНрд▓реВ" рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ ptr::drop_in_place
рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк рдЧреЛрдВрдж Foo
рдкреНрд░рдХрд╛рд░ рдлреЛрди рдХрд░реЗрдЧрд╛ Drop::drop
рдЕрдЧрд░ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХрд░реНрд╕рд┐рд╡рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк рдЧреЛрдВрдж рдХрд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрди рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓реЛрдВ рдореЗрдВ рдХрднреА рднреА &mut Foo
рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдмрдХрд┐ рдПрдХ рдЬрдирд░реЗрдЯрд░ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ async рд░рд╛рдЬреНрдп рдорд╢реАрди) рдореЗрдВ рдХрд╕реНрдЯрдо рдбреНрд░реЙрдк рдЧреЛрдВрдж рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╣реА рд╕реЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдбреНрд░реЙрдк рдХреЗ рджреМрд░рд╛рди рдХрднреА рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЬрд┐рд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорд╛рдирдХ рд╣реИ): "рдбреНрд░реЙрдк рдЧреНрд▓реВ" рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИ рдЬреЛ рдЦреЗрддреЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЪрд▓рдиреЗ, рдЙрдирдХреЗ рд╡рд┐рдирд╛рд╢рдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ; "рдбреНрд░реЙрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" Drop
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдФрд░ "рд╡рд┐рдзреНрд╡рдВрд╕рдХ" рдбреНрд░реЙрдк рдЧреНрд▓реВ рдФрд░ рдбреНрд░реЙрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИред рдбреНрд░реЙрдк рдЧреЛрдВрдж рдХрднреА рднреА рдЪрд╛рд░реЛрдВ рдУрд░ рдирд╣реАрдВ рдШреВрдорддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдбреНрд░реЙрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╡рд╛рдпрджрд╛ рдкрд░ рдирд╛рдорд╛рдВрдХрд┐рдд рдЕрдзреНрдпрд╛рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рд╣реИ? рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕реВрдХреНрд╖реНрдо рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА / рдЦрд░рд╛рдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИрдВ, рд░реЛрд╢рди рд╣реЛрдЧрд╛ред
@Gankro рдЬрд╝рд░реВрд░, рдЖрдк рдореБрдЭреЗ рдЙрд╕рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднреА рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ async рд░рд╕реНрдЯ рдФрд░ рдкрд┐рди рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рджрд┐рдиреЛрдВ (https://github.com/rust-lang-nursery/futures-rs/pull/1315) рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓рд╛ рд╣реИред рдореИрдВ async рдХреЛрдб рдореЗрдВ рдШреБрд╕рдкреИрда рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкрд┐рдирд┐рдВрдЧ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА)ред
рдкреНрд░рдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдЗрди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪрд┐рдВрддрд╛рдПрдБ рдорд┐рд▓реАрдВ:
impl core::future::future::Future+futures_core::future::FusedFuture
рднреАрддрд░, trait std::marker::Unpin
std::marker::Pinned
рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИPin
рдкреНрд░рдХреНрд╖реЗрдкрдг), рд╕реЗ рддрд░реАрдХреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ pin-utils
, рдЬрдм рддрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ 2 рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдореИрдВ рдХреНрдпрд╛ рдЬрд░реВрд░рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ редasync
рдкрджреНрдзрддрд┐ рдФрд░ select
рдХреЗрд╕ рдореЗрдВ рдЕрдкрдиреЗ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдлреНрдпреВрдЪрд░реНрд╕ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП pin_mut!()
рдЬрд░реВрд░рдд рд╣реИред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИредdrop()
рд╡рд┐рдзрд┐ рдЕрдм рдлрд┐рд░ рд╕реЗ рд▓реЗрдиреЗ рдХреЗ &mut self
, рдПрдХ рдХреЗ рдмрдЬрд╛рдп Pin
редPin
рдФрд░ Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рд╕рд╛ рд░рд┐рд╕рд╛рд╡ рд╣реИредdrop()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рдФрд░ 'static
рдмреАрдЪ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрднрд╛рд╕реА рдЬреАрд╡рдирдХрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2 рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ 'pinned
рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЕрдХреНрд╕рд░ C ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдЗрди рдореБрджреНрджреЛрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдореВрд╡ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдЬрдВрдЧрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЬрд┐рд╕рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдХреБрдЫ рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИрдВ (рд╕рднреА рдирд╣реАрдВ, рдЬреИрд╕реЗ drop()
)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд░реБрд╕реНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Future
s рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдХреНрд╕рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рдорддрджрд╛рди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗ? рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдЬреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдВрджреЛрд▓рди рдФрд░ рдорддрджрд╛рди рдЪрд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдПрд▓реЗрдХреНрд╕ Unpin
рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ Unpin
рдорддрд▓рдм рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдФрд░ рдирд╛рдо рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддрд╛ред ThingsInsideDontBreakIfObjectGetsMoved
, DoesntRequireStableAddress
, PinDoesntMatter
, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫред
рдЬреЛ рдореБрдЭреЗ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ, рд╡рд╣ &mut self
Pin<&mut self>
рд╣реЛ рдЬрд╛рдирд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкрд┐рди рдХрд╛ рдЕрд░реНрде рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд╣реА рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╕реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рди рдореЗрдВ рдПрдХреАрдХреГрдд рдПрдХ рдФрд░ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдпрдВ-рд╕рдВрджрд░реНрднрд┐рдд рдкреНрд░рдХрд╛рд░ рднреА рдирд╣реАрдВ рдЯреВрдЯрддреЗ рд╣реИрдВред Pin
рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рдХрдВрдкрд╛рдЗрд▓рд░-рдЬрдирд░реЗрдЯ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдЪреНрдЪреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рднреА рдареАрдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд┐рдирдб рдХреЙрд▓ рдХреЛ рдЙрдкрдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдорддрджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЦреЗрддреЛрдВ рдореЗрдВ рдкрд┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреИрддрд┐рдХрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ (рдХреНрдпрд╛ рдкрд┐рди рдЕрднреА рднреА рд╡реИрдз рд╣реИ?) рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рдпрджрд┐ рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕рд░рд▓ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рди рдЪреАрдЬреЛрдВ рдХреА рдкрд┐рдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрд╕рд┐рдВрдХреНрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Pin
рдпрд╛ Unpin
рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХреЗред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП async / select / join рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ combinators рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд░рдЦреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдкрд░: "рд╕реНрдЯреИрдХ" рдЙрдзрд╛рд░ рдХреЗ рд╕рд╛рде async / рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИ! рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреИрд╕реЗ рдШреБрд╕рдкреИрда рд╕рдВрдЧреНрд░рд╣, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдЧреБрдард▓реА рдЬреИрд╕реЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдорд╛рдЗрдирд░ рдирд╛рдЗрдЯ wrt рд╕реНрдерд┐рд░реАрдХрд░рдг рд░рд┐рдкреЛрд░реНрдЯ:
fn get_unchecked_mut(self) -> &'a mut T
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ unsafe fn
?
@ Matthias247 рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ Pin<P<T>>
рд╕реЗ T & Un рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ T рдЕрдирдкрд┐рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд┐рд░ рдЖрдк T рдХреЛ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mem::swap
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрдЧрд╛ред
рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдЦреБрдж рдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ, рд╡рд╣ рд╣реИ рдЬреЛ рдлреНрдпреВрдЪрд░ рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдмрдирд╛рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рди рдХреЛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдкрд┐рдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлреНрдпреВрдЪрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рддрд╛ рд╣реИ, Iterators рд╕реЗ рдЕрд▓рдЧ рд╣реИ?
рдХреНрдпрд╛ рдкреЛрд▓ рдФрд░ рдореНрдпреБрдЯ рд╕реЗрд▓реНрдл рдХреЛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ Pin<P>
рдкреНрд░рдХрд╛рд░реЛрдВ рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Future рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Unpin рд╣реИрдВ?
рдореИрдВ рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд┐рди рд▓реЗрддрд╛ рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ Pin
рдкрд░ рдЧреБрдо рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ,
impl<'a, T: ?Sized> Pin<&'a T> {
fn map<U: Unpin, F: FnOnce(&T) -> &U>(self, f: F) -> Pin<&'a U>
}
impl<'a, T: ?Sized> Pin<&'a mut T> {
fn map<U: Unpin, F: FnOnce(&mut T) -> &mut U>(self, f: F) -> Pin<&'a mut U>
}
рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ pin_utils::unsafe_unpinned!
рдореИрдХреНрд░реЛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ _why_ рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╣ рдореИрдХреНрд░реЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо !Unpin
рдФрд░ Unpin
рдлрд╝реАрд▓реНрдб рд╣реИрдВ, рддреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛?
рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд┐рдирд╛ !Unpin
Unpin
рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг), рдлрд┐рд░ рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ &mut
рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрд╕реА рддрд░реНрдХ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ !Unpin
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдХрдЪреНрдЪрд╛ рд╕реВрдЪрдХ рд▓реЗрдиреЗ рд╕реЗ рдЖрдк рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдкрд┐рд╕ред
рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Pinned
рдкрд░ рдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ Unpin
рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ !Unpin
Pinned
рд╕рдордЧреНрд░ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП
pub struct MustPin<T: Unpin>(T, Pinned);
impl<T: Unpin> MustPin<T> {
pub const fn new(t: T) -> Self { ... }
pub fn get(self: Pin<&Self>) -> *const T { ... }
pub fn get_mut(self: Pin<&mut Self>) -> *mut T { ... }
}
рдпрд╣ рд╕рдм рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ futures-rs
рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рд╕реЗ рдХреБрдЫ рдЕрд╕рдорд╛рдирддрд╛ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдВрдЪ рджреЗрдЧрд╛), рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди usecases рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдХрд╕реНрдЯрдо !Unpin
рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ рдШреБрд╕рдкреИрда рд╕рдВрдЧреНрд░рд╣) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рд╢рд╛рдпрдж рдХреБрдЫ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
@ Nemo157 рдЙрди рдирдХреНрд╢рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ mem::swap
рдкрд░ &mut T
рд╕рдорд╛рд░реЛрд╣ рдПрдХ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЧреБрдЬрд░рддрд╛ &mut U
ред (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд╕реНрдкрд░ рдПрдХ рд╣реИ, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд┐рди-рдмрд░реНрддрдиреЛрдВ рдХрд╛ рдореИрдХреНрд░реЛ рдЕрд▓рдЧ рд╣реИ, unsafe_unpinned
doesnt рдХрд╛ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ Unpin
, рдЗрд╕рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ "рдЕрдирдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг" рд╣реИ - &mut Field
рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдгред !Unpin
ред
рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдЦреБрдж рдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ, рд╡рд╣ рд╣реИ рдЬреЛ рдлреНрдпреВрдЪрд░ рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдмрдирд╛рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рди рдХреЛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдкрд┐рдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлреНрдпреВрдЪрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рддрд╛ рд╣реИ, Iterators рд╕реЗ рдЕрд▓рдЧ рд╣реИ?
рдХреЛрдИ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИрдВред рдПрдХ рдХреЗ рд▓рд┐рдП, Iterator
рд╕реНрдерд┐рд░ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрдм рддрдХ рд╣рдо рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЪрддреБрд░ рд╕рдордЭ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЖрдк рдХрднреА рднреА рдПрдХ рдбрдмрд▓-рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрд╡-рд╕рдВрджрд░реНрдн рдЬрдирд░реЗрдЯрд░ рдкрд░ for
рд▓реВрдк рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрднреА рдирд╣реАрдВ рд╣рд┐рд▓рд╛рдПрдЧрд╛)ред
рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Iterator
рдФрд░ Future
рдмреАрдЪ рдХреЛрдб рдкреИрдЯрд░реНрди рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдмрд┐рдВрджреБ рдкрд░ рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдмрд┐рдирд╛ 10 рдорд┐рдирдЯ рддрдХ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд╛рдпрджрд╛ 0.1 рдкрд░ рдЖрдк рдЗрди Arc
рд╕рднреА рдЬрдЧрд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЗрдВ рдХрд░ рд╕рдХреЗрдВ and_then
рдХреЙрд▓ред рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдкрд░ рд╕реНрд╡-рд░реЗрдлрд░реЗрдВрд╢рд┐рдпрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ ред
рдЙрди рдирдХреНрд╢рд╛ рдХрд╛рд░реНрдпреЛрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
mem::swap
рдкрд░&mut T
рд╕рдорд╛рд░реЛрд╣ рдПрдХ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЧреБрдЬрд░рддрд╛&mut U
рдЖрд╣, рд▓рд╛рдирдд рд╣реИ, рдЙрд╕рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛: frowning:
fn as_mut(&mut self) -> Pin<&mut P::Target>
fn in_ref (рд╕реНрд╡рдпрдВ) -> рдкрд┐рди <рдФрд░ 'a T> `
рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ as_pinned_mut
рдФрд░ into_pinned_ref
рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╡реЗ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рди рд╣реЛрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ?
рд╕реНрдЯреИрдореНрдк рдореЗрдВ рдЕрдирдкрд┐рди рдХреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ impl<P> Unpin for Pin<P> {}
редрд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИ?
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЖрдк рдЕрдкрдиреА рд╕реВрдЪреА рдореЗрдВ рд╣реИред ;)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ Drop
рдЧрд╛рд░рдВрдЯреА рдХреЛ рд╕рдВрд╣рд┐рддрд╛рдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╡рд░рдирд╛ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рдПрдЧреА:
рдмрд┐рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░
drop
рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд┐рди рдХреА рдЧрдИ рд╡рд╕реНрддреБ (Pin
рд╕рдВрджрд░реНрдн рдХрд╛ рд▓рдХреНрд╖реНрдп) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрд╡реИрдз рд╣реИред
рдпрд╣рд╛рдВ "рдЕрдорд╛рдиреНрдп" рдХрд╛ рдЕрд░реНрде "рдбреАрд▓рд▓реЛрдХреЗрд╢рди" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдкреБрдирд░реНрдЦрд░реАрдж" рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: x
Ok(foo)
рд╕реЗ Err(bar)
рдмрджрд▓рдиреЗ рдкрд░, foo
рдХрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред
рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ Pin<Box<T>>
, Pin<Rc<T>>
рдпрд╛ Pin<Arc<T>>
рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд┐рдП drop::<T>
рдбреАрд▓ рдХрд░рдирд╛ рдЕрд╡реИрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
Deref
, DerefMut
рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ " Deref
" рдХрд╛ рдЕрд░реНрде "рдпрд╣ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░" рдХреИрд╕реЗ рд╣реИред рд╣рдо "рд╡рд┐рд░рд╛рд╕рдд" рдХреЗ рд▓рд┐рдП Deref
рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗред рдпрд╣ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ рдФрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред : рдбреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдзреНрд╡рдирд┐ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
Unpin
рдмреЗрд╢рд░реНрдо рдкреНрд▓рдЧ: рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рджреЛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреАрдВ, рдЬреЛ рдЖрдкрдХреЛ (рдЕрд░реНрдз-) рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рдордЬрд╛ рдЖрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред ;) рддрдм рд╕реЗ рдПрдкреАрдЖрдИ рдмрджрд▓ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
@ Matthias247 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯреНрд╕ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд┐рдирд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрди рдЕрдореВрд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЛрдореНрдмрд┐рдиреЗрдЯрд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ "рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди" рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ
рдХреНрдпреЛрдВ рдореЗрд░реА рдбреНрд░реЙрдк () рд╡рд┐рдзрд┐ рдЕрдм рдлрд┐рд░ рд╕реЗ рдФрд░ рдкрд┐рди рдХреЗ рдмрдЬрд╛рдп, рд╕реНрд╡рдпрдВ рдХреЛ рд▓реЗ рдЬрд╛рддреА рд╣реИред
рдЦреИрд░, drop()
рдкреБрд░рд╛рдирд╛ рд╣реИ - рдпрд╣ рд░реБрд╕реНрдд 1.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗред рд╣рдо рдЗрд╕реЗ Pin<&mut Self>
, рдФрд░ рдлрд┐рд░ Unpin
рдкреНрд░рдХрд╛рд░ рдЕрдкрдиреЗ &mut
рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдЕрднреА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЧреИрд░-рдмреИрдХрд╡рд░реНрдб-рд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд┐рди рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд▓рдЧрднрдЧ derive
proc_macro рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдореЗрдВ "рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ Drop
рдпрд╛ Unpin
" рд▓рд╛рдЧреВ рди рд╣реЛ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд┐рди рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рд╣реИ: рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рд╣рдо рдпрд╣рд╛рдБ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд┐рди рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ( Unpin
рдЙрдкрд░реЛрдХреНрдд рдЬреЛрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдЧ рдЖрдЗрдЯрдо рдмрдирдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред)
рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ C ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдЬрд╣рд╛рдВ рдЗрди рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЪрд▓ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдЬрдВрдЧрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЪреВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЧрдП рдереЗред рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдЕрдЪреВрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рд╕рднреА рдкреНрд░рдХрд╛рд░ рдЬрдВрдЧ рдореЗрдВ рдЬрдВрдЧрдо рд░рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ T
, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЪреВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдирдП рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб API рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Rust рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ Pin<&mut T>
) рдореЗрдВ рд╣реИрдВ, рди рдХрд┐ рдкреЙрдЗрдиреНрдЯреА рдореЗрдВ ( T
)ред "рдореБрдЭреЗ рдХрднреА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ " рдЕрдЧрд░ рдореБрдЭреЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рддреЛ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рди рдХрд░реЗрдВ"ред рдПрдХ рддреЛ MyFuture
рд╣реИ рдХрд┐ рдореИрдВ рдЦреБрдж рдХреЛ рд╣рдореЗрд╢рд╛ рдЪрд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди Pin<&mut MyFuture>
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рд╣реИ MyFuture
рдХрд┐ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рд▓реЗ рдЬрд╛рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрдлрд╣рдореА рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рдХреБрдЫ рд╕рдордп рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдореЗрдВ рд╕реНрд╡-рд░реЗрдлрд░реЗрдВрд╢рд┐рдпрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐, рдЕрдм рддрдХ, рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдФрд░ impl Iterator for тАж
рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рд░рд╛рдЬреНрдп рдХреЛ рджреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрдЯреНрд░реЗрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдЯреИрдЪ рдХрд░рдиреЗ рдФрд░ &mut self
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд▓реЗ рд╣реА рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░реЗрд░рдгрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЕрдВрддрддрдГ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрдирд░реЗрдЯрд░ yield
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ for
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ yield
рдЙрдзрд╛рд░ рд▓реЗрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬрдирд░реЗрдЯрд░-рдлреНрдпреВрдЪрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЬрдирд░реЗрдЯрд░-рдлреНрдпреВрдЪрд░реНрд╕ рдХреЗ рд▓рд┐рдПред
(
Unpin
рдЙрдкрд░реЛрдХреНрдд рдЬреЛрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдЧ рдЖрдЗрдЯрдо рдмрдирдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред)
Unpin
рдФрд░ Pin
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдЪрд▓ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдВрдЧ рдЖрдЗрдЯрдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ @Gankro рд╕реЗ рд╕рд╣рдордд Pin
рдмрд╛рд░реЗ рдореЗрдВ рдирд╛рдордорд╛рддреНрд░ рдХреА рд╢реИрд▓реА рд╡рд╛рд▓рд╛ рдЕрдзреНрдпрд╛рдп рдФрд░ рдпрд╣рд╛рдБ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИрдВред
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдпрджреНрдпрдкрд┐ рдореИрдВ рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреА рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрдпреЛрдВ рд╣реИ рдпрд╛ рдпрд╣ unsafe
ред рдКрдкрд░ рд╕реЗ рд╕рдордЭ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рдорд┐рд▓ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдЕрдЧрд░ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдореБрдЭреЗ рдпрд╣ рднрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! (рдпрд╛ рдЬрд╣рд╛рдВ рдореЗрд░реА рд╕реЛрдЪ рдЧрд▓рдд рд╣реИ, рд╡рд╣рд╛рдВ рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ)
fn new(P) -> Pin<P> where P: Deref, P::Target: Unpin
Pin<P>
рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдПPin<P>
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ P::Target
рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрднреА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛P::Target
Unpin
рдЬреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ "рдХреА рдЧрд╛рд░рдВрдЯреА"Pin
рдЕрдм рдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣рд╛рдВ рд╕реБрд░рдХреНрд╖рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рдХреЛрдИ рдирд╣реАрдВ рд╣реИunsafe fn new_unchecked(P) -> Pin<P> where P: Deref
unsafe
рдХреНрдпреЛрдВрдХрд┐ P
рдирд╣реАрдВ рд╣реИUnpin
, рдЗрд╕рд▓рд┐рдП Pin<P>
рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПP::Target
Pin<P>
рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рднреА рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛редрдЗрд╕ рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреБрдЪреНрдЫ рддрд░реАрдХрд╛, рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рджрд┐рдЦрддрд╛ рд╣реИ
рдкрд╕рдВрдж:
fn foo<T>(mut a: T, b: T) {
Pin::new_unchecked(&mut a); // should mean `a` can never move again
let a2 = mem::replace(&mut a, b);
// the address of `a` changed to `a2`'s stack slot
}
рдирддреАрдЬрддрди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ Pin<P>
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ
P::Target
рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдХрднреА рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ unsafe
!
fn as_ref(&Pin<P>) -> Pin<&P::Target> where P: Deref
Pin<P>
рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╣рдорд╛рд░реА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ P::Target
рдХрднреА рдирд╣реАрдВ рд╣рд┐рд▓реЗрдВрдЧреЗред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЗPin
рдХреЗ рдЕрдиреБрдмрдВрдз рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрд╕рдХрд╛ рддреБрдЪреНрдЫ рдЕрд░реНрде рд╣реИ&P::Target
, P::Target
рд▓рд┐рдП рдПрдХ рдФрд░ "рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░" рд╕рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛&Pin<P>
рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ Pin<&P::Target>
рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдпрд╣ Pin<SmartPointer<T>>
рд╕реЗ Pin<&T>
рдЬрд╛рдиреЗ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рд╣реИ
fn as_mut(&mut Pin<P>) -> Pin<&mut P::Target> where P: DerefMut
as_ref
рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИредPin
рдкрд░рд╕реНрдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдкреНрд░рд╢реНрди : рдХреНрдпрд╛ "рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг" DerefMut
рдирд┐рд╣рд┐рдд рд╣реИ? рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рджрд╛рди DerefMut
рдЬреЛ &mut P::Target
рдореВрд▓ рд░реВрдк рд╕реЗ,
рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗред рдпрд╣ рдХреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?
fn set(&mut Pin<P>, P::Target); where P: DerefMut
Pin<P>
(рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИUnpin
), рдХреНрдпрд╛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ P::Target
рдХрднреА рдирд╣реАрдВ рдЪрд▓рддреЗ рд╣реИрдВ? рдЕрдЧрд░ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВP::Target
рд╕рд╛рде рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?unsafe fn map_unchecked<U, FnOnce(&T) -> &U>(Pin<&'a T>, f: F) -> Pin<&'a U>
unsafe
рдХрд╛рд░реНрдп рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ "рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред"...
рдкреНрд░рд╢реНрди :: рдпрд╣рд╛рдБ рдкреНрд░рддрд┐-рдЙрджрд╛рд╣рд░рдг рдХреНрдпрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдереЗ, рддреЛ рдХреНрдпрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдЬреЛ Pin
рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реБрдЖ рджрд┐рдЦрд╛рддрд╛ рд╣реИ?
fn get_ref(Pin<&'a T>) -> &'a T
Pin<&T>
рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ T
рдХрднреА рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред &T
рд▓реМрдЯ рд░рд╣рд╛ рд╣реИT
рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПрдПрдХ "рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреЛрдЪрд╛" рдпрд╣рд╛рдБ рдЖрдВрддрд░рд┐рдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ T
рдереЗ
RefCell<MyType>
? рдпрд╣, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
Pin<&T>
рдХреНрдпреЛрдВрдХрд┐ рдЧрд╛рд░рдВрдЯреА рдХреЗрд╡рд▓ T
рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдирд╣реАрдВ
рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░ MyType
ред рдЬрдмрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреА рд╣реИ
рдЖрдВрддрд░рд┐рдХ, рдпрд╣ рдЕрднреА рднреА рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреЗ рдкреАрдЫреЗ рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
&
рд╕рдВрджрд░реНрднред
fn into_ref(Pin<&'a mut T>) -> Pin<&'a T>
Pin<&mut T>
рдорддрд▓рдм рд╣реИ рдХрд┐ T
рдХрднреА рдирд╣реАрдВ рдмрдврд╝реЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрд╕рдХрд╛ рдЕрд░реНрде Pin<&T>
unsafe fn get_unchecked_mut(Pin<&'a mut T>) -> &'a mut T
Pin<&mut T>
рдЕрд░реНрде рд╣реИ рдХрд┐ T
рдХрднреА рдирд╣реАрдВ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ unsafe
T
(рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ) рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ mem::replace
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред unsafe
рдпрд╣рд╛рдБ "рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЖрдкрдХреЛ &mut T
рджреЗ рд░рд╣рд╛ рд╣реВрдБ, рдЖрдкрдХреЛ рдХрднреА рднреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИT
"рд▓реЗ рдЬрд╛рдПрдБредunsafe fn map_unchecked_mut<U, F: FnOnce(&mut T) -> &mut U>(Pin<&'a mut T>, f: F) -> Pin<&'a mut U>
unsafe
рдпрд╣рд╛рдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд╣рдо&mut T
рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реМрдВрдкрдирд╛ (рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ)mem::replace
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╢рд╛рдпрдж рдЕрдиреНрдп рдмреЗрд╡рдлрд╝рд╛ рднреА рд╣реИрдВfn get_mut(Pin<&'a mut T>) -> &'a mut T where T: Unpin
Unpin
рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╣рддрд╛ рд╣реИ " Pin<&mut T>
рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╣реИ&mut T
рдХрд╛ рдПрдХ рдирдпрд╛ рдЖрд╡рд░рдгред рдирддреАрдЬрддрди, рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ&mut T
рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВimpl<P: Deref> Deref for Pin<P> { type Target = P::Target }
as_ref
рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж get_ref
, рдЗрд╕рд▓рд┐рдПimpl<P: DerefMut> DerefMut for Pin<P> where T::Target: Unpin { }
as_mut
рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж get_mut
, рдЗрд╕рд▓рд┐рдПimpl<T: ?Sized> Unpin for Box<T>
(рдФрд░ рдЕрдиреНрдп рд╕реВрдЪрдХ-рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди)
Box<T>
Unpin
рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рд╣реЛрдЧреАT
рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ Unpin
ред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдБ рдкрд░ рднреА рд╕рдВрд╣рд┐рддрд╛рдмрджреНрдз рд╣реИT
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ Unpin
, Box<T>
рдФрдЬрд╛рд░ Unpin
редрдкреНрд░рд╢реНрди : рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рддреЛ unsafe
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред
@ Matthias247 рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд┐рди рд╕реЗ рдореНрдпреВрдЯ рдЯреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
> рдпрджрд┐ T рдЕрдирдкрд┐рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЖрдк рдореЗрдо рдХреЛ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП :: рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рдж! рд╣рд╛рдВ, рдЪреВрдВрдХрд┐ swap
рдХреЛрдИ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, Unpin
swap()
рдЬреЛрдбрд╝рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рдЕрдм рддрдХ рдХреЗ рд╕рднреА рдХреЛрдб Unpin
рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╡реИрд╕реЗ рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдЯреВрдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрднреА рднреА рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рднреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ Pin<T>
рдХрдИ рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╣рд┐рддрд╛рдмрджреНрдз рдХрд░рддреА рд╣реИ: рдЯреА рдХрд╛ рдкрддрд╛ рд╕реНрдерд┐рд░ рд╣реИ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдЧрд╛рд░рдВрдЯреА рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ (рдпрд╣ рдХреБрдЫ рдореЗрдВ рд╕реНрдерд┐рд░ / рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рд╕реНрдерд┐рддрд┐рдпреЛрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ)ред
рдпрд╣ рдореБрдЭреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб / рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛, рдЬрд╣рд╛рдВ Pin
рдЖрдзрд╛рд░рд┐рдд рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ poll
s рдЦреЗрддреЛрдВ рдкрд░) рдЙрди рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдиреБрдорд╛рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╕рднреА рдорд╛рдорд▓реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЕрдм рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИ: рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрдм drop()
рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ рдкрддрд╛ рдХрд╣реАрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП drop(Pin<T>)
рдЕрдзрд┐рднрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
@RalfJung рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордЭ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЙрди рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ Unpin
рдФрд░ рдкрд┐рди рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдо рдлреИрд╢рди рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ Unpin
рдлреНрдпреВрдЪрд░реНрд╕ рдкрд░), рдЬреЛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдЕрдЧрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЕрднреА рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо Unpin
рд╕реАрдорд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░ рдкрд┐рди рдкреНрд░рдХрд╛рд░ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдВрддрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реВрдВред рдФрд░ рдШреБрд╕рдкреИрда рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдпрджрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рдЬрдВрдЧрдо рд╕реЗ рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рд╣реИред рдЕрдЧрд░ рд╡рд╣ рддрд░реАрдХрд╛ рдкрд┐рди рдПрдкреАрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддреЛ рднреА рдХреЛрдИ рдЬреАрдд рдирд╣реАрдВ рд╣реЛрдЧреАред
T: Unpin
mem::swap
рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡реЗ рдкрд┐рди рдХреЗ рдЕрдВрджрд░ рди рд╣реЛрдВред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╕реНрд╡реИрдк () рдореЗрдВ рдмрдВрдзреЗ рдЕрдирдкрд┐рди рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рдЕрдм рддрдХ рдХрд╛ рд╕рднреА рдХреЛрдб рдЕрдирдкрд┐рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╡реИрд╕реЗ рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛: рдпрджрд┐ рдЖрдк рдЖрдЬ рдХреЗ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдХреБрдЫ T
рдХрдореА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдкрд░ swap
рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред
рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рдиреЗ рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣рдж рддрдХ рдпрд╣рд╛рдВ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЛ RFC рд░реЗрдкреЛ рдореЗрдВ рдЗрди рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдФрд░ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rfcs/pull/1858 рджреЗрдЦреЗрдВред
Https://github.com/rust-lang/rfcs/pull/2349 рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдпрд╣рд╛рдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдирд╛рд╡ рдХреА рдмреНрд▓реЙрдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреА рдЫрд╛рдк рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред (рддрд┐рдерд┐рдпреЛрдВ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдЧрднрдЧ 10 рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдореЗрдВ рд╣реИ!)
рдпрд╣ рднреА рдореЗрдо :: рд╕реНрд╡реИрдк рдПрдХ рд▓рд╛рд▓ рд╣реЗрд░рд┐рдВрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдЪрдореБрдЪ рд╣реИ
let temp = *a;
*a = *b;
*b = temp;
@Gankro рдХреНрдпрд╛ рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? Afaik рдпрд╣ рд╕рдЪрдореБрдЪ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ T: Unpin
mem::swap
рдЬреЛрдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЬрдВрдЧрд▓реА рдореЗрдВ рд╕рднреА mycrate::swap
fns рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
рдЯреА рдЬреЛрдбрд╝рдирд╛: рдореЗрдо рдХреЗ рд▓рд┐рдП рдЕрдирдкрд┐рди рдХрд░реЗрдВ :: рд╕реНрд╡реИрдк рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдкрд┐рди рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЕрдирдкрд┐рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЙрд╕реА рддрд░рд╣ рд╕реЗ Sync
/ Send
рд╣реИрдВ) рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛: рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЯреА рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХреЗ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдкрд░ рд╕реНрд╡реИрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╣реИ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрдВрдЧ рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рдиреЗ рдЧреИрд░-рдЬрдВрдЧрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рдлреА рд╣рдж рддрдХ рдпрд╣рд╛рдБ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЛ RFC рд░реЗрдкреЛ рдореЗрдВ рдЗрди рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдФрд░ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 1858 рджреЗрдЦреЗрдВред
рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХрд╛рдо рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдкрдврд╝реВрдВрдЧрд╛ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдорд┐рд▓ рдЬрд╛рдПред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдореЗрдВ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдореИрдВ рдЕрдкрдиреА рдЪрд┐рдВрддрд╛рдУрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
@ Matthias247
рдпрджрд┐ рдЕрдирдкрд┐рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ (рдЙрд╕реА рдлреИрд╢рди рдореЗрдВ рд╕рд┐рдВрдХ / рд╕реЗрдВрдб рд╣реИрдВ) рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдерд╛ред рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ !Unpin
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ mem::swap
рд▓рдЧрднрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдкрд┐рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж T: !Unpin
рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рдд Pin<P<T>>
ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, async / рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдХреЛрдб рдореЗрдВ, рдЖрдк async рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рджрд┐рдП рдЧрдП рд╡рд╛рдпрджрд╛ рдХреЛ рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдЙрддрдирд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк pin_mut!
рдПрдХ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ Pin<Box<..>>>
рдпрд╛ whatnot рдореЗрдВ рдбрд╛рд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рд╢реНрди рд╣реИрдВ:
Pin<T>
async
рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрдм рдЬрдВрдЧ рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ (рдЬреИрд╕реЗ swap
replace
) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдИ рднреА рд╣реИ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди (рдЬреИрд╕реЗ @jhjourdan рдпрд╛ @RalfJung рджреНрд╡рд╛рд░рд╛) рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд┐рдирд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдХреНрдпрд╛ рдпрд╣ рдПрдкреАрдЖрдИ Rust рдХреА рдЕрдореВрд░реНрдд рдорд╢реАрди / рдкрд░рд┐рдЪрд╛рд▓рди рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдирдИ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ? Ie, рдЕрдЧрд░ рд╣рдо async
& await
/ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдЯреЛрдХрд░рд╛ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрд┐рдП рдЧрдП рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рджреЗ рд╕рдХрддрд╛ рд╣реИ?
рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ? (рдпрд╣ рд╕рд╡рд╛рд▓ 2 рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ)
рдЯреВ-рдмреА-рд╕реНрдЯреЗрдмреНрд▓рд╛рдЗрдЬреНрдб рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд░рд╛рд╕реНрддреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП &pin T
рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ (рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ)ред
рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдорд┐рд╢реНрд░рд┐рдд рдиреЛрдЯ рд╣реИрдВ:
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХрд╛рдлреА рд╡рд┐рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред :(
рдореИрдВ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд╛рдлреА рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░ / рдЬрдЯрд┐рд▓ рд╣реИред
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ Unmovable
рдЙрджрд╛рд╣рд░рдг рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ unsafe
; рдпрд╣ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд▓рдЧрддрд╛ рд╣реИред рдХреНрд░рдорд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рдЖрд░рдПрдлрд╕реА рдХреЛ рднрд╛рд╖рд╛
struct Unmovable<'a> {
data: String,
slice: &'a str,
}
let um: Unmovable<'_>;
um.data = "hello".to_string();
um.slice = &um.data; // OK! we borrow self-referentially.
drop(um); // ERROR! `um.slice` is borrowing `um.data` so you cannot move `um`.
// You won't be able to take a &mut reference to `um` so no `swap` problems.
рдЗрд╕рдореЗрдВ рд╢реВрдиреНрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, std API рд╕реНрдЯреИрдХ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
pub fn using_pin<T, R, F>(value: T, f: F) -> R
where F: for<'a> FnOnce(Pin<&'a mut T>) -> R {
pin_mut!(value); // Actual implementation inlines this but the point is this API is safe as long as pin_mut! is safe.
f(value)
}
рдореИрдВ рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмрд╣реБрдд рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ:
Pinned
рдкреНрд░рдХрд╛рд░ рдПрдХ ZST рд╣реИ рдЬреЛUnpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
Unpin
рдХреЗ рдСрдЯреЛ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдерд┐рд░ рдкрд░ рджрдмрд╛рдПрдВ, рдЬрд╣рд╛рдВ!Unpin
рдирд┐рд╣рд┐рдд рд╣реИ
рдЕрднреА рддрдХ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ !Unpin
рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ?
рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬрдм рдлреВ (рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░) repr (рдкреИрдХ) рдирд╣реАрдВ рд╣реИ,
рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЦреЗрддреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
рдХреНрдпрд╛ рдкреИрдХреНрдб рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдереЛрдбрд╝рд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП llvm рдХрднреА рднреА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдЗрд╕реА рддрд░рд╣ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдореМрдЬреВрдж рдорд╛рди рдХреЛ llvm рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп!
@Centril Ralf рдиреЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдкрд┐рди
рдкрд┐рди рдПрдкреАрдЖрдИ рдореЗрдВ рдХреЛрдИ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдерд╛, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рднрд╛рд╖рд╛ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХреЛрдИ рдЕрд╕рд░ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред
Pin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╕реНрдЯ рдХреА рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЪрддреБрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ: рдПрдкреАрдЖрдИ unsafe
рднрд╛рдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред Pin
рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ ( DerefMut
) рдЕрд╕реБрд░рдХреНрд╖рд┐рдд, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдХреБрдЫ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ (рдЬреЛ рд╡реЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ) рдФрд░ рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдпрд╣ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕реА рдЯреНрд░рд┐рдХ рдХрд╛ рдПрдХ рд╕рдорд╛рди, рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рдЙрджрд╛рд╣рд░рдг String
, рдЬреЛ рдЧреИрд░-UTF8 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп рдХреЛрдб рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ String
рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рд╣реИред UTF8ред
рд╡рд╣рд╛рдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреНрдпреЛрдВ рд╣реИ? Unpin рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрди рдПрдкреАрдЖрдИ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВред
,ЁЯдж that рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдзрдиреНрдпрд╡рд╛рджред
@alexcrichton рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдХреБрдЫ рдорд╣рд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рдЬрдЧрд╣ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЦреЛ рдЬрд╛рдПрдЧреА!
рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ:
as_mut
: рдкреНрд░рд╢реНрди: рдПрдХ "рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг" DerefMut рдирд┐рд╣рд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рджрд╛рди DerefMut рдЬреЛ рдЯреЛрдХрд░рд╛ рдФрд░ рдореНрдпреВрдЯ P :: рд▓рдХреНрд╖реНрдп рдореВрд▓ рд░реВрдк рд╕реЗ,
рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗред рдпрд╣ рдХреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?
рдЕрд╕рд▓ рдореЗрдВ, рдЬрдм рдЖрдк new_unchecked
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Deref
рдФрд░ DerefMut
рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВред
set
: рджрд┐рдпрд╛ рдкрд┐рди(рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ
рдЕрдирдкрд┐рди), рдХреНрдпрд╛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ P :: рд▓рдХреНрд╖реНрдп рдХрднреА рднреА рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ? рдЕрдЧрд░ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрд┐рд╕реА рдЕрдиреНрдп P :: рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдФрд░ рд╡рд╣ рд╕рдм рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?
рдпрд╣ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдбреНрд░рд╛рдк рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдирдпрд╛ рдХрдВрдЯреЗрдВрдЯ рдбрд╛рд▓рддрд╛ рд╣реИред "рдкрд┐рди рдХрд┐рдпрд╛ рд╣реБрдЖ" рдХрд╛ рдорддрд▓рдм "рдХрднреА рдирд╣реАрдВ рдЧрд┐рд░рд╛рдпрд╛ рдЧрдпрд╛" рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рдХрднреА рднреА рдЧрд┐рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛"ред рдЗрд╕рд▓рд┐рдП drop
рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдбреНрд░реЛрдк рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдирд╛ рдареАрдХ рд╣реИред drop
рдХреЙрд▓ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣реА рдбреНрд░реЙрдк рдЧрд╛рд░рдВрдЯреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рдЪрд▓рддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ?
map_unchecked
: рдкреНрд░рд╢реНрди :: рдпрд╣рд╛рдБ рдкреНрд░рддрд┐-рдЙрджрд╛рд╣рд░рдг рдХреНрдпрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдереЗ, рддреЛ рдХреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдкрд┐рди рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ?
рдПрдХ рдЙрджрд╛рд╣рд░рдг Pin<&&T>
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛ рдФрд░ Pin<&T>
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдкрд┐рдирд┐рдВрдЧ "рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ" рдкреНрд░рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
get_ref
: рдПрдХ "рд╢рд╛рдпрдж gotcha" рдпрд╣рд╛рдБ рдЖрдВрддрд░рд┐рдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдЕрдЧрд░ рдЯреА рдереЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛
RefCell?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдЧреЛрдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдХ рдзреНрд╡рдирд┐ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ , рдпрд╣ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ Pin<RefCell<T>>
рд╕реЗ Pin<&[mut] T>
ред рдЕрд╕рд▓ рдореЗрдВ, рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ RefCell
рдкрд┐рдирд┐рдВрдЧ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо impl<T> Unpin for RefCell<T>
ред
рдХреНрдпрд╛ рдХреЛрдИ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди (рдЬреИрд╕реЗ @jhjourdan рдпрд╛ @RalfJung рджреНрд╡рд╛рд░рд╛) рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╡реИрд░рд┐рдПрдВрдЯ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдирд╣реАрдВ, рд╣рдорд╛рд░реА рддрд░рдл рд╕реЗ рдирд╣реАрдВред рдЬрд┐рди рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯреЛрдВ рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЙрдирдореЗрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдПрдХ рдЯрд╛рдЗрдо рдорд╢реАрди рдпрд╛ рдЗрдЪреНрдЫреБрдХ рдкреАрдПрдЪрдбреА рдЫрд╛рддреНрд░ рджреЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗред ;)
рдпрджрд┐ рд╣рдо async рдФрд░ рдЗрдВрддрдЬрд╛рд░ / рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдерди рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдЯреЛрдХрд░рд╛ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрддрдорд╛рди рдЧрд╛рд░рдВрдЯреА рд╣рдо рджрд┐рдпрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ?
рдпрд╣реА рдЗрд░рд╛рджрд╛ рд╣реИред
рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ? (рдпрд╣ рд╕рд╡рд╛рд▓ 2 рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ)
рдЙрд╣, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрдзрди рдХрд╛ рд╕реНрдерд╛рди рдЕрднреА рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрдпрд╛рдореА рднреА рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрдпрд╛рди рджреЗрдиреЗ рдХрд╛ рд╕рд╛рд╣рд╕ рдХрд░реВрдВрдЧрд╛ред
рдЯреВ-рд╕реНрдЯреИрдмрд▓рд╛рдЗрдЬреНрдб рдПрдкреАрдЖрдИ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреАрд▓реНрдб рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдкрд┐рди рдкреНрд░рдХрд╛рд░ рдФрд░ (рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛)ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ &pin T
, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирдП рд╕рд╛рдорд╛рдиреНрдп Pin<T>
рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдореЗрдВ " Unpin
рдФрд░ Drop
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрднрд╡рддрдГ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп "рдлрд╝реАрд▓реНрдб рдкреНрд░реЛрдЬреЗрдХреНрд╢рди" рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рд╡рд╣ рдЬреЛ &Cell<(A, B)>
рд╕реЗ &Cell<A>
ред
рд╡рд╣рд╛рдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреНрдпреЛрдВ рд╣реИ? Unpin рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
AFAIK рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг рдХреА рдХреБрдЫ рд▓рдВрдмреА-рдЪреМрдбрд╝реА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЙрдирдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛рдПрдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдЕрдХреНрд╕рд░ рдЖрдкрдХреЗ рд╕реЛрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред (рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛рдПрдБ рдХрднреА-рдХрднреА рдХреЗрд╡рд▓ рдЕрдирджреЗрдЦрд╛ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдпрд╛ рддреЛред)
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рдХ рдпрд╣ рд╕рдм рдареАрдХ рдХрд░ рджреЗ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реЛ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╣рдо рд╢рд╛рдпрдж рдЪрд╛рдХ рдкрд░ рдЗрд╕реЗ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдХреНрдпрд╛ рдкреИрдХреНрдб рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдереЛрдбрд╝рд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИред
рдпрд╣ рдПрдХ рдкреИрдХ рдХреНрд╖реЗрддреНрд░ рдкрд░ drop
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдзреНрд╡рдирд┐ рддрд░реАрдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП drop
рдПрдХ рд╕рдВрдпреБрдХреН рдд рд╕рдВрджрд░реНрдн рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП llvm рдХрднреА рднреА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдЗрд╕реА рддрд░рд╣ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдореМрдЬреВрдж рдорд╛рди рдХреЛ llvm рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдПрд▓рдПрд▓рд╡реАрдПрдо рдирдХрд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рдореВрд╡рд┐рдВрдЧ" рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдПрдХ рддрд░рд╣ рд╕реЗ рд░реБрд╕реНрдд рдореЗрдВ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдХреЗрдд рдЕрдм рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред LLVM рдбреЗрдЯрд╛ рдХреЛ рдХрд╣реАрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдЯреИрдХ рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдкрддрд╛ рд▓рд┐рдпрд╛ рд╣реИред
рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж @RalfJung , рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ! рдХреБрдЫ рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди ...
рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдХрднреА рдирд╣реАрдВ рдЧрд┐рд░рд╛рдпрд╛ рдЬрдм рддрдХ", рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Drop
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ &mut self
Pin<&mut Self>
рдХреЗ рдкрддреЗ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╕рд╣реА, рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
set
рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдкреИрдирд┐рдХ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдбрдЧреИрди рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИред
рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдХрднреА рдирд╣реАрдВ рдЧрд┐рд░рд╛рдпрд╛ рдЬрдм рддрдХ", рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐
Drop
рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ&mut self
Pin<&mut Self>
рдХреЗ рдкрддреЗ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╕рд╣реА, рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@alexcrichton рдореЗрд░реА рд╕рдордЭ рдпрд╣ рдереА рдХрд┐ Drop::drop
рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд╛рдж рдХрднреА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖред рдЕрдиреНрдпрдерд╛ рдХреБрдЫ usecases (рдШреБрд╕рдкреИрда рд╕рдВрдЧреНрд░рд╣ рдФрд░ рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрд┐рдд DMA рдмрдлрд╝рд░реНрд╕ рдХрдо рд╕реЗ рдХрдо) рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреБрдЫ рдкрд░ рдХрднреА рднреА рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдЧрд░ рд╡реЗ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ Pin
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗрд╡рд▓ рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЙрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рд╣реИ рддреЛ рдЙрд╕реЗ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреЛрдб рдпрд╣ рдирд╣реАрдВ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░- рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╡рд┐рдирд╛рд╢рдХрд░реНрддрд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЖрдк рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред
рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдЬрдм рддрдХ рдирд╣реАрдВ рдЧрд┐рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ", рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреНрд░реЙрдк рдХреЛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдФрд░ рдкрд┐рди рдХреЗ рдкрддреЗ рд╕реЗ <рдФрд░ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╕рд╣реА, рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рддрдХ drop
рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рддрдм рддрдХ рдбреЗрдЯрд╛ рдХрднреА рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ (рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреА, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ)ред рдФрд░ рд╣рд╛рдВ, drop
рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдкрд░ рдЪрд▓рдиреЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╣ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред drop
рдХреЛ Pin<&mut self>
(рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП) рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред
drop
рдХрд╣реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рд╕рд┐рд░реНрдл рдЕрд░реНрдерд╣реАрди рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдирдпрд╛ рд╕рд╛рдорд╛рди рд╡рд╣рд╛рдВ рд░рдЦреЗрдВ, рдбреАрд▓рд▓реЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рднреА рд╣реЛред
рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШреБрд╕рдкреИрда рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪреА рдЬрд╣рд╛рдВ рдПрдХ рддрддреНрд╡ рдХрд╛ рд╡рд┐рдирд╛рд╢ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдЙрд╕ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рдмрд┐рдирд╛ рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдПрдЧреАред (рддрддреНрд╡ рдЕрднреА рднреА рд▓реАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдмрд╕ рдЙрд╕ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рд╡реИрдз рдореЗрдореЛрд░реА рд░рд╣реЗрдЧрд╛ рддрд╛рдХрд┐ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рди рд╣реЛред)
рдореИрдВ рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ Pin
, Unpin
, рдФрд░ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЬрдм рдореИрдВрдиреЗ _think_ рдХреЛ рд╕рдордЭрд╛, рддреЛ рдЕрдм рдмрд╣реБрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ, рдореИрдВ рдбреЙрдХреНрд╕ рдореЗрдВ std::pin
рдпрд╛ Pin
рдФрд░ Unpin
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХрдо рдЪрд░реНрдЪрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛:
рдбреЙрдХреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:
Pin
рдХреЗрд╡рд▓ "рдПрдХ рд╕реНрддрд░ рдЧрд╣рд░реЗ" рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИредPin::new_unchecked
Deref
DerefMut
рд▓рд┐рдП рдирд┐рд╣рд┐рддрд╛рд░реНрде рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреА рд╣реИредPin
рдФрд░ Drop
рдХреЗ рдмреАрдЪ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ред!Unpin
рдХреЛ рдХреЗрд╡рд▓ Pin
рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИредPin<Box<T>>: Unpin where T: !Unpin
рд▓рд┐рдП рддрд░реНрдХред рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП "рд╡рди рд▓реЗрд╡рд▓ рдбреАрдк" рдкреНрд░рддрд┐рдмрдВрдз рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрдЪрд┐рдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛редрдореБрдЭреЗ @alexcrichton рдХрд╛ рдХрд╛рдЙрдВрдЯрд░-рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд▓рдЧрд╛ред рдкрд╛рдардХ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рджреЗрдирд╛ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ unsafe
рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА (рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдПрдкреАрдЖрдИ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рд╕рдВрднрд╡рддрдГ std::pin
рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рдбреЙрдХреНрд╕ рд╕реЗ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЕрднреА рддрдХ рдЗрд╕ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддрдХрдиреАрдХреА рдирд┐рд░реНрдгрдп рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдЕрдм рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо Pin
, Pinned
рдФрд░ Unpin
рдмрд╣реБрдд рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ / рд▓рдХреНрд╖рдг рдФрд░ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ API рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ)ред
рд╡реЗ рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХреНрд░рд┐рдпрд╛рддреНрдордХрддрд╛ рдФрд░ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Pinned
- рднреНрд░рд╛рдордХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд╛рди рд╢рдмреНрдж Pin
ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ PhantomData
рдЬреИрд╕реЗ рдореЗрдЯрд╛ рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреИрд╕реЗ PinnedData
, PhantomPinned
, PhantomSelfRef
рдпрд╛ DisableUnpin
? рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдФрд░ / рдпрд╛ рдЗрд╕рдХреЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИредUnpin
- рдЬреИрд╕реЗ https://github.com/rust-lang/rust/issues/55766#issuecomment -437266922, рдореИрдВ Unpin
рдХреЗ рдирд╛рдо рд╕реЗ рднреНрд░рдорд┐рдд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ "рдЕрди-рдкрд┐рди" "рдХрдИ рдЕрд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред IgnorePin
, PinNeutral
рд╢рд╛рдпрдж рдХреБрдЫ?рдЖрдо рддреМрд░ рдкрд░ рдореИрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдЪреНрдЫреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╛рдо рдвреВрдБрдв рд░рд╣рд╛ рд╣реВрдБ ...
PhantomPin рдФрд░ PinNeutral рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреЗ рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдбрд╝рддрд╛рд▓ рдХрд┐рдпрд╛ред
рдмрд╕ рдПрдХ рдХрд╛рдЙрдВрдЯрд░рдкреЙрдЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Unpin
рд╕рд╣рдЬ (рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ) рдкрд╛рдпрд╛ рд╣реИред Pinned
рд╕реАрдзреЗ рд░рдЦрдирд╛ рдХрдард┐рди рд╣реИ, рдмрд╢рд░реНрддреЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рд╣реЛред Pinned
рд╕реЗ NotUnpin
рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдмреЗрд╣рддрд░ рдирд╛рдореЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рд░реНрдердХ рд╡реНрдпрд╛рдпрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рд╣реИ:
Pin
-> Pinned
: рдЬрдм рдЖрдкрдХреЛ Pin
, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ _ _ pinned_, рдФрд░ _remain_ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк _could_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ "рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдкрд┐рди" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Pinned<Box<T>>
рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ Box
рдХреЛ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рд╕рд╛рдорд╛рди рдХреЛредUnpin
-> Repin
: рдЕрдиреНрдп рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рд╕рдВрднрд╡рддрдГ Unpin
рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдардХ рдХреЛ рдпрд╣рд╛рдБ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ Unpin
рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╣реАрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ PinNeutral
@ рдЪрд┐рд╣реНрди-рдЗрдо рдХреЗ рд╕реБрдЭрд╛рд╡ рднреА рдкрд╕рдВрдж рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╣реИредPinned
-> PermanentPin
: рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ Pinned
рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЬрд┐рд╕рдореЗрдВ Pinned
, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ .. рдмрд╕ рдирд╣реАрдВ рд╣реИ Unpin
ред PhantomPin
рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдпрд╣ Pin
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдм Pin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред NotUnpin
рдкрд╛рд╕ рдПрдХ рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред @ рдХрд┐рдореБрдВрдбреА рдХрд╛ PhantomSelfRef
рдмрд╣реБрдд рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ "рдЬрдЯрд┐рд▓" рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдХреЛ "рдПрдХ рдмрд╛рд░ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд░рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдорд╛рдорд▓рд╛ рд╣реИ (рдЬрдм рдЖрдк рдПрдХ рдЖрддреНрдо рд╕рдВрджрд░реНрдн рд╣реИ)ред рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХреЛ PermanentlyPinned
рд░реВрдк рдореЗрдВ рднреА рдЕрднрд┐рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд░реВрдк рдХрдо рдмреБрд░рд╛ рд╣реИредрдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Pinned
рдХрд╛ рдЕрдВрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП NotX
рдЬрд╣рд╛рдВ X
рдЬреЛ рднреА Unpin
рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдирд╛рдо рд░рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред Pinned
рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рдо рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕рдВрд▓рдЧреНрди рдкреНрд░рдХрд╛рд░ Unpin
рд▓рд╛рдЧреВ рди рд╣реЛред (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдФрд░ рдпрджрд┐ рд╣рдо Unpin
рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рджреЛрд╣рд░рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ)
Repin
рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд╣реАрдВ рдФрд░ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" "рдпрд╣ рдкреНрд░рдХрд╛рд░ рдПрдХ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИред
@tikue рдХреБрдЫ рдЕрд░реНрдереЛрдВ рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд░рд┐рд╡рд░реНрд╕ рдореЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рдиреЗрдЧреЗрдЯрд┐рд╡ рдореЗрдВ "" рдпрд╣ _not_ Pin
рд╡рд┐рд╡рд╢ рд╣реИ, рдЬрдмрдХрд┐ Pinned
рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ "" ___ рдореЗрдВ Pin
рдХрд░рдХреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред s/Unpin/TemporaryPin
, s/Pinned/PermanentPin
?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рдБ, рдореИрдВ Repin
Unpin
рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдмрд╛рдд рджреЗрдЦрддрд╛ рд╣реВрдБред рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ Pin
" Unpin
рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП" рдорд╣рддреНрд╡рд╣реАрди "рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ Unpin
рд╕реБрдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП TemporaryPin
рдКрдкрд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ред
@ рдЬреЛрдВрд╣реВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░рдг рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдкрд░реАрдд Pinned
рдПрдХ рдЧреБрдг рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрд░реНрде рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ:
Unpin -> Escape
Pinned -> NoEscape
рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ .. рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдм рдЖрдкрдХреЛ
Pin<P>
, рддреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдХрд┐P
рдХрд╛ рд▓рдХреНрд╖реНрдп рддрдм рддрдХ рдирд╣реАрдВ рд╣рдЯреЗрдЧрд╛ рдЬрдм рддрдХ рдЗрд╕реЗ рдЧрд┐рд░рд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ред рдЗрд╕рдХрд╛ рдЕрдкрд╡рд╛рдж рдпрджрд┐P
рдХрд╛ рд▓рдХреНрд╖реНрдпEscape
ред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛEscape
рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рднреА рдорд╛рдиреНрдп рд░рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдореЗрдВ рдХреЛрдИ рдЖрдВрддрд░рд┐рдХ рдЖрддреНрдо-рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ), рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВPin
"рдмрдЪ" рдЬрд╛рдиреЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредEscape
рдПрдХ рдСрдЯреЛ-рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛEscape
рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рднреАEscape
ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рд░рд╛рдд рдХреЗ рдкреНрд░рдпреЛрдЧ рдкрд░ рдЗрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗimpl !Escape for T {}
, рдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗNoEscape
рд╕реЗ рдорд╛рд░реНрдХрд░std::phantom
ред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рдмреНрдж "рдмрдЪ" рдХрд╛ рд╕рдВрдмрдВрдз рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрдард┐рди рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдКрдкрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ Pin<P>
_really_ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рдХрд┐ P
рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( Unpin
рдареАрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ _either_ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ P
рдХрд╛ рд▓рдХреНрд╖реНрдп рдЪрд▓рддрд╛ рд╣реИ _or_ P
рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкрддрд╛ рдирд╣реАрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдирд╛рдореЛрдВ рдХреЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ... рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ Unpin
рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдирд╛рдкрд╕рдВрдж рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ impl !Unpin
рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ "рди-рдЕрди-рдкрд┐рди" рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдорд╕реНрддрд┐рд╖реНрдХ-рдЪрдХреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (I рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рдкрд╣рд▓реА рдмрд╛рд░ рдкрд┐рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛", рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЛрд╣рд░реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдордиреБрд╖реНрдпреЛрдВ рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ (рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрд░реЛрдд рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╣ рдореЗрдВ рдЕрдЧрд░ рд░рд┐рдЪрд░реНрдб рд╣рдбрд╕рди рдХреЗ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ) рдХреЗ рдмрдЬрд╛рдп рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
Btw Repin
рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
Pin
рдХреЛ рд╕рдордЭрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдкрд┐рди рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рдЕрдЪрд▓ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред Pinned
рднреНрд░рдорд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд┐рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл Pin
рднрд╛рдЧрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
Pin<P<T>>
рдХреЛ рдкрд┐рди рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдкрд┐рди рдХрд┐рдП рдЧрдП рдорд╛рди рддрдм рддрдХ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддреЗ рдЬрдм рддрдХ рдХрд┐ рдореВрд▓реНрдп рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд┐рди рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдЧреБрдЧрд▓реА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреБрд╢реНрддреА рдореЗрдВ, рдЬрдм рдХрд┐рд╕реА рдХреЛ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд┐рди рд╕реЗ рддреЛрдбрд╝рдХрд░ рднрд╛рдЧрдиреЗ рдХреЛ
рдореБрдЭреЗ Unpin
рдмрдЬрд╛рдп рдЯрд░реНрдо рдПрд╕реНрдХреЗрдк рднреА рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ EscapePin
рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ред
рдпрд╣рд╛рдБ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ!
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд: рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рджреЗрд╢реА рд╡рдХреНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ Pin
рдФрд░ Unpin
рдЕрдзрд┐рдХрд╛рдВрд╢рддрдГ рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ Pin
рдЕрд░реНрде рд╣реЛрддрд╛ рд╣реИ, рдЪреВрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рдкрд░ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ Unpin
рд▓рд┐рдП рд╕рдорд╛рди рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ Pin<&mut T>
рдХрд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ T рдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рд╕реНрдерд┐рд░ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ Unpin
рдпрд╛ рди рд╣реЛред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдЦреЛрд▓рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Unpin
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрдЧреЗ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдирд┐рдВрдЧ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╡реЗ рд╕реНрд╡-рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ @tikue рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рдбрд╝рддрд╛рд▓реА рдХрд╛рдо рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдкреНрд░рдХрд╛рд░ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЙрдирдХреА рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд┐рддрддрд╛ рдХреА рдХрдореА рднреА рдирд╣реАрдВ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдкреВрд░реЗ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдореЗрдВ рдХреЛрдИ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдирд╣реАрдВ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ"ред рддрдм StableOnMoveAfterPin
, рдпрд╛ рд╕рд┐рд░реНрдл StableMove
рдЬреИрд╕рд╛ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рд╛рди рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред
Repin
рдореЗрд░реЗ рд▓рд┐рдП Unpin
рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдЪреАрдЬ рдЕрдирдкрд┐рди рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдЬреЛ рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд▓рдХреНрд╖рдг рдЬреНрдпрд╛рджрд╛рддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ Pin
рдкреНрд░рдХрд╛рд░ рдХрд╛, рдореБрдЭреЗ PinNeutral
рдпрд╛ PinInvariant
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдмреБрд░реА рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИрдВред
Pin
Pinned
, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Pinned
рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рд╕реВрдЪрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдЙрд╕ рд╕рдордп рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИред
@ Matthias247 рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ P::Target
рдХрд╛ рдкрддрд╛ рд╕реНрдерд┐рд░ рд╣реИ рдЕрдЧрд░ P: Unpin
? рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
@ Matthias247
рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ рдкрд┐рди <рдФрд░ рдореНрдпреВрдЯ рдЯреА> рдХрд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЯреА рдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рд╕реНрдерд┐рд░ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдЕрдирдкрд┐рди рд╣реЛ рдпрд╛ рдирд╣реАрдВред
рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? T: Unpin
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
let pin_t: Pin<&mut T> = ...
let mut other_t: T = ...
mem::replace(Pin::get_mut(pin_t), &mut other_t);
// Now the value originally behind pin_t is in other_t
@ рдЬреЛрдВрд╣реВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИред рдореЗрд░рд╛ рддрд░реНрдХ рдпрд╣ рдерд╛ рдХрд┐ рд╡рд╛рдпрджрд╛ рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ poll()
рдкрджреНрдзрддрд┐ рдХреЛ рдЙрд╕реА рдореЗрдореЛрд░реА рдкрддреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдХрд╛рд░реНрдп / рднрд╡рд┐рд╖реНрдп рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рддреЗрдВ рддрдм рд╡рд╛рдпрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрдм рд╡реЗ Unpin
ред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВред
рд▓реЗрдЯреЗрд╕реНрдЯ рдмрд┐рдХреЗрд╢рдбрд┐рдВрдЧ:
Unpin
: MoveFromPin
рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрджрд┐ рдореИрдВ рдЕрднреА рднреА рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИ: рдпрджрд┐ рдкреНрд░рдХрд╛рд░ Pin
, рддреЛ рднреА рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдХрд╣рддрд╛ рд╣реИ рдЬреИрд╕реЗ Unpin
, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рджрд╛рд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрдмрд▓-рдирдХрд╛рд░рд╛рддреНрдордХ !Unpin
рдмрдЬрд╛рдп рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ !MoveFromPin
ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХрдо рд╕реЗ рдХрдо ... рдпрд╣ рдЙрд╣ рд╣реИ, рдкреНрд░рдХрд╛рд░ рдЖрдк рдПрдХ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗред
(рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрдЧрд╣ рд╣реИ: MoveOutOfPin
, MoveFromPinned
, MoveWhenPinned
, рдФрд░ рдЗрд╕реА рддрд░рд╣ред)
Pinned
: рдпрд╣ рддрдм NoMoveFromPin
, рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ !MoveFromPin
рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдлреА рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИред
Pin
рдЦреБрдж: рдпрд╣ рдПрдХ рдЕрдиреНрдп рджреЛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА рдЬрдЧрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ Pin<&mut T>
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ &mut
рдХреЛ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ T
рд╣реИ (рдПрдХ рднреНрд░рдо рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ) рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рд╛рд▓рд┐рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рд╕рдмреВрдд)ред рдЪреВрдВрдХрд┐ Pin
рд╣рд┐рд╕реНрд╕рд╛ &mut
рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ Pinning
рдХрд╣рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдорд┐рд╕рд╛рд▓ рд╣реИ: рдЕрдЧрд░ рд╣рдо рдШрдмрд░рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ Wrapping<i32>
рдмрдЬрд╛рдп Wrap<i32>
ред
рдпреЗ рд╕рднреА рдореВрд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рддрд░реНрдХ рдХрд┐рддрдиреЗ рдирд╛рдЬреБрдХ рд╣реИрдВ, рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рдирд┐рд╡реЗрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдкреБрди :: Repin
, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ
unsafe trait Repin {
unsafe fn repin(from: *mut Self, to: *mut Self);
}
рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ !Unpin
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Vec
-рд╕рдорд╛рди рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрднреА-рдХрднреА рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рдпрд╣ рдЕрднреА рдпрд╛ рдХрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рдХреНрд╖рдг рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдореЗрд░реА рдкрд╣рд▓реА рдЫрд╛рдк рд╣реИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдирд╛рдореЛрдВ рдХреЛ рдХрд╛рдЯрдХрд░:
Pin<P>
-> Pinned<P>
: рдореВрд▓реНрдп рд╕реВрдЪрдХ P
рдЕрдВрдХ рдХреЛ рдЬреАрд╡рди рднрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрд┐рди рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдЧрд┐рд░рд╛ рдирд╣реАрдВ)редUnpin
-> Moveable
: рдореВрд▓реНрдп рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредPinned
(рд╕рдВрд░рдЪрдирд╛) -> Unmoveable
: Pinned
рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдФрд░ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛редрдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ Pin
рдпрд╛ Unpin
рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рдХрд▓реНрдк рд╕рднреА рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдлреА рднреНрд░рд╛рдордХ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдмрд╛рддрдЪреАрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереА, Pin
рдФрд░ Unpin
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рддрд░реНрдХ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ Pinned
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ PhantomPinned
PhantomData
рддрд░рд╣ рдЕрдкрдиреЗ рдкреНрд░реЗрдд рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рднреА рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирдкрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдирд╛рдкрд╕рдВрдж рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╣рд┐рдд рд╣реИред рдЕрдирдкрд┐рди рдЬреЛ "рди-рдЕрди-рдкрд┐рди" рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╕реНрддрд┐рд╖реНрдХ-рдЪрдХреНрд░ (рдореИрдВ рдПрдХ рдкреБрд░рд╛рдирд╛ рдореЙрдбрд▓) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рдареАрдХ рд╣реИ рдпрд╣ рдПрдХ рдмрд╛рд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ", рдЗрд╕рд▓рд┐рдП рдореИрдВ рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдпрд╣ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ !Unpin
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рд╛рде рд╕реЗ рдПрдХ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдЕрддреНрдпрдВрдд рдЖрд▓рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рдкреАрдЫреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдкрд┐рди рд╕рдВрд░рдЪрдирд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ Unpin
рдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Unpin
std
рд╕рднреА рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВред
@woutoutboats рдХреНрдпрд╛ рдЖрдк рдЗрди рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рддрд░реНрдХ рдпрд╣рд╛рдБ рджрд┐рдП рдЧрдП рд╣реИрдВ?
рдпрд╣рд╛рдБ рдПрдХ рдзрд╛рдЧрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ RFC рдереНрд░реЗрдб рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА https://internals.rust-lang.org/t/naming-pin-anchor-move/6864
(рд▓рдВрдЧрд░ рдФрд░ рдкрд┐рди рдирд╛рдордХ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдм Pin<Box<T>>
рдФрд░ Pin<&'a mut T>
)
рдХреНрдпрд╛ рдЕрдирдкрд┐рди рдХреЛ рдЕрдХрд▓реНрдкрдиреАрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХрд▓реНрдкрдиреАрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкрд┐рди рдХреЗ рдЕрдВрджрд░ рд╣реИ, рднрд▓реЗ рд╣реА рдореВрд▓реНрдп рдкрд┐рди рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗред (рдХреНрдпрд╛ рдпрд╣ рднреА рдореЗрд░реА рдУрд░ рд╕реЗ рдПрдХ рд╕рд╣реА рд╕рдордЭ рд╣реИ?)
рдореИрдВрдиреЗ рдХреБрдЫ рдбреЙрдХреНрд╕ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдереНрд░реЗрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдХрд▓реНрдкрдиреАрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред
рдЕрдирдкрд┐рди рдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЪ рд╣реИ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢реИрд▓реА рдЧрд╛рдЗрдб рд╣реИ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд╕рдВрдж рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╡рд┐рд╢реЗрд╖рдг рдирд╣реАрдВ - рдЗрд╕рд▓рд┐рдП Send
, Sendable
ред рдпрд╣ рд╕рд╣реА рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрджрд░реНрд╢ рд╣реИред Unpin
"рдЕрдирдкрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ Pin
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдирдкрд┐рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд┐рди рдХрд┐рдпрд╛ рд╣реИред
рдЬреИрд╕реЗ рдирд╛рдо Move
( "рдЬрдВрдЧрдо," рдирд╣реАрдВ рдпрд╛рдж) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ Unpin
рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдорддрд▓рдм рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ, рдмрд▓реНрдХрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛ рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдкрд┐рди рдкреНрд░рдХрд╛рд░ред рдЖрдк !Unpin
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрдВрдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА Sized
рдореВрд▓реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд╛рдо рдЬреЛ рдкреВрд░реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрд╕рдЯреАрдбреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдЧрд╛ред
рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдврд╝рд╛ред рдЪреВрдВрдХрд┐ рд▓рдХреНрд╖рдг рдХреНрд░рд┐рдпрд╛ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рдг рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ; std::iter::Iterator
, рдХреБрдЫ рд╣реИ рдХрд┐ iterable рд╣реИ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ std::io::Seek
, рдХреБрдЫ рд╣реИ рдХрд┐ seekable рд╣реИ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ std::pin::Unpin
рдХреБрдЫ рд╣реИ рдХрд┐ unpinnable рд╣реИ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ред
@woutoutboats рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреНрдп рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ Escape
рдпрд╛ EscapePin
? рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдкрд╣рд▓реЗ рднреА рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЕрднреА рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рдЧрд╛рд╣реЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░рд░реНрдердХ рд╣реИ ...
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рдд рд╕рдЪ рд╣реИ рдХрд┐ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ Pin
рдФрд░ Unpin
рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреБрдЫ рдкреНрд░рдХрд╛рд░ "рдкрд┐рди" рд╣реИрдВ рдФрд░ рдХреБрдЫ "рдЕрдирдкрд┐рди" рд╣реИрдВ), рдЬрдм Pin
рдХреЛ рд╕рдВрдЬреНрдЮрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Pin
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред Pinning
рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рднрд╛рдЧрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд┐ рд░рд┐рд╕реАрд╡рд░реЛрдВ рдХреЛ self
рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛, рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ: self: Pinning<&mut Self>
ред рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ Pinning<P>
Pin<P>
рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд╛рдпрдХ рдкреВрд░реЗ рдЪрд╛рд░ рд╡рд░реНрдг рд╣реИрдВред
@tikue "рдПрд╕реНрдХреЗрдк" рд╢рдмреНрджрд╛рд╡рд▓реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╛рдЧрдиреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рддрд░рд╣ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдмрд╛рддрдЪреАрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереА, рдкрд┐рди рдФрд░ рдЕрдирдкрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рддрд░реНрдХ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдореБрдЭреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд░рдЧрдбрд╝рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╕рдореБрджрд╛рдп рдХреА рдЕрдиреБрднрд╡ рд░рд┐рдкреЛрд░реНрдЯ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╣реИ? рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Unpin
рд╕рд╛рде рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореБрджреНрджрд╛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рд╕рд╛рде рд╣реА Pinned
рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд╕рд╛рде juxtapositionред
рдЬрдВрдЧ рднрд╛рдЧрдиреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред
рдореИрдВ рдЕрднреА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдЗрд╕ рднреВрдорд┐ рд╕реЗ рдкрд╣рд▓реЗ https://github.com/rust-lang/rust/issues/55766#issuecomment-438316891 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ :)
рдореИрдВрдиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rust/pull/55992 рдХреЛ рдЦреЛрд▓рд╛ рд╣реИ рдФрд░ Pinned
рд╕реЗ PhantomPinned
рдирд╛рдо рдмрджрд▓рд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Pinned
(рдФрд░ PhantomPinned
) рдПрдХ "рдкрд┐рди рдХрд┐рдП рдЧрдП" рдореВрд▓реНрдп рдХреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Pin
рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Pin
рдореЗрдВ рдХрдИ рдорд╛рди Unpin
) "рдкрд┐рди" рдирд╣реАрдВ рд╣реИрдВ!
рдпрд╣ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ Pin
рдореЗрдВ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡реЗ Pin
, рдФрд░ рдЪрд╛рд╣реЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ рдпрд╛ рдирд╣реАрдВ, рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ Pinned
рдирд╛рдо рд╡рд╛рд▓реА рдЪреАрдЬрд╝ рд╣реИред Pin*
рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдирд╛рдо рджреЛ рдЕрд▓рдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рдВрдЧрдо рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред
PhantomNotUnpin
: P
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рднреА рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирдкрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдирд╛рдкрд╕рдВрдж рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╣рд┐рдд рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдЕрдирдкрд┐рди рдЬреЛ "рди-рдЕрди-рдкрд┐рди" рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдорд╕реНрддрд┐рд╖реНрдХ-рдЪрдХреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ Unpin
рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ, рдмреЙрдЯ рдкрд┐рди-рдкреЙрдЗрдВрдЯ (рд╣реЗрд╣) рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ: рдпрд╣ рджреЛрд╣рд░рд╛-рдирдХрд╛рд░ рд╣реИред
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛! рдЕрдирдкрд┐рди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рд╛рде рд╕реЗ рдПрдХ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд▓рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рдкреАрдЫреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдкрд┐рди рд╕рдВрд░рдЪрдирд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдореЗрдВ рдЕрдирдкрд┐рди рдХрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд╕рдЯреАрдбреА рдореЗрдВ рдЕрдирдкрд┐рди рдХреЗ рд╕рднреА рд▓рдХреНрд╖рдг рд╕рдХрд╛рд░рд╛рддреНрдордХ рдзреНрд░реБрд╡реАрдпрддрд╛ рд╣реИрдВред
рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╣реИред impl !Sync
рдХрд╛рдлреА рджреБрд░реНрд▓рдн рд╣реИ (рдЕрдХреЗрд▓реЗ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдерд┐рд░ рд╣реИ), рд▓реЗрдХрд┐рди Sync
рдФрд░ !Sync
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЗрд╕реА рддрд░рд╣, !Unpin
рдЗрд╕ рдлреАрдЪрд░ рдХреА рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдХрд╛рдлреА рдКрдкрд░ рдЖ рдЧрдП, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдереЗред
рдореИрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ ( MoveFromPin
рдпрд╛ рддреЛ) рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ Pin
рд╡рд┐рдкрд░реАрдд рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдВрдЧ рднрд╛рдЧрдиреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред
LLVM рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрд╕реНрдХреЗрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрднреА рднреА Rust рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред
рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЛ рдЪреБрдирдирд╛ рд╣реИ рдЬреЛ Pin
/ Unpin
рдХрд╛ рдЕрд░реНрде рдЙрд▓реНрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, Unpin
рд╕реЗ Relocate
рдирд╛рдо рдмрджрд▓реЗрдВред рддрдм !Unpin
!Relocate
рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИ - рдореИрдВрдиреЗ рдЗрд╕реЗ "рдУрд╣, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ред рдПрдХ рдФрд░ рджрд╛рд╡реЗрджрд╛рд░ Movable
ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рдкрд░реАрдд рд╢рдмреНрдж рдХреНрдпрд╛ рд╣реИ рдЬреЛ Pin
рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рд╣реЛред рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбреЙрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ:
рдПрдХ рдкрд┐рди рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╕реАрдзреЗ
DerefMut
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рдпрджрд┐ рд╡рд╕реНрддреБ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредRelocate
рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд╕рдВрдХреЗрдд рд╣реЛрдЧрд╛, рддреЛRelocate
рдХрд░рдХреЗimpl !Relocate
рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЬреЛрдбрд╝ рджреЗрдВред
impl<T: Relocate> DerefMut for Pin<T> { ... }
рдпрд╣ Unpin
рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИред
рдореИрдВрдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП # 55992 рдЦреЛрд▓рд╛ рд╣реИ
рдпрд╣ рдХреЗрд╡рд▓ https://github.com/rust-lang/rust/issues/55766#issuecomment -438316891 рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рднрд╛рдЧ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдореБрдЭреЗ MoveFromPin
рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рд╣реИред Relocate
рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж Pin
рдкрд░реНрдпрд╛рдкреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЧреИрд░-рдЪрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ)ред RelocateFromPin
рдлрд┐рд░ рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
Escape
рдЖрдИрдПрдирдЬреА рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде рднреА рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдмрд╛рд╣рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИред
рдЬрдм рддрдХ рдпрд╣ рд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рддрдм рддрдХ рдореИрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХреЛ рд▓рдВрдмреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред
FWIW рдореИрдВ рдПрдХ рд╡реЛрдЯ рдореЗрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде Unpin
рдХрд╛ рдХреБрдЫ "рд╕рдХрд╛рд░рд╛рддреНрдордХ" рдирд╛рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреИрд╕реЗ Relocate
рдпрд╛ MoveFromPin
(рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╢рдмреНрдж рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ MayMoveFromPin
)ред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ !Unpin
рдпрд╛ рд╕рд┐рд░реНрдл Unpin
рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдЛрдг рдореЗрд░реЗ рд▓рд┐рдП рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ "рдореЗрдВ рдлрдВрд╕рд╛рдпрд╛ рдЧрдпрд╛ рдХреБрдЫ" Pin
рдЕрдВрджрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ "рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХреБрдЫ рднреНрд░рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛!
FWIW рдореИрдВ рд╢реБрд░реВ рдореЗрдВ Unpin
рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рдд рд╕реЛрдЪрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЧрдпрд╛ IMO рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдбрдмрд▓ рдирдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд┐рд╕ рдСрдкрд░реЗрд╢рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ Unpin
рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ Pin
рдирд╣реАрдВ рдПрдХ рдкрд┐рди рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ)ред рдпрд╣ MoveFromPin
, рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдореЗрдВред рдореИрдВ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рди рд╕рдордЭреЗ рдХрд┐ рдпрд╣ " Pin
" рдпрд╛ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди IMO MoveFromPin
рдФрд░ рдЕрдиреНрдп рдмрд╣реБрдд рджреВрд░ рдХреА рдмрд╛рдд рд╣реИред UndoPin
? ( FreePin
рд╣реИрд╕реЗрд▓ рднреАрдбрд╝ рдХреЗ рд▓рд┐рдП?)
рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ !Unpin
рдЕрдЬреАрдм рдкрдврд╝рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рд╛рдЬрд╝ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреИрд╕реЗ "рдЗрд╕реЗ рдЕрдирдкрд┐рди рди рдХрд░реЗрдВ!" рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрдЬрд╛рдп " Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред
!Pluck
рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
@runiq
рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрдЬрд╛рдп "рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ"
рдореИрдВрдиреЗ рдЕрдкрдиреА рдкреВрд░реНрд╡ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ: Unpin
рдЗрд╕реЗ Pin<C<_>>
рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реИред рдЪреАрдЬреЗрдВ рдЬреЛ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рд╡реЗ рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред
@ рдХреНрд░рд╛рдорд░реНрдЯрдЬ рдореБрдЭреЗ UndoPin
рдХрд╛рдлреА рдкрд╕рдВрдж рд╣реИ
@cramertj рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдореИрдВ рдЕрдм рддрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдбреА MoveFromPin
Unpin
рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдбрдмрд▓-рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдкрд░ (рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЯрди рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рдпрд╣ рдореБрдЭреЗ рддреАрди рдЧреБрдирд╛ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдореИрдВ "рдЕрди" рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ...
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди @cramertj рдпрд╛ рджреВрд╕рд░реЛрдВ рдХреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рдмрд╛рдЙрдВрдб рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХрд▓реА рдКрдкрд░ рдЖрдиреЗ рдкрд░ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИрдВрдбрд▓ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рджреБрд░реНрд▓рдн рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рдЖрдо рд╣реИ? рдпрджрд┐ рджрд░реНрдж рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ рддреЛ рджрд░реНрдж рд╣реЛрдирд╛ рдЖрдо рд╣реИ?
рдПрдХ рдЫреЛрдЯреЗ-рд╕реЗ-рдореАрдареЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Relocate
рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рд╡рд░реНрдбрд┐рдпрд░-рд▓реЗрдХрд┐рди-рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐-рдЖрдк-рдирд╣реАрдВ-рдЯрд╛рдЗрдк-рдЗрдЯ-рдПрдЬрд╝-рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ MoveFromPin
рдкрд╕рдВрдж рд╣реИ Unpin
рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди @cramertj рдпрд╛ рджреВрд╕рд░реЛрдВ рдХреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирдкрд┐рди рдмрдВрдзреЗ рд╣реБрдП рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рджреБрд░реНрд▓рдн рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рдЖрдо рд╣реИ? рдпрджрд┐ рджрд░реНрдж рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ рддреЛ рджрд░реНрдж рд╣реЛрдирд╛ рдЖрдо рд╣реИ?
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рджреЛ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
Unpin
рд╕реАрдорд╛рдПрдБ рдКрдкрд░ рдЖрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рднрд╡рд┐рд╖реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рдЪреБрдирддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреБрдирд┐рдВрджрд╛ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рди)редUnpin
рдХрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ Unpin
рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрднреА рдирд╣реАрдВред рдЙрдиреНрд╣реЗрдВ рдкрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛редрджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдлрд░ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рддреЛ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ (рдЬреИрд╕реЗ T: AsRef<[u8]>
)ред рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рд╕реЗ рдЯреБрдХрдбрд╝рд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ Unpin
рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ Unpin
рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВ Future
рдкрд┐рдирд┐рдВрдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ред
Unpin
рдПрдХ рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрдо рд╣реИ - select!
, StreamExt::next
рдФрд░ рдЕрдиреНрдп рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рд╕рднреА рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡реЗ Unpin
рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
@withoutboats рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдБ 2 рд╡рд╣рд╛рдБ; рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ impl Unpin
рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ? рдЗрд╕реА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдЖрдЬ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП #[derive(Debug)]
рдпрд╛ impl std::error::Error
рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
рдЕрдирдкрд┐рди рдПрдХ рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╕рдордп рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдирдкрд┐рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рдкреНрд░рдХрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред (рдпрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдирдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ)ред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рд╣реА рд╣реИред рдФрд░ рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ @withoutboats рдиреЗ рднреА рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдпрд╣ рдореБрдЭреЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдЬрд┐рддрдирд╛ рд╕реЛрдЪрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╡рд╛рдпрджрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ :)
@alexcrichton рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди @cramertj рдпрд╛ рдЕрдиреНрдп рдХреНрдпрд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирдкрд┐рди рдмрд╛рдЙрдВрдб рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИрдВрдбрд▓ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рджреБрд░реНрд▓рдн рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕реБрдкрд░ рдЖрдо рд╣реИ? рдпрджрд┐ рджрд░реНрдж рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ рддреЛ рджрд░реНрдж рд╣реЛрдирд╛ рдЖрдо рд╣реИ?
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлреНрдпреВрдЪрд░реНрд╕ 0.3 (рдЬреЛ Pin
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдкрд░ рдПрдХ рд▓рдВрдмреА рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреА рдереАред рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╕рд╛рд░рд╛рдВрд╢ рдпрд╣ рд╣реИ:
рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЖрдкрдХреЛ Unpin
рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Unpin
рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рддреЛ рдХреЗрд╡рд▓ Unpin
рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ (рдЬреИрд╕реЗ struct Foo<A>
)ред
рдФрд░ рдЖрдк рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ (рдЬреИрд╕реЗ Future
/ Stream
/ Signal
) рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
impl<A> Unpin for Foo<A> where A: Unpin {}
рдпрд╛ рдпрд╣:
impl<A> Unpin for Foo<A> {}
impl<A> Future for Foo<A> where A: Unpin { ... }
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ Unpin
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдЖрдорддреМрд░ рдкрд░ Unpin
~ 2 рдмрд╛рд░ рдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЧреИрд░-рд╕рдВрдпреЛрдЬрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╛ Future
/ Stream
/ Signal
рд▓рд╛рдЧреВ рди рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ Unpin
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ Unpin
рдмрд╣реБрдд рдХрдо рд╣реА рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Future
/ Stream
/ Signal
рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ MoveFromPin
рдЬреИрд╕реЗ рдирд╛рдо рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдкрд┐рдирд┐рдВрдЧ рдПрдХ рдЖрд▓рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрднреА рднреА рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ-рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреБрд░реНрд▓рдн рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рд▓рд╛рдн (рджреЛрд╣рд░реЗ рдирдХрд╛рд░ рд╕реЗ рдмрдЪрдирд╛) рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ! рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред
@ рдЬреЛрдВрд╣реВ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
impl Unpin
рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛? рдЗрд╕реА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдЖрдЬ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП#[derive(Debug)]
рдпрд╛impl std::error::Error
рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ impl Unpin
рдХреЛ рднреВрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд▓реЗрдЦрдХ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдЬреЛ рдЙрдирдХреЗ рдЯреЛрдХрд░реЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рддреЛ рдпрд╣ #[derive(Debug)]
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред
рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @withoutboats рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреЗрд╡рд▓ Future
/ Stream
/ Signal
рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)ред
(рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрд╣рд░рд╛-рдирдХрд╛рд░ рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ-рдирдХрд╛рд░-рд╕реЗ-рд╕рдЦреНрддреА рд╕реЗ-рдЖрд╡рд╢реНрдпрдХ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рдХрд╣рд╛рдиреА рдирд╣реАрдВ рд╣реИ (рдпрд╣рд╛рдВ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ) ... "рдЕрдирдкрд┐рди" рдПрдХ рд╕рд╛ рд╣реИ , рд░реВрдкрдХ! рдЕрдкреНрд░рддреНрдпрдХреНрд╖? рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ "рдкрд┐рдирд┐рдВрдЧ" рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд░реВрдкрдХ рд╣реИ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдЙрд╕ рд░реВрдкрдХ рдХреЗ рдЖрдЧреЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдореЗрд░реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХрд╛ рдЕрд░реНрде рдХреНрдпрд╛ рд╣реИ? "рдЕрдирдкрд┐рди" рдХрд┐рд╕реА рдХрд╛рд░рдг рдЕрд╕реНрдкрд╖реНрдЯ рдФрд░ рджреГрдврд╝рддрд╛ рд╕реЗ рдХреБрдВрдбреА рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред "
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА @cramertj рд╣реИрдВ , рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛ рдирдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди @alexcrichton рдФрд░ @glaebhoerl рдХреА рддрд░рд╣ рдореИрдВ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛ рдирдХрд╛рд░рдирд╛ рд╣реИред
@withoutboats рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдБ 2 рд╡рд╣рд╛рдБ; рдХреНрдпрд╛ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрдкрд┐рди рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ? рдЖрдЬ рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдХреНрд╕рд░ # [рд╡реНрдпреБрддреНрдкрдиреНрди (рдбрд┐рдмрдЧ)] рдпрд╛ impl std :: error :: рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрдирдХреЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВ! рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ Future
рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЧреИрд░-рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рддреЛ рд╡реЗ рд╢рд╛рдпрдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд Pin<&mut Self>
рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ &mut self
ред рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ MyFuture<T: AsRef<[u8]>>
Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рддрдм Unpin
ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рднрд╛рд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ Future
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рднреВрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@Withoutboats рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдХреЗрд╡рд▓ Future / Stream / Signal combinators рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЙрди-рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдЬреЗрдиреЗрд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдлреНрдпреВрдЪрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд░реНрдл Unpin
рдХрд╛ рдХрдВрдмрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдЬреЗрдиреЗрд░рд┐рдХ Unpin
ред
рдореИрдВрдиреЗ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдмрдирд╛рдпрд╛ "рдЬрдм рдореИрдВ рдПрдХ рдореИрдиреБрдЕрд▓ рднрд╡рд┐рд╖реНрдп / рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдкрд┐рдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реВрдВ?"
рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдмрд┐рдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЬ рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рдореЗрдВ рдореИрдВ LeavePin
рд╕рд╛рде рдЖрдпрд╛ред рдпрд╣ рдирд┐рд╣рд┐рдд рднреНрд░рд╛рдордХ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд┐рдирд╛ escape
рдХреЗ рд╕рдорд╛рди рд╕реНрд╡рд░ рд╡рд╣рди рдХрд░рддреА рд╣реИред
рдХреНрдпрд╛ рдкреНрд░рддреНрдпрд╛рд░реЛрдкрд┐рдд рдФрд░ рдкрд┐рди рдХреЗ рдмреАрдЪ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддрдЪреАрдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд╕рд╛рде рд╣реИ?
рдЯреНрд░реИрдХрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рд╛рдВрдХ "" рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдгрд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдкрд┐рди рдЖрд░рдПрдлрд╕реА рдпрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЖрд░рдПрдлрд╕реА рдХреЛ рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рддреЛ "рдЗрд╕реЗ рдареАрдХ рд╣реЛрдирд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реИ" рдпрд╛ "рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╢реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"ред
@ рдЗрд╡реА рди рдХреЗрд╡рд▓ рд╕рд╛рдЙрдВрдбрдиреЗрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдкреАрд░рд┐рдпрдб рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдпреВрдЬрд░ рдЖрдЬ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рд╕рдВрдХрд▓рди рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдХреЗ рд╕рд╛рдордиреЗ рдХреЛрдИ рднрд╛рд╖рд╛ рдлреАрдЪрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЕрдирд╕рд╛рдЙрдВрдб рдкреАрд░рд┐рдпрдб рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдпреВрдЬрд░ рдЖрдЬ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдареАрдХ рд╕рдВрдХрд▓рди рдХрд░реЗрдЧрд╛ред
рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ pin
рдкрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрд╕рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╕рд░рд▓ рд╣реИред
рдпрджрд┐ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реБрд╡рд┐рдзрд╛, рдЬрдм unsafe
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИ, рддрдм рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рддрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ (рдЬреИрд╕реЗ &packed.field as *const _
, рдпрд╛ ABI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛рдирд╛) рддреЛ рдпрджрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рджреЗрддреА рд╣реИред рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рдж рдореИрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реА рд╣реИрдВ рдЬреЛ рдЕрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИрдВ рди рдХрд┐ рднрд╛рд╖рд╛ рдмрджрд▓рддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░рд╛рдзрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рджреЛрд╖ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдЬреБрд░реНрдорд╛рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╛рдЬрд╝ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИред
MoveFromPin рдпрд╛ рд╕рдорд╛рди рдХреЗ рд▓рд┐рдП +1
рдпрджрд┐ рдЖрдк рдкреНрд░рд╢реНрди рдкреВрдЫрддреЗ рд╣реИрдВ "рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдирдкрд┐рди рдХреЛ рдХрдм рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?", рддреЛ рдЙрддреНрддрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдпрджрд┐ рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ "рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП MoveFromPin рдХреЛ рдХрдм рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?"
рдЙрд╕реА рдХреЗ рд╕рд╛рде "рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдирдкрд┐рди рдХреЛ рдпрд╣рд╛рдВ рдмрдВрдзреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?" рдмрдирд╛рдо "рдХреНрдпрд╛ рдореБрдЭреЗ рдореВрд╡рдореЗрдВрдЯ рдмрд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд╡рдлреНрд░реЗрдордкрд┐рди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?"
рдкрд┐рдирд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ! рд╣рдЯреЛ
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдХрд╣реАрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдФрд░ рдЖрд░рдПрдлрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рдкрд┐рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд░реНрдЪрд╛ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛ред
рдЬрдВрдЧ рдХрднреА рд╣реЛрдЧрд╛? рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ (рд╣реЗрдХ, рдореИрдВ рдкрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░реЛрдВ рдореЗрдВ рдЧреЛрд▓реА рдирд╣реАрдВ рдорд╛рд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЕрдЧрд░ рдЬрд╡рд╛рдм рд╣рд╛рдБ рд╣реИ, рддреЛ рд╡рд╣ рдкрд┐рди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛? рдХреНрдпрд╛ рдкрд┐рди рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ?
рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреА рдЕрд╡рдзрд┐, рдКрдкрд░ рдХреА рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИ ред
рдЕрдирдкрд┐рди рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЕрдирд╕реБрд▓рдЭреА рдЪрд┐рдВрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЬреИрд╕рд╛ рдХрд┐ @RalfJung рдиреЗ рдмрддрд╛рдпрд╛ , # 55992 рднреА рдХреЗрд╡рд▓ https://github.com/rust-lang/rust/issues/55766#issuecomment -438316891 рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдкреВрдЫреЗ рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИред
рдХреНрдпреЛрдВ рдореЗрд░реА рдбреНрд░реЙрдк () рд╡рд┐рдзрд┐ рдЕрдм рдлрд┐рд░ рд╕реЗ рдФрд░ рдкрд┐рди рдХреЗ рдмрдЬрд╛рдп, рд╕реНрд╡рдпрдВ рдХреЛ рд▓реЗ рдЬрд╛рддреА рд╣реИред
рдЦреИрд░, рдбреНрд░реЙрдк () рдкреБрд░рд╛рдирд╛ рд╣реИ - рдпрд╣ рд░реБрд╕реНрдЯ 1.0 рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдкрд┐рди <рдФрд░ рдореНрдпреВрдЯ рд╕реЗрд▓реНрдл> рд▓реЗрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЕрдирдкрд┐рди рдкреНрд░рдХрд╛рд░ рдЕрдкрдиреЗ & рдореНрдпреВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдЕрдм рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЧреИрд░-рдмреИрдХрд╡рд░реНрдб-рд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред AIUI рдЬрдм рддрдХ рд╣рдо Unpin
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдФрд░ рд▓реЛрдЧ !Unpin
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рд╕рднреА рдкреНрд░рдХрд╛рд░ Unpin
ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
trait DropPinned {
fn drop(Pin<&mut> self);
}
рдФрд░ рдлрд┐рд░ рд╕рднреА Unpin
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд┐рд╣рд┐рдд рдХрд░реЗрдВ, рдЬрдм рддрдХ рдХрд┐ рд▓реЛрдЧ рдСрдкреНрдЯ рдЖрдЙрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
impl<T> PinDrop for T where T:Unpin + Drop {
fn drop(Pin<&mut T> self) {
Drop::drop(self.get_mut());
}
}
рдлрд┐рд░ рд╣рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдбрд╛рд▓рдиреЗ рд╕рдВрдХрд▓рдХ рд╣реЛрдЧрд╛ DropPinned::drop
рдХреЗ рдмрдЬрд╛рдп Drop::drop
ред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ DropPinned
Drop
рдмрдЬрд╛рдп рд▓рдВрдЧ-рдЖрдЗрдЯрдо рдмрди рдЬрд╛рддрд╛ рд╣реИред AFAICS рдпрд╣ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ Unpin
рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдирдкрд┐рди рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЕрдирд╕реБрд▓рдЭреА рдЪрд┐рдВрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
@tikue рдХрд┐рд╕реА рднреА Unpin
рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рднреА рддрд░реНрдХ рдирдпрд╛ рдпрд╛ рдирдпрд╛ рдирд╣реАрдВ рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд░реНрддрдорд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧреАред рдирд╛рдордХрд░рдг рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЪрд┐рдВрддрд╛ рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЯреАрдо рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж FCP рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
@cramertj рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБред рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдмрд╛рдд рдХреА рд╣реИред рдЬрдм рдореИрдВрдиреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫрд╛ рдХрд┐ Unpin
рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рддрд░реНрдХ рдХрд╣рд╛рдБ рд╕реЗ рдЙрдард╛рдП рдЧрдП рдФрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП, рддреЛ рдореБрдЭреЗ https://internals.rust-lang.org/t/naming-pin-anchor- рдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рд▓реЛрдЧреЛрдВ рдХреА рд╣реИ Unpin
, рдФрд░ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд╡рд╛рдмреА рддрд░реНрдХред Https://github.com/rust-lang/rfcs/pull/2349 рдореЗрдВ рдореВрд▓ RFC рдХреЗ рдкрд╛рд╕ рдЗрддрдирд╛ рдФрдЪрд┐рддреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ Unpin
рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдЦрд░рд╛рдм рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рдЙрдВрдЯрд░-рддрд░реНрдХреЛрдВ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ "рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ" рдФрд░ "рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ"ред рдХреНрдпрд╛ рдЖрдк рдареЛрд╕ рдЪрд░реНрдЪрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╛рдо рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВ (рдЬреИрд╕реЗ MoveFromPin
) рдЪрд░реНрдЪрд╛ рдФрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИ?
рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЙрдкрдиреНрдпрд╛рд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдХрд╛рдлреА рдмрд╛рд░реАрдХреА рд╕реЗ рдкрд┐рди рдПрдкреАрдЖрдИ рдЪрд░реНрдЪрд╛рдУрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдП рдЧрдП рджреЛрд╣рд░реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдХрд░ рдХрднреА рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ред
@tikue рдореИрдВрдиреЗ рд▓рд╛рдпрд╛ рд╣реИ рдФрд░ рджреЛрд╣рд░реЗ-рдирдХрд╛рд░рд╛рддреНрдордХ рдореБрджреНрджреЗ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЗрдЦрд╛ рд╣реИ, рдФрд░ Unpin
рдХреЗ рд╕рдЯреАрдХ рдирд╛рдордХрд░рдг рдХреЛ рдХрдИ рдмрд╛рд░ рдПрдХ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ Unpin
рдкрдХреНрд╖ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ Unpin
рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ Unpin
рдПрдХ рдЕрдирд╕реБрд▓рдЭреЗ рд╕рд╡рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ: рд╣рдордиреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдФрд░ рдпрд╣ FCP рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереА рдХрд┐ рд╣рдо рдЬреЛ рдирд┐рд░реНрдгрдп рдХрд┐рдП рдЧрдП рдереЗ, рдЙрдиреНрд╣реЗрдВ Unpin
рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@cramertj рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ? рдореИрдВ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ Unpin
рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рддрдХ рдореБрдЭреЗ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн Unpin
рдХреЗ рдирд╛рдордХрд░рдг рдкрд░ рдХреЛрдИ рд╕рдВрдХрд▓реНрдк рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
@cramertj +1 рд╕реЗ @jonhoo рдХрд╛ рдкреВрдЫрдирд╛ред рдпрджрд┐ рдРрд╕реА рдЪрд░реНрдЪрд╛рдПрдБ рд╣реИрдВ рдХрд┐ рд▓рд┐рдмрд╛рд╕ рдЯреАрдо рдЖрдкрд╕ рдореЗрдВ рдереА рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдЪрд░реНрдЪрд╛рдУрдВ рдХрд╛ рдореБрдЦреНрдп рдЬреЛрд░ рдпрд╣рд╛рдБ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд┐рдпрдо рднреА рд╣реИ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд┐рдпрдо рднреА рд╣реИ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рд╣рд╛рдБ, рдпрд╣ рд╕рдЪ рд╣реИ - рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рд┐рдмрд╛рд╕ рдЯреАрдо рдкрд░ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд▓рд┐рдмрд╛рд╕-рдЯреАрдо рдХреЗрд╡рд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред RFC рдереНрд░реЗрдб рдФрд░ Pin
рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрдИ рдмрд╛рд░ Unpin
рдХрд╛ рдирд╛рдо рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛ред рдореИрдВ рдХрд┐рд╕реА рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ" рд╢рдмреНрдж рдирд╣реАрдВ рдХрд╣рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╛рдж рд╣реИ " !Unpin
рдПрдХ рдбрдмрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ" рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдордХрд░рдг рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреАрдЖрдИ рдирд┐рдпрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрдирдХреЗ рд╕рд╛рде рдХрд░реЗрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд░ Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рджреЛрдиреЛрдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ "рдЕрдирдкрд┐рди" рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) "рдиреЙрдЯ-рдкрд┐рди", рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ)ред
@wleyley рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ impl<T> Drop for Vec<T>
рдЯреВрдЯ рдЬрд╛рдПрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Vec<T>: Unpin
ред рд╕рд╛рде рд╣реА, рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкрд╣рд▓реЗ рднреА рдмрдирд╛рдП рдЬрд╛ рдЪреБрдХреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдкрдврд╝реЗрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдкреВрдЫ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд░-рдмрд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдореБрджреНрджреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд┐рдпрдо рднреА рд╣реИ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ "рдХреЛрдИ рдирдпрд╛ рддрд░реНрдХ рдирд╣реАрдВ" рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ https://github.com/rust-lang/rust/issues/56256 рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ?
# 56256 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, impl<T> From<Box<T>> for Pin<Box<T>>
рдХреЛ рдУрдкреА рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╛рд░ Pin
ред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдбреЙрдХреНрд╕ рдХреЛ рд╕реНрдХреИрди рдХрд░рдирд╛ рдЕрдиреНрдп рд╕рднреА рдореЗрд░реЗ рд▓рд┐рдП рд▓рд┐рдкрдЯреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред
рд╣рдордиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЬ рд▓рд┐рдмрд╛рд╕ рдЯреАрдо рдореЗрдВ рдмрд╛рдд рдХреАред рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдВрддрд┐рдо рд╣рдлреНрддреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ Unpin
рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдм рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝реЗрдВрдЧреЗ (FCP рднрд▓реЗ рд╣реА)ред
рдпрд╣ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдиреАрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╛рдордХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
@Kimundi
рдпрд╣ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдиреАрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╛рдордХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдмрд╛рд╕ рдЯреАрдо рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ? рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдирд╛рдо рдХреЗ рдореМрдЬреВрджрд╛ рд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрди рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдлрдмреАрдЖрдИ рдХреА рдЯреАрдо рдХрд╛ рдирд╛рдо рд╣реИ рддреЛ рд╡реЗ рдЙрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ: рд╢рд┐рдкрд┐рдд:
рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдмрд┐рдХреЗрд╢реЗрдбреЗрдб рдФрд░ DePin
рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Unpin
"рдкрд┐рди рдирд╣реАрдВ" рдХрд╛ рдЕрд░реНрде рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬреЛ рдбреА Pin
'd рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@ рдХрд┐рдореБрдВрдбреА рдЖрдк рдпрд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЯреАрдо рд╕реЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ "
@rfcbot рдЪрд┐рдВрддрд╛ рдирд╛рдордХрд░рдг-рдЕрдирдкрд┐рди
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ FCP рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ Unpin
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдирд╛рдордХрд░рдг рдкрд░ рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рдЕрд╡рд░реЛрдзрдХ рдЪрд┐рдВрддрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред Unpin
рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддреА рд╣реИ, рдФрд░ "рдбрдмрд▓ рдиреЗрдЧреЗрдЯрд┐рд╡" (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ) рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдкрд┐рди рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд░реЛрдорд╛рдВрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдореЗрд░рд╛ "рдкрд╕рдВрджреАрджрд╛" рдЕрднреА рднреА MoveFromPin
рдпрд╛ Relocate
рдХреА рддрд░реНрдЬ рдкрд░ рд╣реИ (рдореЗрд░реЗ рднрдЧрд╡рд╛рди рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдпрд╣рд╛рдВ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ)ред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Pin
рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде Pinned
рдПрдХ ZST рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ Unpin
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ @alexcrichton рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд Unpin
рдХрд╛ рдирд╛рдордХрд░рдг рдпрд╣рд╛рдВ рд╡рд┐рд╡рд╛рдж рдХрд╛ рдмрдбрд╝рд╛ рдмрд┐рдВрджреБ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рддрдХ тАЛтАЛрдХреЛрдИ рднреА рддрдХрдиреАрдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ _are_ рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Pinned
ZST рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬреАрдм рдирд╛рдо рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЬрд┐рд╕рдореЗрдВ Pinned
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ .. рдпрд╣ рд╕рд┐рд░реНрдл Unpin
ред PhantomPinned
(рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ # 55992 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдпрд╣ Pin
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдм ZST _really_ Unpin
ред
рдореБрдЭреЗ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ рдХреЛ рдЗрд╕ рдлреАрдЪрд░ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, @ рдХрд┐рдореБрдВрдбреА , рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐
@Jonhoo рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Pinned
рдЕрднреА рднреА рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ PhantomPinned
рдХрд┐рд╕реА рднреА рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рд╕рд╣рдордд рд╣реИ (рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░реЗрдд рддрд░реАрдХреЗ рд╕реЗ рднреА рдирд╣реАрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо Unpin
рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ Pinned
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ Not{NewNameForUnpin}
рдмрджрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ PhantomPinned
рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рдкреНрд░рдХрд╛рд░ рд▓рдЧрднрдЧ рдХрднреА рднреА рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдИ PhantomNotUnpin
/ PhantomNotDePin
/ PhantomNotMoveFromPin
/ рдЗрддреНрдпрд╛рджрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЖрдо рдпрд╛ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╕рд╣рдЬ рд╣реИрдВ рдПрдкреАрдЖрдИ PhantomPinned
рд▓рд┐рдП рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЖрдП рд╣реИрдВред
рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рдЪрд╛рд░: Move
рдФрд░ ZST Anchor
рд▓рдЧрд╛рдПрдВред
рд╣рд░ рдкреНрд░рдХрд╛рд░ Move
рд╕рдХреНрд╖рдо рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдореЗрдВ Anchor
рдЬреЛ рдЗрд╕реЗ Pin
рдЪрд┐рдкрдХрд╛ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ Anchor: !Move
рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореИрдВ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ PhantomPinned
рдкрд░ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЦреБрд▓реЗ рджрд┐рдорд╛рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдпрд╛рд╕ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬреЛ рдХреБрдЫ рднреА Unpin
рд▓рд┐рдП рдЙрддрд░рд╛ рд╣реИ рд╡рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд╕рд╛рде рд╣реА PhantomPinned
ред
рд╣рдордиреЗ Move
рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрдИ рдмрд╛рд░ рдЕрдиреБрдЪрд┐рдд рдХреНрдпреЛрдВ рд╣реИред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддрдХ рд╡реЗ pinned рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, Anchor
рдкрд╣рд▓реЗ рднреА рд╕реБрдЭрд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдирд╛рдо рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Unpin
ing / Move
ing рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@stjepang рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Move
рдХреЛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ !Unpin
рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ Pin
рдЕрдВрддрд░реНрдЧрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ Unpin
, рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдиреБрдмрдВрдзрд┐рдд" рдирд╣реАрдВ рд╣реИрдВред
рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ @withoutboats рдиреЗ рдХрд╣рд╛:
Pin
рд░реИрдкрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ "рдкрд┐рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ Unpin
рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди "рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ" - рд╕реНрдореГрддрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ "рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ"ред рдЕрдЧрд░ рд╣рдо Unpin
рд╕реЗ MoveSafe
рдирд╛рдо рдмрджрд▓ рджреЗрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
UnwindSafe
рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ "рд╕рдВрдХреЗрдд" рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ !UnwindSafe
рдореВрд▓реНрдп catch_unwind
рд╕реАрдорд╛ ( AssertUnwindSafe
) рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЪрд╛рд▓рд╛рдиреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рдХреЗ "рддреЛрдбрд╝" рджреЗрдВрдЧреЗред
рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ !Unpin
/ !MoveSafe
рдореВрд▓реНрдп рд╣реИ, рддреЛ рднреА рдЗрд╕реЗ (рдмреЗрд╢рдХ) рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╕реНрд╡-рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рдХреЗ рдЗрд╕реЗ "рддреЛрдбрд╝" рджреЗрдВрдЧреЗред рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рдорд╛рди рд▓рдЧрддреА рд╣реИред
рд▓рдХреНрд╖рдг Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл MoveSafe
рдЕрд░реНрде рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ Pin
рдкреАрдЫреЗ рд╕реНрдореГрддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдкрд░ "рдмреНрд░реЗрдХ" рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
MoveSafe
рдХреЛ Move
рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдкрд┐рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдореВрд▓реНрдп рдХреЛ рд▓реЗ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
MoveSafe
рдХреЛMove
рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд░реНрде рд╣реИ, рдЬреИрд╕реЗ UnwindSafe
ред рд╡реИрд╕реЗ рднреА, рдореИрдВ Relocate
рдпрд╛ рдЙрд╕ рддрд░рд╣ рдХрд╛ рдХреБрдЫ рднреА рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо DePin
рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, Unpin
, рдпрд╛ рдЗрд╕рдХреЗ рдирд╛рдо рдореЗрдВ "рдкрд┐рди" рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рднреНрд░рдо рдХрд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рд╣реИред рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Pin
рдХреЗ рдЭреЛрдВрдкрдбрд╝рд┐рдпреЛрдВ рд╕реЗ "рдПрд╕реНрдХреЗрдк рд╣реИрдЪ" рдирд╣реАрдВ рд╣реИ - рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╣рддреА рд╣реИ рдХрд┐ рдореВрд▓реНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореИрдВ рд╕рд┐рд░реНрдл Pin
рдФрд░ Unpin
рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред :)
рдореБрдЭреЗ рдареАрдХ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд▓рдЧрддрд╛ рд╣реИ;) рдкрд┐рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрдердХ рд╣реИ, рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдХреА рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рд╕рд╛рд░реНрдердХ рд░реВрдк рд╕реЗ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдкрд┐рди рдХреЗ рдмрд┐рдирд╛, рдЕрдирдкрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рд╣реИред
рдореБрдЭреЗ рдкрд┐рдирдмреЛрд░реНрдб рдкрд░ рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рд╣реИред рдпрджрд┐ рдЖрдк рдмреЛрд░реНрдб рдкрд░ рдкрд┐рди рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХрд╛ рдкрд┐рди рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд┐рди рд╣рдЯрд╛рдирд╛ рдЕрдирдкрд┐рдирд┐рдВрдЧ рд╣реИред
рдореБрдЭреЗ рдирд╛рдо Unpin
ред
рдореИрдВ рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдирдкрд┐рди рдПрдХ рджреЛрд╣рд░рд╛ рдирдХрд╛рд░ рд╣реИ, рдФрд░ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ !Unpin
рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рдирд╛рдо рдЬреЛ рдореИрдВ рдЕрдирдкрд┐рди рдХреЗ рд▓рд┐рдП рд▓реЗ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ Detach
ред рдкрд┐рдирдмреЛрд░реНрдб рд░реВрдкрдХ рдкрд░ рд╡рд╛рдкрд╕, рдЖрдк _Unpin_ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди _Detach_ рдкрд┐рди рдХреЛ рдЕрдкрдиреА рд╡рд╕реНрддреБ рд╕реЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ DePin
! рдЕрдм рддрдХ рдпрд╣ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╣реИ - рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ !DePin
рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ ("рдбреА-рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛")ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди "рдкрд┐рди рдирд╣реАрдВ" рд╣реИрдВ - рдореЗрдореЛрд░реА рд╣реИред
рдорд╛рди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрд┐рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореВрд▓реНрдп рдпрд╣рд╛рдБ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдкрд┐рдирд┐рдВрдЧ рдореЗрдореЛрд░реА, рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдпрд╛ рдРрд╕рд╛ рд╣реА рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди mem::swap
рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдкрд┐рди рдХрд░рдирд╛ рдЙрд╕ рдкрд┐рди рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Pin
рд╣реИред
рдореИрдВ рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдирдкрд┐рди рдПрдХ рджреЛрд╣рд░рд╛ рдирдХрд╛рд░ рд╣реИ, рдФрд░ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!
рдореИрдВ рдЖрдкрдХреЛ рд╕реБрдирддрд╛ рд╣реВрдВ рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдореИрдВ рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЦреБрдж рдХреЛ рдирд╛рдордХрд░рдг рд╕реЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╡рд╛рдпрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВ рдПрдХ impl Future<Output=T>
рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рддреБрд░рдВрдд рдЯреА рдФрд░ рдЕрдирдкрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЧрдВрднреАрд░ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдЬрд┐рд╕ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдЙрддреНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, "рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЯреА рдЕрдирдкрд┐рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреА рдХреЛ рд╡рд┐рд╡рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ"ред рдФрд░ рдЗрд╕рдиреЗ рдореБрдЭреЗ рд▓рдЧрднрдЧ 2 рдХрд╖реНрдЯрдкреНрд░рдж рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╕рд╛рддрд▓ рдореЗрдВ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред
"рдУрд╣, рдареАрдХ рд╣реИ рддреЛ рдХреНрдпрд╛ рдкрд┐рди рдХрд╛ рдорддрд▓рдм рд╣реИред рддреЛ рдЕрдирдкрд┐рди рдХрд╛ рдорддрд▓рдм рд╣реИ .. рдмреЙрдХреНрд╕? рдХреНрдпреЛрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ?"
"рд░реБрдХреЛ, impl !Unpin
? рдХреНрдпреЛрдВ impl Pin
?"
"рд╕рд╣реА, рдкрд┐рди рдФрд░ рдЕрдирдкрд┐рди ... рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рд░реБрдХреЛ, рдлрд┐рд░ рдЕрдирдкрд┐рди рдХрд╛ рдлрд┐рд░ рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЗрд╕реЗ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?"
"рдкреГрдереНрд╡реА рдкрд░ рдХреНрдпрд╛ !Unpin
рдорддрд▓рдм рд╣реИ? рдирд╣реАрдВ ... рджреВрд╕рд░реЗ, рдкрд┐рди рдмрд╛рдд рдирд╣реАрдВ? Hrrrgh"
рдлрд┐рд░ рднреА рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ 'рдЕрдирдкрд┐рди' рдХреЛ 'рд░рд┐рд▓реЛрдХреЗрдмрд▓' рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред "рдЯрд╛рдЗрдк рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ" рдкреВрд░реНрдг рдЕрд░реНрде рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА ,
Unpin
рд╕реЗ Relocatable
(рдпрд╛ Relocate
) рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рд╕реЗ рдореЗрд░рд╛ рд╡реЛрдЯ 4 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдирдкрд┐рди рд╕реЗ рдмреЗрд╣рддрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ред
рдкрд┐рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрдердХ рд╣реИ, рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдХреА рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рд╕рд╛рд░реНрдердХ рд░реВрдк рд╕реЗ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдкрд┐рди рдХреЗ рдмрд┐рдирд╛, рдЕрдирдкрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рд╣реИред
рдЗрд╕ рдкрд░ рдПрдХ рдмрд┐рдВрджреБ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП - рдкрд┐рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЧрд╛рд░рдВрдЯреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ ()
рдмрд╛рд░-рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ FnOnce
рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЙрдкрдЬ рдЖрддреНрдо-рд╕рдВрджрд░реНрдн рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рдХрд╛ FnOnce
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк FnOnce
рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдЕрднреА рддрдХ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ Unpin
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рддреН рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП), рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред
рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдореИрдВ рд╕рд┐рд░реНрдл рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдЖрдпрд╛ рдерд╛ рдХрд┐ рдЬрдм рддрдХ Unpin
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрддреАрдд рдореЗрдВ рдмрд╣рд╕ рд╣реЛрддреА рд░рд╣реА рд╣реИ рдирд╛рдордХрд░рдг, рдЗрд╕ рдкрд░ рдмрд╣рд╕ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рд╕рд╛рдХреНрд╖реНрдп рдерд╛ рдЬрдм рд╣рдо рдЪреБрдирд╛ рд╣реИ Move
рдХреЗ рд╕рд╛рде Unpin
, рдЬреЛ, рдореИрдВ рдХрд╣рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╕реБрдзрд╛рд░ рд╣реИред рдФрд░ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рдЬреЛ рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛, рдЙрд╕ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реБрдзрд╛рд░ рд╣реИ, рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рдХрдорд░реЗ рдмрд╛рдХреА рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдХреЗ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдХрд┐рд╕ рджрд┐рд╢рд╛ рд╕реЗ рдЖ рд░рд╣рд╛ рдерд╛ред
рдЕрдирдкрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рддреН, рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛), рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред
рдЬрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ / рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреА рддрд░рд╣, рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЧрдпрд╛ред
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рднреНрд░рдо рд╣реИ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ "рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" - рдпрд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рдЬреНрдп рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╡реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рдЕрдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрдиреНрд╣реЗрдВ Pin<Box<>>
рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорд╛рдорд▓рд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ "рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред"
рдЖрд╣, рд╣рд╛рдБ, рддреЛ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдПрдХ !DePin
рдкреНрд░рдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдкрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@cramertj @withoutboats рдПрдХ рдмрд╛рдд рдЬреЛ рдореИрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдк Unpin
рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ? рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВред
рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ Unpin
рдФрд░ "рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рд╣реЛрдЧрд╛"ред рдирд╛рдо рдмрджрд▓рдиреЗ рдореЗрдВ рдереЛрдбрд╝реА рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ (рдФрд░ Relocate / DePin рдпрд╣рд╛рдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ ...), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдЬрдЯрд┐рд▓рддрд╛ рдЦреБрдж рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдЖрддреА рд╣реИ; рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдпрд╛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ; рд▓рдЧрднрдЧ рднреА рдирд╣реАрдВред
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ core::pin
рдореЙрдбреНрдпреВрд▓ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ _significantly_ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рджреЛрдиреЛрдВ рд╣реА рдХреИрдиреЛрдирд┐рдХрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИрдВред
@alexcrichton рдореИрдВ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ DePin
рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реБрдЭрд╛рдпрд╛ред RemoveFromPin
рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рд╕рд╣реА" рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдирдордХ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд╕ рдирд╛рдо рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рддрдм рддрдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдмрдВрдж рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕рд╛ рдирд╛рдо рдирд╣реАрдВ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╣реИрдВ, рдЬреЛ Unpin
рдХреЗ рдирд╛рдо рдХреЗ рдХрд╛рд░рдг рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рдирд╣реАрдВ рдмрдиреЗрдВрдЧреЗ futures_api
рдЖрд╕рдкрд╛рд╕ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо futures_api
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдЖрдк)ред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдирд╛рдо рддрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрд▓рдкрддрд┐ рдХреА рдмреИрдардХ рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЬреЛ рдХреЛрдИ рдПрдХ рд░рд╛рдп рд░рдЦрддрд╛ рд╣реИ, рд╡рд╣ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкрд┐рдЪ рдХрд░ рд╕рдХреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдирд┐рдкрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдЪреНрдЪ-рдмреИрдВрдбрд╡рд┐рдбреНрде рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдореЗрд░рд╛ рд╡реЛрдЯ std::pin::Reloc
(рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд) рд╣реИ
рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдмрд╣реБрдд рд╣реА рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ (рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ, рд▓реЗрдХрд┐рди рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд╖реНрдкрд╛рджрди) рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред
Unpin
рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА T
(рдЬрд╣рд╛рдВ T: Unpin
) рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реИ, рдЬрдмрдХрд┐ рдкрд┐рди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрд╕ рд╢рдмреНрдж рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ) @RalfJung рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ) рдкрд┐рди-рд░рд╣рд┐рдд рдЯрд╛рдЗрдк-рд╕реНрдЯреЗрдЯ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Pin
&mut T
рд╣рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рдЪрд▓рд┐рдП рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ Woof
рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ Woof
рдХреЗ рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрдмрдХрд┐ рдкрд┐рди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░-рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд┐рди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ- рд░рд╛рдЬреНрдп, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ Woof
рд▓рд┐рдП fn unpin(self: Pin<Box<Woof>>) -> Box<Woof>
рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА?
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ Meow
рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрднреА-рдХрднреА рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реЗ рдкрд┐рди-рдЯреВ-рдкрд┐рди рдФрд░ fn unpin(self: Pin<Box<Meow>>) -> Result<Box<Meow>, Pin<Box<Meow>>>
рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрдХреНрд░рдордг рд╕рдВрднрд╡ рд╣реИред
рдмрд┐рдХреЗрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ 2 рд╕реЗрдВрдЯ:
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдХреНрдпрд╛ Unpin
рдорддрд▓рдм рд╣реИ " Pin
рдХрд╛ рдореБрдЭ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ"ред
BypassPin
рдпрд╛ IgnorePin
рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рддреЛ рдЪрд▓рд┐рдП рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ Woof рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ Woof рдХреЗ рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рд╕рдВрдХреНрд░рдордг рд╣реЛ, рдЬрдмрдХрд┐ рдкрд┐рди рдХрд┐рдП рдЧрдП рдЯрд╛рдЗрдк-рд╕реНрдЯреЗрдЯ рдореЗрдВ рдкрд┐рди-рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк-рд╕реНрдЯреЗрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ рдХреНрдпрд╛ рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ Woof рдХреЗ рд▓рд┐рдП fn рдЕрдирдкрд┐рди (рд╕реНрд╡рдпрдВ: рдкрд┐рди) рдХреА рддрд░рд╣ рдПрдХ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА
>) -> рдмреЙрдХреНрд╕ ?
рд╣рд╛рдБ, рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ Woof
рдПрдХ рдШреБрд╕рдкреИрда рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪреА рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИ, рддреЛ рдпрд╣ рд╕реВрдЪреА рд╕реЗ рддрддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ Pin
рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рддрд░реНрдХ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдЧреИрд░ рдХреЗ рд▓рд┐рдП Woof
s, рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд╕реНрдЯреЗрдЯреНрд╕ рд╕рдорддреБрд▓реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдбреА-рдкрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
Relocate
рдкрд╛рд╕ RePin
рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдореВрд▓реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирдкрд┐рди рдХрд░рддреЗ рд╣реБрдПред рдпрд╣ RePin
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдордЬрдмреВрдд рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореВрд▓реНрдп рдХреЛ рдЕрдирдкрд┐рди рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рднреА рдирд╣реАрдВ рд╣реИ: рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рднрдпрд╛рд╡рд╣ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рднреА Pin<Box<T>>
, рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдПрдХ рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рдХреНрдпреЛрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рднрдпрд╛рд╡рд╣ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рд╣рд╛рдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдЧреБрдг рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ Unpin
рддрд░рд╣ рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдЖрдВрддрд░рд┐рдХ рд╕рдВрджрд░реНрдн рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЕрднреА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдмрд╕ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рддреЛ std
рдпрд╛ рддреГрддреАрдп рдкрдХреНрд╖ рдореЗрдВ) рдЬреЛ рдирд╛рдореЛрдВ рдХреЗ рдПрдХ рднреНрд░рдорд┐рдд рдУрд╡рд░рд▓реИрдк рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдордЬрдмреВрдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реЛрдЪрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЪреБрдЯрдХреА рдмрдЬрд╛рддреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рдеред
рдареАрдХ рд╣реИ рддреЛ рдпрд╣рд╛рдБ рдХреБрдЫ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╢реБрд░реВ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдирд╛рдо PinInert
рдпрд╛ PinNoGuarantees
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрдгрди рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдПрдХ рд╡рд░реНрдгрди рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд▓рдХреНрд╖рдг рд╣реИ рд╕рдВрдкрддреНрддрд┐, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
Unpin
(рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ "рдкрд┐рди рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛, рдЕрдирдкрд┐рдирд┐рдВрдЧ, рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ "ред рд▓рдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдирдкрд┐рдирд┐рдВрдЧ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ" рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред Pin<T: Unpin>
рд╣реЛрдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдпрд╣ "рдЕрдирдкрд┐рди" рд╣реИ рддреЛ рдпрд╣ рдкрд┐рди рдореЗрдВ рдХреНрдпреЛрдВ рд╣реИ?
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ CanUnpin
рдЬреИрд╕рд╛ рдХреЛрдИ рдирд╛рдо рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧрд╛рд░рдВрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ ( Unpin
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрд┐рди рд╕реЗ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрд┐рди рд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ )ред рд╡рд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ? рдХреНрдпрд╛ CanUnpin
рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ?
( Can
рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рд╣реЛрдиреЗ рд╕реЗ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдореБрдЭреЗ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╣рддреА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрд┐рди рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ)ред
рдПрдХ рдФрд░ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд▓рд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ (рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреЗрдж рд╣реИ!) рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рднреА рддрд░реАрдХреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдб рдФрд░ рдЕрдиреБрдорд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреАрдбрд╝реЗ рдХрд╛ рднрд╛рд░ рдФрд░ рдорд┐рд▓рд╛ рд╣реИ рддрд░реАрдХреЛрдВ рдЯрдХрд░рд╛, рдФрд░ рдХреА рддрд░рд╣ рдмрд╣реБрдд рд╣реА рдЖрдо рдирд╛рдо рдЬреЛрдбрд╝рдиреЗ as_ref
рдФрд░ as_mut
рдкреНрд░рдХрд╛рд░ рдкрд░ рдЬреЛ рднреА рд▓рд╛рдЧреВ Deref
рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред
рдХреНрдпрд╛ рдпреЗ рдСрдкрд░реЗрд╢рди рдЖрдорддреМрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдЦрд┐рдо рднрд░реЗ рд╕реНрдерд╛рди рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ? (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ) рдпрд╛ рдХреНрдпрд╛ рд╡реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рд░реНрдЧ рдкреЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЪреВрдБрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдм рддреНрд╡рдЪрд╛ рд╣реИ: CanUnpin
рдореБрдЭреЗ Unpinnable
рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЖрддреНрдорд╛ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рд╣рдореЗрд╢рд╛ рд╕реЗ рд░рд╣реА рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рд▓рдХреНрд╖рдг рдирд╛рдо, рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рдХреНрд╖рдг рдЙрд╕ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╣рд┐рддрд╛рд░реНрде рдЙрд╕ рдЕрд░реНрде рдореЗрдВ "рдирд┐рд╣рд┐рдд" рдпрд╛ "-рдпреЛрдЧреНрдп" рд╣реИред рдЬреЛ рдХреБрдЫ рднреА рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдирд╛рдо рдЙрд╕ рд╕реАрдорд╛ рддрдХ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ IM-not-so-HO - рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреА), рдореИрдВ рд╕рднреА рдХреЛ рдпрд╣рд╛рдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЖрдЧреНрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╣реИрдВ!
@alexcrichton
Unpin
(рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдкрд┐рди рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛, рдЕрдирдкрд┐рдирд┐рдВрдЧ, рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ "ред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк T: Unpin
рдХреЛ " T
Pin
" рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдорд╛рдирддреЗ рд╣реИрдВ? рдлрд┐рд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ Pin<T: Unpin>
рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ Pin
рдЕрдВрджрд░ рдПрдХ рдореВрд▓реНрдп рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд▓реВрдЯ рд╣реИред
рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: Unpin
Pin
рдмреЗрдЕрд╕рд░ рдХрд░рддрд╛ рд╣реИ ред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЖрдВрддрд░рд┐рдХрдХрд░рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред ЁЯШЖ
рдЗрд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧрд╛рд░рдВрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (
Unpin
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рдкрд┐рди рд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк _can_ рдЗрд╕реЗ рдкрд┐рди рд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ)ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд░реВрдк Send
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдореВрд▓реНрдп рднреЗрдЬ рджреЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
@anp рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ CanUnpin
рдПрдХ рдорд╣рд╛рди рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╢реЙрдЯ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рд░рд┐рдорд╛рдЗрдВрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рднреА рд╕реНрдерд┐рд░реАрдХрд░рдг рдЕрдиреНрдп рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рддрд░рд╣ рдЯреНрд░реЗрдиреЛрдВ рдХреА рд╕рд╡рд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдПрдХ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдирд╣реАрдВ рдмрдиреЗрдЧрд╛ рдФрд░ рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ASAP рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 7 рд╕рдкреНрддрд╛рд╣, рд▓рдЧрднрдЧ рджреЛ рдорд╣реАрдиреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдЬрд░реВрд░реА рд╣реИ, "рдЪрд▓реЛ рдЗрд╕ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП", "рд╕реЛрдорд╡рд╛рд░ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╣рд▓ рди рдХрд░реЗрдВ" рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ред
@stjepang I рдиреЗ рднреА, рдЗрддрдирд╛ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдм Unpin
рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ! рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╛рдо рдХрд╛рдлреА рдХрдо рд▓рдЧрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ Pin
рдПрдкрд┐рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реЛ, рдмрд╛рдж рдореЗрдВ рдХрд╣рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдореИрдВ рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдЖрдЧреЗ рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред
@rfcbot рдЪрд┐рдВрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░-рдкреНрд░рд▓реЗрдЦрди
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ:
P
DerefMut
рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди "рдЙрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛" Pin::new_unchecked
рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИредunsafe
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрдпреЛрдВ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬреЛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддреА рд╣реИредPin
рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ "рдХреИрд╕реЗ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЕрдЪрд▓ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ" рдпрд╛ "рдХреИрд╕реЗ Pin
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд╛рдпрджрд╛ рдХреЗ рд╕рд╛рде" рдЬреИрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛редUnpin
рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдпрджрд╛ рдореЗрдВ рдХрдИ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреБрдЫ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░реЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдХреИрд╕реЗ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдЦреЗрд▓рддреЗ рд╣реИрдВ Unpin
рдХрд╛рдлреА рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИредрдЕрдЧрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рднреА рдареЛрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рднреА рдЙрддреНрд╕реБрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдореИрдВ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВ!
рдЖрдЧреЗ рдореИрдВ self
рд╕рд╛рде as_ref
self
-рдлреЙрд░реНрдо рдкрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╣реЛрдЧрд╛ред (рдлрд┐рд░ рд╕реЗ рдЗрд╕реЗ рдЬрд▓реНрджреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)
@rfcbot рдХреЛ рд╕реНрд╡-рддрд░реАрдХреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рд╣реИ
рдпрд╣ as_ref
, as_mut
, get_ref
, get_mut
, into_ref
, рдФрд░ set
рд╕рднреА рдкрд░ рддрд░реАрдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред Pin
рдкреНрд░рдХрд╛рд░ред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд┐рдзрд┐ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рдХрд╛рд░рдг рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрднрд╡ рдЖрдЬ рдХреЗ рд▓рд╛рдЧреВ Pin
API рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЕрдХреНрд╕рд░ рдмрд╕ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпреЗ рд╡рд┐рдзрд┐ рдирд╛рдо, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рдЫреЛрдЯреЗ рдФрд░ рдореАрдареЗ рдирд╛рдо рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред Libs рдЯреАрдо рдЕрддреАрдд рдореЗрдВ рдмрдЧ рдХреА рдХрднреА рди рдЦрддреНрдо рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреА рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдЬреЛрдЦрд┐рдо рд▓рдЧрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрднреА рднреА Pin
рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдирд╛рдо рдЕрдм рдХрд┐рд╕реА рднреА рднрд╡рд┐рд╖реНрдп рдХреЗ рдирд╛рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЯрдХреНрдХрд░ рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рдЬреЛрдЦрд┐рдо рд╣реИред
рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдХрдиреНрд╡реЗрдВрд╢рди рд╕реЗ рдЗрд╕ рдбрд╛рдЗрд╡рд░реНрдЬреЗрдВрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдПрдХ рдордзреНрдп-рдЧреНрд░рд╛рдЙрдВрдб рдкрд╛ рд╕рдХреЗрдВ рдЬреЛ рдЗрди рдЦрддрд░реЛрдВ рд╕реЗ рдмрдЪ рд╕рдХреЗред
рдФрд░ рдЬрдм рдореИрдВ рдЙрд╕ рдкрд░ рд╣реВрдБ, рдПрдХ рдЖрдЦрд┐рд░реА рдЪреАрдЬрд╝ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрдЧрд╛
@rfcbot рдЪрд┐рдВрддрд╛ рдмреЙрдХреНрд╕-рдкрд┐рди-рдмрдирд╛рдо-рдмреЙрдХреНрд╕-рдкрд┐рди
рдирд╛рдо рд╣реИ Box::pin
рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ Box::pinned
? Pinned
рдФрд░ / рдпрд╛ PhantomPinned
рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдирд╛рдо рд╡рд╛рдкрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ!
@alexcrichton рдиреЗ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ MoveFromPin
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк "рдирд╛рдо рдЬреЛ рдкреВрд░реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИрдВ ... рдмрд╣реБрдд рд╣реА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдВрдЧреЗ" (@withoutboats) рдФрд░ рдпрд╣ "рдЕрднреА рддрдХ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛рдЬрдирдХ" рд╣реИ @cramertj)ред
рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ "рдореИрдВ рдЕрдм рддрдХ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реВрдВ ..." рдХреА рдирд╕ рдореЗрдВ рдкреНрд░реЗрд░рдгрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж "рдореБрдЭреЗ рдЕрд╕рд╣рдЬ рдХрд░реЗрдВред" рдордиреБрд╖реНрдп рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд╛рдж рдХреЗ рд╡рд╛рдХреН-рддрд░реНрдХрд╕рдВрдЧрдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдВрдд рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП ред (рдпрд╣ рдмрд╣реБрдд рд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ -suboptimal рдирд╛рдо рдЬреИрд╕реЗ existential type
рдХреЛ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╡реЗ рд╕реНрдерд╛рдпреА рдмрдирдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред)
рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдЬреЛ рд╣рдо рд╕рднреА рд╣реИрдВ!) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдХрд╕реНрдорд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдлреНрд░реЗрд╢рд░ рджрд┐рдорд╛рдЧ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдкрд░ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рддрд░рд╣ рдХреА рдЧрд▓рддреА рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдХрднреА рднреА рд╕рддрд░реНрдХ рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рддрдирд╛ рдХрдард┐рди рд╣реИ ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрд╕рдЯреАрдбреА рдХрд╛рдо рдХреА рд╢реИрд▓реА рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CanUnpin
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╡рд┐рд╢реЗрд╖ рдЯреБрдХрдбрд╝рд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
рдПрдХ рдРрд╕реЗ рдирд╛рдо рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝реЗ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП Unpin
рдХрд╛ рдЕрд░реНрде рдмрддрд╛рддрд╛ рд╣реИред Send
рдФрд░ Sync
рднреА рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдЪреНрдЫреЗ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рджрд┐рдЦрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА Unpin
ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрди рдирд╛рдореЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдирдХреЗ рдбреЙрдХреНрд╕ рдЬрд░реВрд░ рдкрдврд╝рдиреЗ
@valff рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдлреА рд▓реЛрдЧ рдРрд╕реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдбреЙрдХреНрд╕ рдкрдврд╝реЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдлрд┐рд░ рднреА Unpin
рдирд╛рдо рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирд╕рд┐рдХ рдХрдард┐рдирд╛рдИ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдирд╛рдо рдХрдо рд╣реЛрддреЗ рд╣реИрдВред
@glaebhoerl рдУрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ MoveFromPin
рдпрд╛ CanUnpin
рд╡рд░реНрддрдорд╛рди Unpin
рдХреЗ рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реВрдВред рдмрд╕ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЬрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ!
рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдЧрддрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдирд╛рдордХрд░рдг рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓ рд╕рдХреЗред
Pin
рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рд╕реНрдерд┐рд░ рдкрддреЗ рдкрд░ Drop
рдмрдврд╝рд╛рдирд╛ Pin
рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдбрд╛рд▓рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ unsafe fn new_unchecked(pointer: P) -> Pin<P>
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдЖрд╡рд╢реНрдпрдХ рдкреВрд░реНрд╡ рд╢рд░реНрддреЛ рдХрд╛ рд╕реАрдзреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдПрдХ Pin
рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдЙрдирдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмреЗрд╣рдж рдорджрдж рдХрд░рддрд╛ рд╣реИредwe agreed that we are ready to stabilize them with no major API changes.
рд╕рд╛рде рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдкреБрд░рд╛рдиреА рдПрдкреАрдЖрдИ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдЗрд╕рдореЗрдВ Drop
рдФрд░ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдЗрд╕рдореЗрдВ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБ рдПрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реВрддреНрд░реАрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреБрд░рд╛рдиреА рдФрд░ рддрд╛рдЬрд╝рд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдпрд╣ рдорд┐рд╢реНрд░рдг рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЖрдЙрдЯрдбреЗрдЯреЗрдб рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВредslight extension
рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, Unpin
рдкрд╣рд▓реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдордЬрдмреВрдд рд╣реИред рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд┐рди рдХрд┐рдП рдЧрдП рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╕рдВрдкреАрдбрд╝рд┐рдд рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣реИ, рд▓реЗрдХрд┐рди Unpin
рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрд╢рди рд╕реЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЖрдХреНрд░рдордг рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд┐рди рд░рд╛рдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреИрд╕реЗ Drop
рдПрдХ рдирд░рдо рд╕рдВрд╕реНрдХрд░рдг) редрд╕реНрдкрд╖реНрдЯрддрд╛: рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдирд╛рдореЛрдВ рдкрд░ MoveFromPin
рдкрдХреНрд╖ рд▓реЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрдХреАрдирди рдХреГрддреНрд░рд┐рдо рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА @alexcrichton рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорди рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдореБрдЦ рдареЛрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдЖрдЗрдЯрдо map_unchecked
рдФрд░ map_unchecked_mut
рдореЗрдВ рдкрд┐рди рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдирд┐рдпрдо рдХреЗ рдкреАрдЫреЗ рдХреЗ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрд╛рдПрдЧреА ред рдХреА рддрд░реНрдЬ рдкрд░ рдХреБрдЫ:
рдПрдХ рдкрд┐рди рд╕рдВрджрд░реНрднрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдЧрд┐рд░рд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдВрд░рдЪрдирд╛ рдпреБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рдкрд┐рди рд░рд╛рдЬреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ
Drop
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░реЗ рдлреИрд▓рддрд╛ рд╣реИред рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рдзреНрд╡рдВрд╕ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рднреАрддрд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред
рдСрдЯреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП ElidePin
рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдпрд╣ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡рд╣ рдЕрдирдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдФрд░ !ElidePin
рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рдирдХ рдорд╛рд░реНрдХрд░ рдореЗрдВ рдкрд┐рдирд┐рдВрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣реА рдирд╛рдо рдирд╣реАрдВ рд╣реИред Pinned
рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рдЙрдХрд╕рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкрд┐рдирд┐рдВрдЧ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рджред рдпрд╣ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рди рддреЛ рдорд╣рддреНрд╡рд╣реАрди рднреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИред
MoveFromUnpin
/ RemoveFromUnpin
рд▓рд┐рдП рдореЗрд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд░реЛрдз рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдФрд░ рдореИрдиреБрдЕрд▓ Future
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред CanUnpin
/ DePin
рджреЛрдиреЛрдВ рдареАрдХ me-- рдХреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдерд╛ рдкреНрд░рддреАрдд Unpin
рдХреА рдкрджреНрдзрддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг Read
/ Write
/рдЖрджрд┐ред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ +1 рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдирдордХ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ NotWhateverUnpinBecomes
рд╢рд╛рдпрдж Pinned
рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, Adhere
рдЕрд░реНрде рджреЛрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдФрд░ рдЪрд┐рдкрдХрдирд╛ рд╣реИред : Slightly_smiling_face:
CanUnpin / DePin рджреЛрдиреЛрдВ рд╣реА рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддреЗ рд╣реИрдВ - рдХрд╛рд╢ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рдХрд┐ Unpin рд░реАрдб / рд░рд╛рдЗрдЯрд┐рдВрдЧ рдЖрджрд┐ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Unpin
рд╡рд┐рдкрд░реАрдд Read
Unpin
рд╣рд╛рд░реНрдб рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред Read
рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рддрд░реАрдХрд╛ Read::read
- рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирдирд╛ рд╣реИ рд╡рд╣ trait
рдореЗрдВ рд╡рд╣реАрдВ рд╣реИред рдпрджрд┐ x
Read
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ x.read()
- write
Write
рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЖрджрд┐ рдпрд╣ рд╕рдордЭрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ X
Unpin
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Pin<Ptr<X>>
DerefMut
- рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл X
ред
рдкрдврд╝рдиреЗ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ :: рдкрдврд╝реЗрдВ
рдпрджрд┐ рдХреЗрд╡рд▓ рд╣рдо auto trait
рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ / GATs рдореЗрдВ рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо Unpin::unpin
- fn unpin<P: DerefFamily>(self: Pin<P::Deref<Self>>) -> P::Deref<Self>
)ред ..... рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рдХрдо рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ;)
(рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдиреЛрдЯ рдкрд░, рдореИрдВ Pin::unpin
Pin<P<T>>
рд╕реЗ P<T>
рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░реВрдБрдЧрд╛)
рдореИрдВ рдкрд┐рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдБ :: рдкрд┐рди рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдкрд┐рди
> рд╕реЗ рдкреА
рдпрд╣ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рджреЛ рд╢рдмреНрджреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рд╡рд░реНрддрдорд╛рди рдирд╛рдо рдХреА рддрд░рд╣ред unpin
рдмрд╣реБрдд рдкреНрд░рдХрд╛рд░ рдХреА рд░рд╛рдЬреНрдп рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдЙрд▓рдЯрдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ fn unborrow(&'_ T)
рдпрд╛ fn unmove(??)
ред рдЪреВрдБрдХрд┐ pin
рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА Drop::drop
рдПрдб рди рд╣реЛ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рдЙрд▓реНрдЯрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрд░рд╛рдмрд░ рдЧрд╛рд░рдВрдЯреА рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рднреА рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИ рдЬреЛ рдореИрдВ рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдг рдФрд░ io::Read
рдЬреИрд╕реЗ рдХреБрдЫ рдХреЗ рдмреАрдЪ рджреЗрдЦрддрд╛ рд╣реВрдВред рдПрдХ рд╕рдВрдХрд▓рдХ рдпрд╛ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╣реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП unpin
рдЖрд╡рд╛рдЬрд╝ рдЖрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЙрд▓рдЯрд╛ рдХрд╛рд░реНрдп pin
ред рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рднреА рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдирдкрд┐рди рдСрдкрд░реЗрд╢рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП into_pointer()
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХреЗ рдмрд╛рдж рднреА рд╕рдЯреНрдЯреЗрдмрд╛рдЬреА рд╣реЛрдЧреАред
рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдХрд╛рдо рдХреЗ рд╕рд╛рде unpin
рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ 'рдареАрдХ' рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ fn unpin(self: Pin<&'a mut T>) -> &'a mut
рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдЬреАрд╡рди рднрд░ рдХреЗ рд▓рд┐рдП Pin
рдХреА рд╕рднреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдЬрдмреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИред 'a
ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рджреЛрдиреЛрдВ рдмрд┐рдВрджреБ рдЕрдм рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╣реА рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдореЗрдВ рдбреНрд░реЙрдкрд┐рдВрдЧ рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рд░рд╛рдЬреНрдп рдХреЛ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИ)ред рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдЧрдгрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ рдХреБрдЫ рдЖрддреНрдо рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред
рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдПрдХ рднреНрд░рдорд┐рдд рдирд╛рдо рднреА рдЗрди рджреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдХреЗ рдЧреИрд░-рднреНрд░рдорд┐рдд рдирд╛рдореЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ред
MoveFromUnpin / RemoveFromUnpin рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд░реЛрдз рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ MoveFromPin
, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ - рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдпрд╛ рдбрдВрдм рдСрдЯреЛрдХрдореНрдкрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╡реИрд╕реЗ рднреА рдХреЛрдИ рдирд╣реАрдВ рд╣реИред
рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕рдордЭ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд░реВрд╕реНрдЯ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдХреНрд░рд╛рдордХ рддрд░реАрдХреЗ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреАрдд рдореЗрдВ рдереЛрдбрд╝реА рдЖрд▓реЛрдЪрдирд╛ рдХреА рдереА ( fn
, mut
, рдЖрджрд┐), рдЬреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдХреЛ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд▓рд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ, рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@rfcbot рдирд╛рдордХрд░рдг-рдЕрдирдкрд┐рди рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ
рдареАрдХ рд╣реИ, рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЯрд╣рд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣реВрдВ ред рдореИрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖрдпрд╛ рд╣реВрдБ рдХрд┐ рдЕрдм рдореИрдВ рдХрдо рд╕реЗ рдХрдо Unpin
рд╕рд╛рде рдорд╛рд░реНрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рд╣рдЬ рд╣реВрдВред рдирддреАрдЬрддрди, рдореИрдВ рдПрдХ рдЕрд╡рд░реБрджреНрдз рдЖрдкрддреНрддрд┐ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рд▓рд┐рдмрд╛рд╕ рдЯреАрдо рдХреЗ рдЕрдиреНрдп рд▓реЛрдЧ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ!)
рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ Unpin
рдЖрд╕рдкрд╛рд╕ рдЖрдпрд╛ рд╣реВрдВ рдореВрд▓ рд░реВрдк рд╕реЗ @cramertj рдиреЗ рдЬреЛ Unpin
(рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рддрдХ рд░рд╣рддрд╛ рд╣реИред
рдЬрдмрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ "рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ" рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдордп рдХрдо рд╕реЗ рдХрдо, рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рднреА рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред Unpin
рдХреЛ рд╕рдордЭрдирд╛ Send
рдФрд░ Sync
, рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ "рдЕрд╡рд░реБрджреНрдз рдЖрдкрддреНрддрд┐рдпреЛрдВ" рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд╡реЗ рдкреНрд░рддрд┐ рдЦрдВрдбрди рдЖрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ TODO рдЖрдЗрдЯрдо рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреНрдпрдерд╛ рдЗрддрдиреЗ рд▓рдВрдмреЗ рдзрд╛рдЧреЗ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ! рдЙрд╕ рдирд╕ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдордп рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдареАрдХ рд╣реИ FCP рдПрдХ рд╕рдкреНрддрд╛рд╣ рдпрд╛ рдЕрдм рдХреЗ рд▓рд┐рдП рд╡реНрдпрддреАрдд рд╣реЛ рдЧрдпрд╛ред рд╕реНрд╡рдпрдВ / рдкрд┐рди / рдкрд┐рди рдХрд┐рдП рдЧрдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдКрдкрд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдкреНрд░рд▓реЗрдЦрди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдирд╣реАрдВ рд╣реИред рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдбреЙрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдЪрдХреНрд░ (6 рд╕рдкреНрддрд╛рд╣) рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреВрд░реНрдг async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╣рд╛рдиреА рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдордп рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдЙрд╕ рд╕рдордп рдХреЗ рднрд╛рд░ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рд╣реИ, рдФрд░ рдЕрдм рдЬреЛ рдХреБрдЫ рд╣реИ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИ!
рдпрд╣рд╛рдБ "рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░" рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? Reloc[ate]
, Escape
, Evade
, Pluck
, рдпрд╛ Roam
рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдПрдХрддрд░рдлрд╛ рд╣реИ? рд╡реЗ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рджреЛрд╣рд░реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@alexcrichton рдХреНрдпрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ Unpin
рдХреЛ Depin
рдпрд╛ DePin
рд╕реЗ рдЕрдзрд┐рдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Depin
рдмрд╣реБрдд рдареЛрд╕ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рдпрд╣ рдореБрдЭреЗ Unpin
рдХреЗ рд╕рдорд╛рди рдорд╛рдирд╕рд┐рдХ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░рдг рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдкрд┐рди рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдирдкрд┐рди рд╣реИред рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореБрдЭреЗ Unpin
рд╕рдордЭрдиреЗ рдореЗрдВ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
@jimmycuadra Rust рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд╛рдо рд╣реИрдВ рдЬреЛ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ stdlib рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдПрдХ рдирд╛рдо рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред
@Pauan рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдг рд╣реИред рдПрдХ рджреЗрд╢реА рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, Depin
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рднреВрд▓ рдЧрдП рдХрд┐ рдЕрдирдкрд┐рдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рдореМрдЬреВрдж рд╣реИ рдФрд░ рдПрдХ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рдореБрдЭреЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ: рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж "рдбреЗрдкрд┐рдирд┐рдВрдЧ" "рдЕрдирдкрд┐рдирд┐рдВрдЧ" рд╣реИред
рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рджреГрд╢реНрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рдереЗ рдЬреЛ "рдЕрдирд▓реЙрдХ" рдХреЗ рдмрдЬрд╛рдп "рдбреЗрд▓реЙрдХ" рдХрд╣рддреЗ рдереЗред
"рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░" рджреНрд╡рд╛рд░рд╛ @jaredr рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓реЗ (рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП) Read
рдФрд░ Write
рд▓рдХреНрд╖рдг рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЙрди-рд╡рд░реНрдбреА-рдирд╛рдореЛрдВ, рдХреНрд░рд┐рдпрд╛рдУрдВ, рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд╛ рдПрдХ рд╕рдореНрдореЗрд▓рди рд╣реИред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдирд╛рдо рдЬреИрд╕реЗ рд╕рднреА рд╕рдВрднрд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди Unpin
(рдпрд╛ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рд▓рдЧрддрд╛ рд╣реИ) рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ ("рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдирдкрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдЧрд╛рд░рдВрдЯреА)ред рдЕрдиреНрдп, Unpin
рдвреАрд▓реЗ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдХреЗрд╡рд▓ "рдЕрдирдкрд┐рди" рд╢рдмреНрдж рд╕реЗ рдирд╛рдо рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрднреА-рдХрднреА Pin
Unpin
рд╕рд╛рде рдПрдХ рд╣реА рд╕рдВрдмрдВрдз рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдХрд░ рджреЗрддрд╛ рд╣реИред
@Pauan рдореИрдВ рд╣реВрдВ рдХрд┐ Depin
рдЖрд╡рд╛рдЬрд╝ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Unpin
ред
@aturon рдиреЗ https://github.com/rust-lang/rfcs/pull/2592#issuecomment -438873636 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐:
Pin
рдХрд╛ рдЙрдкрдпреЛрдЧ&self
рдмрдирд╛рдо&mut self
рдХреА рдкрд╕рдВрдж рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХрд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ; рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐Pin
рд╕реНрд╡рдпрдВ рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдореЛрдб рд╣реЛрдЧрд╛ред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЬреЛ рдмрддрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╡рд╣Pin
, рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдореВрд▓ &pin
рдпрд╛ рдХреБрдЫ рдФрд░ ... рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ Pin<&mut T>
рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд░реНрдЧ рдХрд░рддрд╛ рд╣реИред @Withoutboats рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @cramertj рдХреЗ рд╕рд╛рде рдореЗрд░реА рдмрд╛рддрдЪреАрдд рдореЗрдВ, рд╡реЗ рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдХреЗ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдереЗ рдФрд░ рд╣рдо Pin<T>
рд╕реЗ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
pin
рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛрдЧреА рдХрд┐ рд╣рдо рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВред рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреБрдХрдбрд╝рд╛; рддреЛ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣рд╛рд░реВрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдФрд░ рдиреМрдХрд╛рдУрдВ рдФрд░ рдЯреЗрд▓рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЕрдиреНрдп, рдЬрдмрдХрд┐ рдЕрдирдкрд┐рди рдХреЗ рдвреАрд▓реЗ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЕрдирдкрд┐рди" рд╢рдмреНрдж рд╕реЗ рдХрд╛рдлреА рд╣рдж рддрдХ рдХреЗрд╡рд▓ рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдкрд┐рди рдХреЗ рд╕рд╛рде рдЙрд╕реА рд╕рдВрдмрдВрдз рдХреЛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдирдкрд┐рди рдХрд░рддрд╛ рд╣реИред
@alexcrichton рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ? рдЬреИрд╕реЗ Send
рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ / рдХреЙрдкреА (=) рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Sync
рдЙрдзрд╛рд░ (рдФрд░) рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдПред рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@ crlf0710 рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред Send
рдФрд░ Sync
рдЗрд╕ рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ ("рдереНрд░реЗрдб рдХреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВ" рдФрд░ "рд╕рд┐рдВрдХ рдХрд░реЗрдВ" рдереНрд░реЗрдбреНрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рдФрд░ рдЙрдирдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдПрдХ рдСрдкрд░реЗрд╢рди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рдирд╛рдордХрд░рдг рд╕реЗ рдмрдЪреЗрдВ
@alexcrichton рдмрд┐рд▓реНрдХреБрд▓! рддреЛ рд╢рд╛рдпрдж рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рдХрд░ рд░рд╣рд╛ рд╣реИред ( "рдЪрд▓рддреА (рдПрдХ рдХреНрд░рд┐рдпрд╛ рдпрд╣рд╛рдБ) рдПрдХ Pin
ред рдореИрдВ рдореВрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рдХреНрддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pin
рд╕реЗ "рдЕрдирдкрд┐рдирд┐рдВрдЧ" рдереЛрдбрд╝рд╛ ... рдЕрдЬреАрдм рд╣реИ?
@ crlf0710 рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЧреБрдг рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдкрд┐рди рд╕реЗ <moving>
рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ <moving out of a Pin>
ред рдЪрд╛рд▓ рдХреЗ рд▓рд┐рдП рдФрд░ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд┐рди рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред
рддреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдирд╛рдо рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдПрдХ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП," рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП "рдЕрдирдкрд┐рди" рд╢рдмреНрдж рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдХреНрд╖рдирд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ "рдЕрдирдкрд┐рди" рд╣реИ:
- рдПрдХ рдкрд┐рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ unfasten рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- (рд╕рдХрд░реНрдордХ, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕) рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ (рдПрдХ рдЖрдЗрдХрди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрджрд┐) рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@withoutboats рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ Unpin
рдирд╛рдо рдпрд╛ рдХрд┐рд╕реА рднреА рдирд╛рдо рдХреА рдЬрдВрдЧ рдЯреАрдо рдХреЛ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдкрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдФрд░ рдореИрдВ "рдЪрд▓рддреА" рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордЭрддрд╛ рд╣реВрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдмрд╣реБрдд рдорд╛рдореВрд▓реА "рджреЛрд╣рд░рд╛рд╡" рд╣реИред рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд░рд╛рдЬреА рдХрд░рдирд╛ рд╣реИ: рдЗрд╕рдХрд╛ рдорддрд▓рдм "рдЕрдХрд▓реНрдкрдиреАрдп" рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рдПрдЧреА рдЕрдЧрд░ рдпрд╣ рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рд╣реИред
рдЙрд╕реА рд╕рдордп рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЕрдВрддрд┐рдо рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Detach
рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛ рднреА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝реА рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рджреЗрд╢реА рд╡рдХреНрддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмреЛрд▓ рд╕рдХрддрд╛ред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред
рдореИрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрд╕рдВрддреБрд╖реНрдЯ рдкрд┐рди рдХрд┐рдП рдЧрдП рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдХрд┐ рдпрд╣ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ
pin_proj! { let MyStruct { field1, field2 } = a_pinned_mutable_reference; }
рдЦреЗрддреЛрдВ рдореЗрдВ рдкрд┐рди рдХрд┐рдП рдЧрдП рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ Pin<&mut MyStruct>
рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдирд╛ред
рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
Kite
рдкреНрд░рдХрд╛рд░ "рд╣рдореЗрд╢рд╛- Unpin
" рдлрд╝реАрд▓реНрдб рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПUnpin
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдУрдкреНрд░рдХреНрд╖реЗрдкрдг рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╣рдо " Kite
рдХреЛ рдкрд┐рди рдХрд┐рдП рдЧрдП рдЕрдиреБрдорд╛рдиреЛрдВ" рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд▓рдд рд╣реИред
рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Unpin
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд░рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
@qnighy рдЕрдкрдиреЗ Drop
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ Drop
рдмрд░рд╛рдмрд░ Unpin
рд▓рд┐рдП рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рддрд╛ рд╣реИред Unpin
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Drop
рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдд рдХреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдкрд┐рди рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рдХреБрдЫ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реАрдорд╛рдУрдВ рдХреЛ рдореБрдЦрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рд░рд╕реНрдЯ рдореЗрдВ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
@ crlf0710
рдЙрд╕реА рд╕рдордп рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЕрдВрддрд┐рдо рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдбрд┐рдЯреИрдЪ рдХреНрд░рд┐рдпрд╛ рднреА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рджреЗрд╢реА рд╡рдХреНрддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмреЛрд▓ рд╕рдХрддрд╛ред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред
рдбрд┐рдЯреИрдЪ рдореВрд╡ рдФрд░ рд░рд┐рд▓реЛрдХреЗрдЯ рдЬреИрд╕реЗ рдирд╛рдореЛрдВ рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд▓рдЧ рд░реВрдкрдХ рдХреЗ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ (рдЗрд╕реА рддрд░рд╣ "рдПрд╕реНрдХреЗрдк рдПрдирд╛рд▓рд┐рд╕рд┐рд╕" рдЖрджрд┐ рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реИ)ред рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд░реВрдкрдХ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рдЕрдирдкрд┐рди рдХреЗ рдПрдХ рдФрд░ рдирдП рд▓рд╛рдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ: "рдкрд┐рди" рд░реВрдкрдХ рдкрд░ рдХрд╕рдХрд░ рдХреНрд▓реАрдпрд░ рдХрд░рдХреЗ, рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреА рд╕рд░реНрдлрд╝рд┐рд╢рд┐рдпрд▓ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЯреИрдЪ рдпрд╛ рдПрд╕реНрдХреЗрдк рдпрд╛ рд░рд┐рд▓реЛрдХреЗрдЯ рдЬреИрд╕реЗ рдирд╛рдоред
@withoutboats рдЗрд╕ рдмрд┐рдХреЗрд╢реЗрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рдирд╛рдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдирд┐рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдХреЛрдИ рдЦрд╛рд╕ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ; рдХреНрдпрд╛ рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдп Detach
рдлрд┐рдЯ рд╣реЛрдЧрд╛ (рдпрджрд┐ рдЖрдк рдЕрдЯрдХрд▓реЗрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ ...)?
@ рдХреЗрдВрджреНрд░ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
@withoutboats рд╣рд╛рдБ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ; рдЪрд┐рдпрд░реНрд╕!
@withoutboats рдореИрдВ рдирд╣реАрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд┐рдХреНрд╖рдирд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рд╣реВрдБ Unpin
рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП move from a pin
ред рднреМрддрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд░реВрдкрдХ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИрдВ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдЪрд▓рдирд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреВрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд┐рди рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'upinning' рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рд╕рдВрджрд░реНрднрд┐рдд рдореЗрдореЛрд░реА рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╣ рдЖрд╡рдВрдЯрди рдФрд░ рд╡реИрдзрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ T
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред T
рдХрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рд╣реЛрдЧрд╛ред рдФрд░, unpinning
рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ moving
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдо рдХреЗ рдФрдЪрд┐рддреНрдп рд╕реЗ рдЕрдзрд┐рдХ рднреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдореЗрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдРрд╕рд╛ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдпрд╣ рдкрд┐рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИ)ред рдореБрдЭреЗ Pin<Box<T>>
рд╕реЗ Box<T>
(рдФрд░ T
) рдХрд╛ рд╕рдВрдХреНрд░рдордг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рд╕реНрддрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ Unpin
рдЪрд╛рд╣рд┐рдП рдРрд╕реА рдордЬрдмреВрдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рднреА рдЕрдВрддрд░ рдХрд╣рд╛рдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рдерд╛, Pin
рдХреБрдЫ рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ Unpin
рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ T
s рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдкрд┐рди рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рднреВрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдореИрдВ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рднрд▓реЗ рд╣реА T
Unpin
, рдХреНрдпрд╛ рдореИрдВ T::drop(&mut)
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдЙрд╕ рдореЗрдореЛрд░реА рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореЗрдореЛрд░реА рдбреАрд▓реЙрдХреНрд▓реЗрдЯреЗрдб рд╣реИ? рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдФрдкрдЪрд╛рд░рд┐рдХрддрд╛ рд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рд╣рд╛рдВ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдирд╛рдо Unpin
рдореЗрд░реЗ рд╡рд┐рдкрд░реАрдд рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2: Rc
рдПрдХ Pin<&T>
рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди T: Unpin
рдЕрднреА рднреА drop
рдореВрд▓ рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рд╣реИред рдкрд┐рди рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╕рдВрджрд░реНрдн рд░рдЦреЗрдВ, рдлрд┐рд░ рдкрд┐рди рдХреЛ рдЧрд┐рд░рд╛ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк Rc::try_unwrap
рд╕рд╛рде рдмрд╛рд╣рд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=dec6f6c6d2c0903d87a4a9cefe50a0a рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд╢рд╛рдпрдж IgnorePin
? рддреЛ T
рд╣реИ IgnorePin
рдЖрдк рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░ рд╕рдХрддреЗ Pin<Box<T>>
рдХреЗ рд░реВрдк рдореЗрдВ &mut T
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЕрдирджреЗрдЦреА Pin
(AIUI рднреА рдЕрдирджреЗрдЦреА Box
)ред рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ IgnorePin
рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред IgnorePin
рдпрд╣ рдХреНрдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИ, рдпрд╣ рдкреНрд░рдХрд╛рд░ рдкрд░ рд░рдЦрд╛ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рди рддреЛ Unpin
ред
@wleyley рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рдерд╛, ElidePin
, рдКрдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрдм рдореИрдВ рд╕рд╣рдорддрд┐ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХреНрдпреЛрдВ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд▓рдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ 'рдПрдХ рдХреНрд░рд┐рдпрд╛' рд░рд╕реНрдЯ рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рд╣реИред рднрд▓реЗ рд╣реА рдпрд╣ !ElidePin
/ !IgnorePin
рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдирд┐рд╖реЗрдз рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред
@withoutboats рдкреНрд░рд╢реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ: рдЪреВрдВрдХрд┐ рдкрд┐рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЗрдореЛрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдкрд┐рди ZST рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ? Pinned
ZST рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдПрдХ ZST Unpin
рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореИрдВ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреА рдореЗрдореЛрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрднреА рднреА рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ T::drop(&mut self)
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрднреА рднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИ рдХрд┐ рдХреЛрдИ рдПрдХ рд▓реАрдХ рд╕реЗ &mut 'static _
рдореЗрдореЛрд░реА рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ Box
ред рдЙрд╕реА рд╕рдордп, рдпрд╣ рд╕рдм рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдПрдХ Pin<P<T>>
рдХреЗ рд╕рд╛рде рдПрдХ T: !Unpin
рдФрд░ рдлрд┐рд░ рддреБрд░рдВрдд рдореВрд▓реНрдп рдЕрдирдкрд┐рди, рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд┐рди рдиреЗ рдХрд╣рд╛ рдХрд┐? рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЕрдЧрд░ рдкрд┐рди рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреЛрд▓-рдЬреИрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?
@HeroicKatora рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдЬ Drop
рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рдХрд╛рд░рдг !Unpin
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛:
struct S<T>(T); // `!Unpin` if `T: !Unpin`
impl<T> Drop for S<T> { ... }
@cramertj рдзрдиреНрдпрд╡рд╛рдж, рдмрд╕ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред
@cramertj рддреЛ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛ рдкрд░ T: ?Unpin
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░рддреЗ рд╣реИрдВ? рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рдирд╣реАрдВ рд╡рд╣рд╛рдБ рдПрдХ рдФрд░ рдХрд╛рд░рдг рдХреЗ рдкреАрдЫреЗ рд╣реИ T: Unpin
рдореМрдЬреВрджрд╛ рддрд░рд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Sized
? рдпрд╣ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд░реВрдк рд╕реЗ рд╕рдЦреНрдд рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдЯреЛ рдмрд╛рдзреНрдп рд░реЗрдЬрдЧрд╛рд░реА рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ?
@HeroicKatora рдХреЛ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ ?Unpin
рд╕реАрдорд╛ рдХреЛ рдЫрд┐рдбрд╝рдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЬрд┐рд╕рдореЗрдВ Unpin
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред
рдПрдХ рдбреНрд░реЙрдк + рдЕрдирдкрд┐рди рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдПрдХ рдЕрдиреНрдп рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдлреИрдВрдЯрдордкрд┐рдирдб рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЯреА рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рди рд╣реЛрдиреЗ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ: рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирдкрд┐рди?
рдЕрдирдкрд┐рди рд╕реЗрдВрдб рдПрдВрдб рд╕рд┐рдВрдХ рдХреА рддрд░рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдПрдХ рд╣реА рд╢рдмреНрджрд╛рд░реНрде рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдЯреЛ рд▓рдХреНрд╖рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрдирд░рд┐рдХ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рд╕рд╛рдЗрдЬрд╝ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдСрдЯреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ)ред
рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЕрдЧрд░ рдкрд┐рди рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреЛрд▓-рдЬреИрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╣рдореЗрдВ рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреВрдмреА рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдмрд▓реНрдХрд┐, рдЗрд╕рдХрд╛ рд╡рд╣ рдХреЛрдб, рдЬреЛ рдПрдХ рдкрд┐рди рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдпрд╣ рдЕрдирдкрд┐рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╣реЛрдиреЗ рддрдХ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдпрд╣ рдпреВрдмреА рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдХрднреА рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рдВрдХрд▓рдХ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд┐рди рдХреНрдпрд╛ рд╣реИ)ред
рддреЛ рд╣рд╛рдВ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЧрд╛рд░рдВрдЯреА рдкрд░ рдХреЛрдИ рдХреЛрдб рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд░реНрде рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдХреЛрдб рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@cramertj рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реЛрдЧрд╛ред рдореИрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ Pin
Drop
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрд╕рд╣рдЬ рд╣реВрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢реБрджреНрдзрддрд╛, рдкреНрд░рдпреЛрдЬреНрдп рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреАред рдХреНрдпрд╛ рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдВрдкрд╛рджрди 2 рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:
рдЖрд░рд╕реА рдПрдХ рдХреЛ рдкрд┐рди <& T> рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯреА рдХреЗ рд▓рд┐рдП: рдЕрдирдкрд┐рди рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдореВрд▓ рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдбреНрд░реЙрдк рдирд╣реАрдВ рд╣реИред рдкрд┐рди рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╕рдВрджрд░реНрдн рд░рдЦреЗрдВ, рдлрд┐рд░ рдкрд┐рди рдХреЛ рдЧрд┐рд░рд╛ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк Rc :: try_unwrap рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=dec6f6c6d2c0903d87a4a9cefe50a0ca
@HeroicKatora рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ Mem<'a>: Unpin
, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреА рд░реЗрдЦрд╛ рдЙрди рдорд╛рдиреНрдпрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ Unpin
рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЗ gist рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдмреВрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ Mem<'a>: Unpin
: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=201d1ae382a590be8c5cac13af279aff
рдЬрдм рдЖрдк Pin::new
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдирдкрд┐рди рдмрд╛рдЙрдВрдб рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдЙрди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдХрд╛ рд▓рдХреНрд╖реНрдп Unpin рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЦрд╛рдорд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ Rc<T: ?Unpin>
рд╕реЗ Pin<Rc<T>>
рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ Rc::pinned
рд╕рд╛рде рдкрд┐рди рдореЗрдВ Rc рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
@withoutboats рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХрд┐ T: Unpin
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ drop
рдХреЙрд▓ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ, рд╡рд╣рд╛рдБ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
fn into_inner(Pin<P>) -> P where P: Deref, P::Target: Unpin;
рдЪреВрдБрдХрд┐ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рдЧ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ Pin<Box<T>>
рдХреЛ Box<T>
рдЬрд╛рдирд╛ рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧреА рд╣реИ ( T: Unpin
рдмреЗрд╢рдХ)ред
@HeroicKatora рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд▓ рдореЗрдВ рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реИрдХрдбрд╝реЛрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд▓рдВрдмрд╛ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╣реА рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рд╣рдо рд╕рднреА std API рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ Unpin
рдХрд╛ рдирд╛рдордХрд░рдг рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджреЛрдиреЛрдВ рдЙрд╕ рдХрд╛рдлрд┐рд▓реЗ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдерд┐рдд рдЕрд░реНрде рдмрдирд╛рддреА рд╣реИред рдФрд░ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ Pin
рдЧрд╛рд░рдВрдЯреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T: !Unpin
рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реИред рдпрд╣ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрдЬрд╛рдп рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧрдиреЗ рдХреЗ hatches рдХрд╛ рдирд┐рд░реНрдорд╛рдг: рдореБрд╕реНрдХрд╛рди:ред рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ (рдпрд╛ рдПрдХ рдмрд╛рд░ рдФрд░ рд▓рд┐рдВрдХ рдХрд░рдиреЗ) рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд╕реНрдерд╛рди рд╣реЛрдЧрд╛ред (рдПрдХ рднреА рдпрд╣ рдирд╛рдордХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ unpin
рдХреЗ рдмрдЬрд╛рдп into_inner
)ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИред
impl<P> Pin<P> where P: Deref, P::Target: Unpin
fn unpin(self) -> P
P=&'a mut T
рд▓рд┐рдП рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
impl<'a, T: ?Sized> Pin<&'a mut T> where T: Unpin
fn get_mut(self) -> &'a mut T
рдЕрдм рдЬрдм рд╕реНрдерд┐рд░реАрдХрд░рдг рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ PFCP рдХреА рдмрд╛рдд рдореВрдХ рд▓рдЧрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП:
@rfcbot рд░рджреНрдж рдХрд░реЗрдВ
рдХреНрдпрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╣реИ рдХрд┐ https://github.com/rust-lang/rust/issues/55766#issuecomment-437374982 рдкрд░ рд╢реБрд░реВ рдХреА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдмрджрд▓ рдЧрдИрдВ? рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдмреАрдЯрд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ ... рднрд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛: /
рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ? @ рдХреЗрдВрджреНрд░ рдиреЗ рдЖрдкрдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рджрд┐рдпрд╛, рдХреНрдпрд╛ рд╡рд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдерд╛?
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдореИрдВрдиреЗ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА FCP рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╕реБрдирд╛; @alexcrichton рдХреНрдпрд╛ рдЖрдк рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ FCP?
рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрдВрдж рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╡рд╛рдпрджрд╛ рдкрд░ рдирд╛рдорд╛рдВрдХрд┐рдд рдЕрдзреНрдпрд╛рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рд╣реИ? рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕реВрдХреНрд╖реНрдо рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА / рдЦрд░рд╛рдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИрдВ, рд░реЛрд╢рди рд╣реЛрдЧрд╛ред