Rust: [рд╕реНрдерд┐рд░реАрдХрд░рдг] рдкрд┐рди рдПрдкреАрдЖрдИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдирд╡ре░ 2018  ┬╖  213рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

@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 ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ
рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ:

  1. (Foo: Unpin) implies (Bar: Unpin) : рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ
    рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ Foo (рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░) Unpin
    Bar (рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░) Unpin ред
  2. рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬрдм Bar рдХреЛ рдХрднреА рднреА Foo рдХреЗ рд╡рд┐рдирд╛рд╢ рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
    рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╛ рддреЛ Foo рдХрд╛ рдХреЛрдИ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдзреНрдпрд╛рди рд╕реЗ рд╣реИ
    рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рднреА рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
  3. рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬрдм 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

T-libs finished-final-comment-period

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╡рд╛рдпрджрд╛ рдкрд░ рдирд╛рдорд╛рдВрдХрд┐рдд рдЕрдзреНрдпрд╛рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдкрд░ рд╣реИ? рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕реВрдХреНрд╖реНрдо рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА / рдЦрд░рд╛рдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИрдВ, рд░реЛрд╢рди рд╣реЛрдЧрд╛ред

рд╕рднреА 213 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@rfcbot fcp рдорд░реНрдЬ

рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп @withoutboats рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдЯреАрдо рдХреЗ рдмрд╛рдХреА рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╣реИ:

  • [x] @ рдХрд┐рдореБрдВрдбреА
  • [] @SimonSapin
  • [x] @alexcrichton
  • [x] @dtolnay
  • [] @sfackler
  • [x] @withoutboats

рдЪрд┐рдВрддрд╛рдУрдВ:

  • box-pinnned-vs-box-pin (https://github.com/rust-lang/rust/issues/55766#issuecomment-443371976)
  • рд╕реБрдзрд╛рд░-рдкреНрд░рд▓реЗрдЦрди (https://github.com/rust-lang/rust/issues/55766#issuecomment-443367737)
  • https://github.com/rust-lang/rust/issues/55766#issuecomment -445074980 рджреНрд╡рд╛рд░рд╛ рдирд┐рд░рд╛рдХрд░рдг -рдирд╛рдордХрд░рдг
  • рд╕реНрд╡-рд╡рд┐рдзрд┐рдпрд╛рдБ (https://github.com/rust-lang/rust/issues/55766#issuecomment-443368794)

рдПрдХ рдмрд╛рд░ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдореАрдХреНрд╖рдХ рдЕрдиреБрдореЛрджрди рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдЕрдзрд┐рдХрддрдо 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 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ:

  • рдЖрдк unsafely рдПрдХ рдорд┐рд▓рддрд╛ рд╣реИ &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 рдореЗрдВ рдбрд╛рд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рд╢реНрди рд╣реИрдВ:

  1. Pin<T> async рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрдм рдЬрдВрдЧ рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ (рдЬреИрд╕реЗ swap replace ) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдИ рднреА рд╣реИ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди (рдЬреИрд╕реЗ @jhjourdan рдпрд╛ @RalfJung рджреНрд╡рд╛рд░рд╛) рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд┐рдирд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

  2. рдХреНрдпрд╛ рдпрд╣ рдПрдкреАрдЖрдИ Rust рдХреА рдЕрдореВрд░реНрдд рдорд╢реАрди / рдкрд░рд┐рдЪрд╛рд▓рди рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдирдИ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ? Ie, рдЕрдЧрд░ рд╣рдо async & await / рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдЯреЛрдХрд░рд╛ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрд┐рдП рдЧрдП рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рджреЗ рд╕рдХрддрд╛ рд╣реИ?

  3. рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ? (рдпрд╣ рд╕рд╡рд╛рд▓ 2 рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ)

  4. рдЯреВ-рдмреА-рд╕реНрдЯреЗрдмреНрд▓рд╛рдЗрдЬреНрдб рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд░рд╛рд╕реНрддреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП &pin T рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ (рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ)ред

рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдорд┐рд╢реНрд░рд┐рдд рдиреЛрдЯ рд╣реИрдВ:

  1. рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХрд╛рдлреА рд╡рд┐рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред :(

  2. рдореИрдВ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдкрд┐рдирд┐рдВрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд╛рдлреА рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░ / рдЬрдЯрд┐рд▓ рд╣реИред

  3. рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ 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 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

  1. Unpin рд╕реАрдорд╛рдПрдБ рдКрдкрд░ рдЖрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рднрд╡рд┐рд╖реНрдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рдЪреБрдирддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреБрдирд┐рдВрджрд╛ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рди)ред
  2. рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдкрдХрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рддреЛ рдЖрдк рдЖрдо рддреМрд░ рдкрд░ 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 рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ (рдЬреИрд╕реЗ struct Foo<A> )ред

  2. рдФрд░ рдЖрдк рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рдирд┐рдВрдЧ рдПрдкреАрдЖрдИ (рдЬреИрд╕реЗ 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 ред

рдореИрдВрдиреЗ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдмрдирд╛рдпрд╛ "рдЬрдм рдореИрдВ рдПрдХ рдореИрдиреБрдЕрд▓ рднрд╡рд┐рд╖реНрдп / рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдкрд┐рдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реВрдВ?"

pinning-flowchart

рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдмрд┐рдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЬ рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рдореЗрдВ рдореИрдВ 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> ред рдЪрд╛рд▓ рдХреЗ рд▓рд┐рдП рдФрд░ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд┐рди рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред

рддреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдирд╛рдо рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдПрдХ рдкрд┐рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП," рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП "рдЕрдирдкрд┐рди" рд╢рдмреНрдж рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдХреНрд╖рдирд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ "рдЕрдирдкрд┐рди" рд╣реИ:

  1. рдПрдХ рдкрд┐рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ unfasten рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  2. (рд╕рдХрд░реНрдордХ, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕) рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ (рдПрдХ рдЖрдЗрдХрди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрджрд┐) рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@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?

рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрдВрдж рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

drewcrawford picture drewcrawford  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dnsl48 picture dnsl48  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mcarton picture mcarton  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

defuz picture defuz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jmegaffin picture jmegaffin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ