@rfcbot fcp ë³í©
êž°ë¥ ìŽëŠ : pin
ìì í 목í : 1.32.0
ì¶ì 묞ì : # 49150
êŽë š RFC : rust-lang / rfcs # 2349
ìŽê²ì pin
ëŒìŽëžë¬ëŠ¬ êž°ë¥ì ìì ííì¬ "ê³ ì "ì ë§ë€êž°ìí ì ìì
ëë€.
stableìì ì¬ì©í ììë ê³ ì ë ë©ëªšëŠ¬ë¥Œ ì¡°ìíêž°ìí APIì
ëë€.
(ëëìŽ ì ìì í¬êŽì ìž "ìì í ë³Žê³ ì"ë¡ ìì±íë €ê³ ë žë ¥íìµëë€.)
[std|core]::pin::Pin
ê·žë¬ë©Ž std
/ core
ì pin
íì 몚ëìì Pin
ì íìŽ ìì íë©ëë€. Pin
ì
ì ë€ëŠ ì í P
죌ìì Ʞ볞ì ìŽê³ í¬ëª
í ëíŒì
ëë€.
í¬ìží° ì íìŽìŽìŒí©ëë€ (ì : Pin<&mut T>
ë° Pin<Box<T>>
몚ë
ì íšíê³ ìë ë 구ì±). Pin
ëíŒë "í"ì ëí í¬ìží°ë¥Œ ìì í©ëë€.
ì ì늬ìì ì°žì¡°íë ë©ëªšëŠ¬, ì¬ì©ìê° ë¬Œì²Žë¥Œ ë°ìŒë¡ ì®êž°ë ê²ì ë°©ì§
ê·ž êž°ìµì.
Pin
ì íì ì¬ì©íë ìŒë°ì ìž ë°©ë²ì ìŒë¶ ê³ ì ë ë³íì 구ì±íë ê²ì
ëë€.
ìì í¬ìží°ì ì¢
ë¥ ( Box
, Rc
ë±). í¬ìží°ë¥Œ 몚ë ìì íë íì€ ëŒìŽëžë¬ëŠ¬
ìŽê²ì ë°ííë pinned
ìì±ì륌 ì ê³µíììì€. ê·žë° ë€ì ì¡°ìíë €ë©Ž
ìŽ ëªšë í¬ìží°ë Pin<&T>
ë¡ ì íëë ë°©ë²ì ì ê³µí©ëë€.
ë° Pin<&mut T>
. ê³ ì ë í¬ìží°ë 찞조륌 ì·šìíì¬ &T
륌 ëë € ì€ ì ìì§ë§
ìì íê² mutably deref : ìŽê²ì ìì íì§ ìì 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
ììë ëë¶ë¶ì í¹ì± implsë ìë¹í ì묵ì ì
ëë€.ìŽ ë ê°ì§ë
ìë :
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
í©ëë€.
ìŽë ê²íë©Ž ê³ ì ë 찞조륌 ì²ëŠ¬íë ê²ìŽ ìžì²Ž ê³µíì ìŒë¡
ê³ ì ëì§ ìì í목ì ì²ëŠ¬íêž° ìíŽ ì첎 찞조륌 í¬íšíì§ ììµëë€.
ì°žê³ . 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
ì íì Unpin
구ííì§ ìë ZSTì
ëë€. ê·žê²ì ë¹ì ìŽ í ì ììµëë€
stableìì Unpin
ì ìë 구íì ìµì í©ëë€. ì¬êž°ì !Unpin
impls
ìì§ ìì ì ìŽì§ ìì ê²ì
ëë€.
ê³ ì ë 찞조륌 ìì±íêž° ìíŽ ìì±ìê° std ì€ë§íž í¬ìží°ì ì¶ê°ë©ëë€.
Box::pinned(data: T) -> Pin<Box<T>>
Rc::pinned(data: T) -> Pin<Rc<T>>
Arc::pinned(data: T) -> Pin<Arc<T>>
ì§ë 9 ê°ì ëì ê³ ì APIë ë€ì곌 ê°ìŽ ì¬ë¬ ë² ë°ë³µëììµëë€.
ì°ëŠ¬ë ê·žë€ì ííë ¥ê³Œ ê·žë€ì 걎ì ì±ì ì¡°ì¬íìµëë€
볎ìŠ. ìŽì ì¬êž°ì ê³ ì APIê° ìì íëìë€ê³ ìì ìê² ë§í ê²ì
ëë€.
ìžì²Ž ê³µíì ìž¡ë©Žìì ê·¹ëê°ì 충ë¶í ê°ê¹ê³ 걎ì íë©°
ííë ¥; ìŠ, ìì í ì€ë¹ê°ëììµëë€.
ê³ ì ì ê¹ë€ë¡ìŽ 묞ì ì€ íëë ìííêž°ì ìì íìꞰ륌 ê²°ì íë ê²ì
ëë€.
í íë¡ì ì
: ìŠ, Pin<P<Target = Foo>>
ìì
Pin<P<Target = Bar>>
, ì¬êž°ì Bar
ë Foo
ì íëì
ëë€. ë€ííë
ì¬ì©ìê° ìŽë¬í ê·ì¹ì íìžíë ë° ëììŽ ë ììë ìŒë šì ê·ì¹ì 첎ê³í í ììììµëë€.
í¬ìì ìì í©ëë€.
(Foo: Unpin) implies (Bar: Unpin)
겜ì°ìë§ íë¡ì ížë¥Œ ê³ ì íë ê²ìŽ ìì í©ëë€.Foo
(í¬íš ì í)ìŽ Unpin
ìž ê²œì°ê° ìëë©ŽBar
(ìì ì í)ìŽ Unpin
ê° ìëëë€.Foo
íêž° ì€ì Bar
ìŽ (ê°) ìŽëëì§ ìë 겜ì°ìë§ ìì í©ëë€.Foo
ì ìë©žìê° ìê±°ë ìë©žìê°ì£ŒìíŽìFoo
(í¬íšíë ì í)ìŽ repr(packed)
ìŽ ìë 겜ì°ìë§ ìì í©ëë€.ëí std APIë ê°ì²Žë¥Œ ì€íì ê³ ì íë ìì í ë°©ë²ì ì ê³µíì§ ììµëë€.
íšì API륌 ì¬ì©íì¬ ìì íê² êµ¬íí ììë ë°©ë²ìŽ ìêž° ë묞ì
ëë€.
ê·žë¬ë ì¬ì©ìë ìì íì§ ìê² í목ì ì€íì ê³ ì í ì ììµëë€.
ê³ ì ë 찞조륌 ë§ë íìë ê°ì²Žë¥Œ ë€ì ìŽëíì§ ë§ììì€.
crates.ioì pin-utils
ìììë ë ì€íì 몚ë ì§ìíë 맀í¬ë¡ê° í¬íšëìŽ ììµëë€.
ê³ ì ë° í í¬ì. ì€í ê³ ì 맀í¬ë¡ë ê°ì²Žë¥Œ
ìë ì곌 êŽë šë ížëŠì ì¬ì©íì¬ ì€í, í¬ì ì© ë§€í¬ë¡ê° ì¡Žì¬í©ëë€.
ìì íì§ ìì§ë§ íë¡ì ì
ìì©êµ¬ë¥Œ ìì±íì§ ììëë©ëë€.
ë€ë¥ž ì못ë ìì íì§ ìì ìœë륌 ëì
í ì ììµëë€.
Unpin
ëŽë³ŽëŽêž°, pin::Unpin
ë€ì ëŽë³ŽëŽêž° ì ê±°ìŒë°ì ìŒë¡, ì°ëŠ¬ë stdì ì¬ë¬ ì¥ììì 묌걎ì ë€ì ëŽ ë³ŽëŽì§ ììµëë€.
íëë ì€ì ì ìì ìíŒ ëªšëì
ëë€ (ì : ëšì¶
std::collections::hash_map::HashMap
~ std::collections::HashMap
). ìŽë¥Œ ìíŽ
ìŽì , std::marker::Unpin
ìì std::pin::Unpin
std::marker::Unpin
ì (륌) ë€ì ëŽë³ŽëŽêž°
ì¥ì.
ëìì Send ë° Syncì ê°ì ë€ë¥ž ì€ìí ë§ì»€ í¹ì±ìŽ í¬íšë©ëë€.
ì 죌곡ìì. ë°ëŒì pin
몚ëìì Unpin
륌 ë€ì ëŽë³ŽëŽë ëì
ì 죌곡ì ë£ìŒë©Ž std::marker::Unpin
ê°ì žì¬ íìê° ììµëë€.
pin
ì ë£ì ê²ê³Œ ê°ì ìŽì ì
ëë€.
íì¬ Pin
ì ë§ì êŽë š íšìë ë©ìë 구묞ì ì¬ì©íì§ ììµëë€.
ìŽë¡ ì ìŒë¡ ìŽê²ì ì°žì¡° í ììë ëŽë¶ ë©ìëìì 충ëì íŒíêž°ìí ê²ì
ëë€. íë,
ìŽ ê·ì¹ì ìŒêŽëê² ì ì©ëì§ ìììŒë©° 겜íì ëë¶ë¶
ëšì§ ìŒì ë ë¶ížíê² ë§ë€ììµëë€. ê³ ì ë í¬ìží°ë ë¶ë³ ë§ êµ¬íí©ëë€.
deref, ë³ê²œí ììë deref ëë ê°ì ìí deref, deref êž°ë¥ ì í
ìŽìšë . ëí ìŽë¬í ìŽëŠ ì€ ìë¹ìë ë§€ì° ê³ ì í©ëë€ (ì : map_unchecked
).
충ë ê°ë¥ì±ìŽ ë®ìµëë€.
ëì Pin
ë©ìëì ì ì í ì°ì ìì륌 ë¶ì¬íë ê²ì ì íží©ëë€. ì¬ì©ì
ëŽë¶ ë©ìëì ì¡ìžì€íŽìŒíë ê²œì° íì UFCS륌 ì¬ì©í ì ììµëë€.
ë©ìë 구묞ì ì¬ì©íì§ ìì ê²œì° Pin ë©ìëì ì¡ìžì€íë ë° íìí©ëë€.
get_mut_unchecked
ì get_unchecked_mut
íì¬ ììë íì€ ëŒìŽëžë¬ëŠ¬ì ë€ë¥ž ì©ëì ìŒì¹íì§ ììµëë€.
impl<P> Unpin for Pin<P>
ì ê±°ìŽ implì impls ê³ ì íŽì ì ëí íì€ ì ë¹íì ìíŽ ì ë¹íëì§ ììµëë€. Pin<P>
ì P
ì¬ìŽì í¬ìží° ë°©í¥ìŽ ììµëë€. ê·ž ì ì©ì±ì í¬ìží° ì첎ì ëí implsë¡ ë®ì¬ ììµëë€.
ìŽ ì 묌 impl ì P: Unpin
íë 륌 ì¶ê°íë €ë©Ž ë³ê²œíŽìŒí©ëë€.
Pin
륌 repr(transparent)
íì ëìŒí ííìŒë¡ ëŽë¶ì í¬ìží° 죌ìì í¬ëª í ëíŒ ì¬ìŒí©ëë€.
í APIë ë©ëªšëŠ¬ ì¹ì
ì ìì íê² ì¡°ìíë ë° ì€ìí©ëë€.
ì ì¶ëì§ ìì ê²ì 볎ì¥í©ëë€. ê·ž ë©ëªšëŠ¬ì ê°ì²Žê°
Unpin
구ííë©Ž 죌ìê° ë³ê²œëì§ ììµëë€. ìŽê²ì
ìêž° ì°žì¡° ìì±êž° ë° ë¹ëêž° íšì ìì±. ê·ž 결곌
Pin
ì íì íì€ ëŒìŽëžë¬ëŠ¬ future
APIì íìëë©° 곧
ìì± êž°ì© APIìë íìë©ëë€ (# 55704).
Pin
ì í ë° íŽë¹ API륌 ìì ííë ê²ì ìì íì íìí ì ì¡°ì
ëë€.
Future
APIë ê·ž ì첎ë¡
async/await
구묞 ë° ì 첎 futures 0.3
ë¹ëêž° IO ììœ ìì€í
ìŽë
ìì ì ìž Rustì.
cc @cramertj @RalfJung
@rfcbot fcp ë³í©
@withoutboats íììŽ ìŽê²ì ë³í© í ê²ì ì ìíìµëë€. ë€ì ëšê³ë íê·žê° ì§ì ë ëëšžì§ íììŽ ê²í íë ê²ì ëë€.
ì°ë € ì¬í :
ë€ìì ê²í ìê° ì¹ìžíë©Ž (ìµë 2 ê°ì ì¹ìžìŽ 믞결) ìµì¢ ëêž êž°ê°ìŽ ììë©ëë€. ìŽ ê³Œì ìì ìì§ ì êž°ëì§ ìì 죌ì 묞ì 륌 ë°ê²¬íë©Ž ìë €ì£Œìžì!
íê·ž ë íììŽ ëìê² ì€ ììë ëª ë ¹ì ëí ì 볎ë ìŽ ë¬žì 륌 ì°žì¡°íììì€.
@withoutboatsì ëí ììží êžì ìì±íŽ 죌ì
ì ê°ì¬í©ëë€! ëë ëí ìì¬ì ìŒë¡ Pin
ì ë€ìí 볎ì¥ì ëíŽ ë€ì íŒë ì€ë¬ì ìŒë©° íì¬ ì¬êž°ìì ìì 볎ì¥ê³Œ êŽë šíì¬ APIê° ìì íëë ê²ì ëíŽ ëª ê°ì§ ì§ë¬žì ë°ììµëë€. ëë ìŽê²ì ì ìŽ ëë €ê³ ë
žë ¥í ê²ìŽëŒê³ ìê°íì§ë§ ëŽ ëšžëŠ¬ ììì ìŽê²ì ë¶ë¥íë ê²ì ëêž° ìíŽ.
" Unpin
묎ììžê°?"ëŒë 벜ì ê³ì ë¶ëªì¹ì§ ë§ ìŽê²ì ì ìŽ ëë €ê³ ìëíë©Žì ëë ê·žê²ìŽ 묎ììžì§ì ê·ž 죌ë³ì ë€ìí 볎ì¥ì ëíŽ ë€ì íŒë ì€ëœìµëë€. T
ê° Unpin
구ííì§ ìëë€ë ê²ìŽ 묎ìì ì믞íëì§ ë€ì ë§ìíŽ ì£Œìê² ìµëê¹? ëí, ë§ìœ Unpin
ê·žê²ì 구ííë ìì í í¹ì±ìŽ ìì§ë ë° ì¬ì©í ì ììµëë€ì²ëŒ ìœê²ì ìì ì ë³Žì¥ íŒì 볎ìžë€ Pin<T>
,íì§ë§ ë ë¶ëª
í ëê°ë¥Œ ëëœ
ìŽ ì ë³Žê° ì ííë©Ž ì첎 ì°žì¡°ê° ìë 몚ë ì í (ì : ìì±êž°ê° ìë)ì ê³ ì íŽì ë©ëë€.
ìêž° ì°žì¡° ì±ë¿ë§ ìëëŒ Pin
ë ì§ìí ììë ìì ì ìž ë©ëªšëŠ¬ 죌ìì ëí ë€ë¥ž ì¬ì© ì¬ë¡ê° ììµëë€. ê·žë¬ë ìëì ìŒë¡ ì ê³ ê·ž ì¬ìŽì ììµëë€.
Unpin
구ííë ê²ìŽ ìì íë€ë ê²ì ìŽíŽíë ë°©ë²ììŽë¥Œ 구ííšìŒë¡ìš ìì±í ë€ë¥ž ìì íì§ ìì ìœëì íìí ë¶ë³ì±ì ìë°í ì ìë€ë ê²ì
ëë€ (ì€ìíê²ëìŽ ìì íì§ ìì ìœë륌 ìì±í ì ììŒë©° ìžë¶ ìœëë ë€ì ì¬ë¶ì ìì¡Ž í ì ììµëë€. Unpin
)륌 구ííìµëë€. Unpin
구í ì¬ë¶ì êŽê³ììŽ ë¶ê±Žì íšì ì ë°íë Pin
ì ìì í APIë¡ í ììë ìŒì ììµëë€. Pin
ì ìì íì§ ìì API ì€ ìŒë¶ë¥Œ ì¬ì©íëë¡ ì ííë©Ž ìì í ëë§ Unpin
구íí ì ììµëë€. ìì "ê³ ì ë° ìì ì ëí ì°žê³ ì¬í"ì¹ì
ì 1 ë² í목ìì ë€ë£¹ëë€.
í , ìì§ë Unpin
ìŽíŽê° ì ëŒì. ëë ì²ììë Unpin
구ííê±°ë 구ííì§ ìë ê²ìŽ 묎ìì ì믞íëì§ ìŽíŽíë €ê³ ë
žë ¥íê³ ììµëë€.
뚌ì , Unpin
ìëìŒë¡ 구ííë ì íì ìë ê²ìŽ ëììŽ ë ê²ì
ëë€! ììì ìŒë°ì ìž í¬ìží° ì í (Arc / Rc / Box / references)ìŽ Unpin
구ííë€ê³ ìžêžíì§ë§ ê·žê² ë€ëŒê³ ìê°í©ëê¹? ìŽê²ìŽ ìë ížë ìŽ ížìž ê²œì° MyType
ì íìŽ í¬ìží° ë§ í¬íšíë©Ž Unpin
ìëìŒë¡ 구ííë€ë ì믞ì
ëê¹? ìëë©Ž ë€ë¥ž ì íìŽ Unpin
ìëìŒë¡ 구ííì§ ììµëê¹?
Unpin
볎ì¥íë ëŽì© ë±ì ììœíê±°ë ì€ëª
íë €ê³ ê³ì ë
žë ¥íì§ë§ ê·žë ê²íêž°ê° ì ë§ ìŽë µìµëë€. ëêµ°ê° Unpin
구íì ì믞ì Unpin
구ííì§ ìëë€ë ì믞륌 ë€ì ë°ë³µíì¬ ëìì ì€ ì ììµëê¹?
P::Target
ì ìžëŒìž ë©€ë² ì€ ìŽë ê²ììë ìŽëí ììë Pin<P>
ì 볎ì¥ì ìŽíŽ íë€ê³ ìê° í©ëë€ë§, ë§ìµëê¹?
@alexcrichton ì§ë¬ž
뚌ì Unpinì ìëìŒë¡ 구ííë ì íì ìë ê²ìŽ ëììŽ ë ê²ì ëë€!
Unpinì Send ëë Syncì ê°ì ìë í¹ì±ìŽë¯ë¡ ëë¶ë¶ì ì íìì ìëìŒë¡ 구íí©ëë€. ìì±êž° ë° ë¹ëêž° íšì ì íì !Unpin
ì
ëë€. ìì±êž° ëë ë¹ëêž° íšì 볞묞ì í¬íš í ììë ì í (ìŠ, ì í ë§€ê° ë³ìê°ìë ì í)ë ì í ë§€ê° ë³ìê°ìë í ìëìŒë¡ Unpin
ìëëë€.
í¬ìží° ì íì ëí ëª
ì ì implsë ì í ë§€ê° ë³ìê° ìë 겜ì°ìë Unpin
륌 ë§ëë ê²ì
ëë€. ìŽì ëí ìŽì ëìŽ ì£ŒììŽ ëë ëê¹ì§ ë ëª
ííŽì§ ê²ì
ëë€.
ëêµ°ê° Unpin 구íì ì믞ì Unpin 구íì ì믞륌 ë€ì ë°ë³µíì¬ ëìì ì€ ì ììµëê¹?
ë€ìì ê³ ì APIì ëí Ʞ볞ì ìž ììŽëìŽì
ëë€. 첫짞, í¬ìží° ì í P
, Pin<P>
ë P
ì²ëŒ ìëíì§ë§ P::Target
Unpin
구ííì§ ìë í ë³ê²œ ê°ë¥í ì ì°žì¡°ê° ìì íì§ ììµëë€. Pin<P>
ë짞, Pin
ì êŽë šë ìì íì§ ìì ìœëê° ì ì§íŽìŒíë ë ê°ì§ Ʞ볞 ë¶ë³ì±ìŽ ììµëë€.
&mut P::Target
aìì Pin<P>
, ë¹ì ì ìŽëíŽìë ì P::Target
.Pin<P>
ìì± í ì ìë€ë©Ž ìë©žìê° ì€íë ëê¹ì§ í¬ìží°ê° ê°ëŠ¬í€ë ë°ìŽí°ì ëí ê³ ì ëì§ ìì í¬ìží°ë¥Œ ì»ì ì ìë€ë ê²ì 볎ì¥íŽìŒí©ëë€.ìŽ ëªšë ê²ìŽ ì믞íë ë°ë Pin<P>
륌 ìì±íë©Ž P
ìŽ ê°ëŠ¬í€ë ê°ìŽ ë€ìë ìì§ìŽì§ ìì ê²ì
ëë€. ìŽê²ì ì°ëŠ¬ê° ìêž° ì°žì¡° 구조ì 칚ì
ì íìí 볎ì¥ì
ëë€. 컬ë ì
. íì§ë§ ì íì ëíŽ Unpin
ë§ êµ¬ííë©ŽìŽ ë³Žì¥ì ê±°ë¶ í ì ììµëë€.
ë°ëŒì ì íì ëíŽ Unpin
륌 구ííë©Ž íŽë¹ ì íìŽ Pin
ì ì¶ê° ìì 볎ì¥ì ìµíž ììíë ê²ì
ëë€.ìŽë¥Œ ê°ëŠ¬í€ë í¬ìží°ë¥Œ ê°ë³ì ìŒë¡ ì ì°žì¡° í ì ììµëë€. ìŽê²ì ìì íê² ì¬ì©íêž° ìíŽ ì íìŽ ìì§ìŒ íìê° ìë€ë ê²ì ì믞í©ëë€.
Rc<T>
ì ê°ì í¬ìží° ì íì ìŽëíŽë T
ê° í¬ìží° ë€ì ìêž° ë묞ì T
ë ìŽëíì§ ììµëë€. ë§ì°¬ê°ì§ë¡ Rc<T>
í¬ìží°ë¥Œ ê³ ì ( Pin<Box<Rc<T>>
)íŽë ì€ì ë¡ë T
ê³ ì ëì§ ìê³ í¹ì í¬ìží° ë§ ê³ ì ë©ëë€. ìŽê²ìŽ í¬ìží° ë€ì ì ë€ëŠì ì ì§íë 몚ë ê²ìŽ ì ë€ëŠìŽ ìë 겜ì°ìë Unpin
구íí ììë ìŽì ì
ëë€.
ëí UnpinìŽ ìì§íê² êµ¬ííêž°ì ìì í í¹ì±ìŽëŒë©Ž Pinì ìì íì§ ìì 볎ìŠì ìœê² íŒìíë ë° ì¬ì©ë ììë ê²ì²ëŒ 볎ì ëë€.
,íì§ë§ íì€í ëê° ë¹ ì¡ìŽì
ìŽê²ì ê³ ì APIìì ê°ì¥ ê¹ë€ë¡ìŽ ë¶ë¶ ì€ íëììŒë©° ì²ììë ì못ëììµëë€.
ê³ ì íŽì ë "íì 묎ìžê°ë¥Œ ë£ì 겜ì°ìë ë³ê²œ ê°ë¥í 찞조륌 ì»ë ê²ìŽ ìì í©ëë€."ëŒë ì믞ì
ëë€. ëìŒí ì¡ìžì€ ê¶íì ì ê³µíë ì€ëë ì¡Žì¬íë ë ë€ë¥ž í¹ì±ìŽ ììµëë€ : Drop
. ê·žëì ì°ëŠ¬ê° ìì ëž ê²ì Drop
ê° ìì íêž° ë묞ì Unpin
ë ìì íŽìŒíë€ë ê²ì
ëë€. ìŽë¡ ìžíŽ ì 첎 ìì€í
ìŽ ììë©ëê¹? ì¢ ë¹ ì§ë.
ì€ì ë¡ ìêž° ì°žì¡° ì íì 구ííë €ë©Ž ìì íì§ ìì ìœëê° íìí©ëë€. ì€ì ë¡ ë구ë ì 겜 ì°ë ìêž° ì°žì¡° ì íì 컎íìŒë¬ê° ìì±íë ì í ìž ìì±êž°ì ë¹ëêž° íšì ìí ëšžì ë¿ì
ëë€. ë€ìì ëª
ì ì ìŒë¡ 구ííì§ ìë ë§ì Unpin
ê·žëŠ¬ê³ ê·žë€ììŽìë Drop
ë¹ì ìŽ ì ì ìëë¡ ë¹ì ìŽìŽ ìŒëš, ìŽë¬í ì íì 구íì Pin<&mut T>
, ê·žë€ì ê² Unpin ëë Dropì 구ííì§ ìë ìµëª
ì íìŽêž° ë묞ì ì€ì ë¡ ë³ê²œ ê°ë¥í 찞조륌 ì»ì§ 못í©ëë€.
믞ë ê²°í© ìì ê°ìŽ ìŽë¬í ìµëª
ì í ì€ íë륌 í¬íšíë êµ¬ì¡°ì²Žê° ììŒë©Ž 묞ì ê° ë°ìí©ëë€. Pin<&mut Fuse<Fut>>
ìì Pin<&mut Fut>
ë¡ ìŽëíë €ë©Ž "í íë¡ì ì
" ì ìííŽìŒí©ëë€
ìŽë¬í ìŽì ë¡ í ëì¶ì ìì íì§ ììµëë€! ê³ ì ë¶ë³ì ìë°íì§ ìê³ ê³ ì íë¡ì ì ì ìííë €ë©Ž ìì í ì ìì ëìŽí ëª ê°ì§ ìì ì ìííì§ ìëë¡ ë³Žì¥íŽìŒí©ëë€.
ë°ëŒì tl; dr : Drop
ê° ì¡Žì¬íë¯ë¡ Unpin
ë ìì íŽìŒí©ëë€. íì§ë§ ìŽê²ìŽ 몚ë ê²ì ë§ì¹ ìë ììµëë€. ëšì§ í íë¡ì ì
ìŽ unsafe
ìŽê³ íë¡ì ížë¥Œ ê³ ì íë €ë ì¬ëì ë¶ë³ì ìžížë¥Œ ì ì§íŽìŒíë€ë ê²ì ì믞í©ëë€.
ìì±êž° ë° ë¹ëêž° íšì ìí ëšžì . ìŽë€ì Unpinì 구ííì§ ìê³ Drop 구íìŽ ìë€ê³ ëª ì ì ìŒë¡ ë§í©ëë€. ë°ëŒì ìŽë¬í ì íì ê²œì° Pin <& mut T>ìŽ ììŒë©Ž ì€ì ë¡ ë³ê²œ ê°ë¥í 찞조륌 ì»ì§ 못í ê²ì ëë€. Unpin ëë Dropì 구ííì§ ìë ìµëª ì íì ëë€.
ë¹ëêž° ìí ëšžì ì Drop
구íìŽ ììŽìŒíì§ ìëì? ë¹ëêž° íšìì "ì€í"ììë ê² (ìí ëšžì ì íëì ê°ì)ì ë¹ëêž° íšìê° ìë£ëê±°ë ì·šì ë ë íꎎëìŽìŒí©ëë€. ìëë©Ž ìŽë° ìŒìŽ ë°ìí©ëê¹?
ëë 묎ìììŽ ìí©ìì ì€ìí ê²ì ì¬ë¶ë¥Œ ì¶ìž¡ impl Drop for Foo {âŠ}
í목ìŒë¡ ìœë륌 ì€íí ê²ìŽë€ ì¡Žì¬ &mut Foo
ì륌 ë€ìŽ ì¬ì©í ì mem::replace
"exfiltrate"ë¡íê³ , ìŽë Foo
ê°ì¹.
ìŽê²ì ptr::drop_in_place
íµíŽ ížì¶ í ììë "drop glue"ì ëìŒíì§ ììµëë€. 죌ìŽì§ Foo
ì íì ëí ëë¡ êžë£šê° 구í ë ê²œì° Drop::drop
ížì¶ í ë€ì ê° íëì ëí ëë¡ êžë£šë¥Œ ì¬ê· ì ìŒë¡ ížì¶í©ëë€. ê·žë¬ë ìŽë¬í ì¬ê· ížì¶ìë &mut Foo
í¬íšëì§ ììµëë€.
ëí ìì±êž° (ë° ë¹ëêž° ìí ëšžì )ìë ì¬ì©ì ì§ì ëë¡ êžë£šê° ìì§ë§ íì¬ ìí륌 êž°ë°ìŒë¡ ì¬ë°ë¥ž íë ìžížë¥Œ ëë¡íë ê²ë¿ì ëë€. ëë¡ ì€ì íë륌 ìŽëíì§ ìì ê²ì ìœìí©ëë€.
ëŽê° ì¬ì©íë ì©ìŽ (íì€ì ìë€ê³ ìê°íì§ë§) : "drop glue"ë 컎íìŒë¬ê° ìì± í íëì ì¬ê· ì ìí¹ìŒë¡ ìë©žì륌 ížì¶í©ëë€. "ëë¡ êµ¬í"ì Drop
ížë ìŽ ížì 구íìŽë©° "ìë©žì"ë ëë¡ êžë£šì ëë¡ êµ¬íì ì¡°í©ì
ëë€. ëë¡ êžë£šë ì묎ê²ë ìì§ìŽì§ ììŒë¯ë¡ Drop 구íìë§ êŽì¬ìŽ ììµëë€.
ëêµ°ê° ë¯žëì ëí ë žë¯ž ìœ ì±í°ë¥Œ ìì±íê³ ì¶ìµëê¹? ìŽê²ìŽ ìŒë§ë 믞ë¬í ì§ ê°ìí ë ìì²ëê² íìí ê² ê°ìµëë€. í¹í ëë ì, í¹í ë²ê·žê°ìë / ëì 구íì ìì ê·žê²ìŽ ìŽë»ê² ë¶ê±Žì íì§ ì ì ìë€ê³ ìê°í©ëë€.
@Gankro ë¬Œë¡ , ë¹ì ì ê·žê²ì ìíŽ ë륌 ëŽë € ëì ì ììµëë€.
ì€ëª íŽì£Œì ì ê°ì¬í©ëë€!
ì ë ê°ìžì ìŒë¡ ë¹ëêž°ì Rustì Pin API륌 ì²ì ì íì§ë§, ì§ë ë©°ì¹ ëì ì¡°êž ëì 뎀ìµëë€ (https://github.com/rust-lang-nursery/futures-rs/pull/1315-ì¬êž°ì ë¹ëêž° ìœëì 칚ì 컬ë ì ì ëí ê³ ì ì ìŽì©íë €ê³ íìµëë€.)
ì€ííë ëì ìŽë¬í APIì ëíŽ ëª ê°ì§ 묞ì ê° ë°ìíìµëë€.
impl core::future::future::Future+futures_core::future::FusedFuture
, íì§ std::marker::Unpin
구íëì§ std::marker::Pinned
Pin
í¬ì)ì ëíŽ ë°°ì°ê³ pin-utils
ìì ë©ìë륌 ë³µì¬íë €ê³ íìµëë€. .async
ë°©ë²ê³Œ select
ì¬ë¡ìì ìŽë»ê² ëŽ ë¯žë륌 ì€ì ë¡ ì¬ì©í ì ììµëê¹? ì 묌 ì€íì pin_mut!()
íìíë€ë ê²ìŽ ë°íì¡ìµëë€. ì€ì ë¡ ì€íìŽ ìëêž° ë묞ì íŒë ì€ëœìµëë€.drop()
ë°©ë²ì ìŽì ë€ì 걞늎 &mut self
ëì ì Pin
.Pin
ë° Unpin
ê° ë¬Žììžì§ ìŽíŽíëë¡íë ê²ì²ëŒ 볎ì
ëë€. ìŽê²ì ì¢ ë í¹ë³í ì¬ì© ì¬ë¡ì ëí 구í ìžë¶ ì ë³Žê° ìœê° ëì¶ ë ê²ì²ëŒ 볎ì
ëë€.drop()
ê° ížì¶ ë ëê¹ì§ ì íí ëìŒí 죌ì륌 ê°ì§ ê°ì²Žë¥Œ ë€ì 볌 ì ììì ìë €ì€ëë€. íì¬ ë²ìì 'static
ì¬ìŽì ìŒì¢
ì ê°ì ìëª
ì ì ê³µí©ëë€. êŽë šìŽ ìì§ë§ ì¬ì í ìì í ë€ë¥ž ë ê°ì§ ê°ë
ì ê°ë ê²ì íŒëì€ë¬ì 볎ì
ëë€. 'pinned
ì ê°ì ê²ìŒë¡ 몚ëžë§ í ì ìëì§ ê¶êžíìµëë€.컎íìŒ í ë ëë ì¢
ì¢
C ++ì ëíŽ ìê°íìµëë€. ìŽë¬í 묞ì ì ëë¶ë¶ì íŒí ì ììµëë€. ì íì ìŽë ìì±ìì í ë¹ ì°ì°ì륌 ìì íì¬ ìŽë ë¶ê°ë¥ìŒë¡ ì ìž í ì ììµëë€. ì íìŽ ìŽëí ììë ê²œì° íŽë¹ ì íì í¬íšíë ì íë ìŽëí ì ììµëë€. ë°ëŒì ìì± ë° ì구 ì¬íì Ʞ볞ì ìŒë¡ ì í ê³ìžµ 구조륌 íµíŽ íë¥Žê³ ìŒë¶ ížì¶ ëŽìì ìì±ì ì ë¬íë ëì 컎íìŒë¬ì ìíŽ íìžë©ëë€ (ì : drop()
ìë). ìŽíŽíêž° íšì¬ ìœë€ê³ ìê°í©ëë€. ê·žë¬ë Future
ë íŽë§ì ììíêž° ì ì íì¬ ì죌 ìŽëíŽìŒíë¯ë¡ Rustìë ì ì©ëì§ ìì ì ììµëë€. ê·žë¬ë ë€ë¥ž íížìŒë¡ë ê·ž í¹ì±ì ê°ì§ ìë¡ìŽ ì ì ëë ìì§ì곌 í¬í ëšê³ë¥Œ ë¶ëŠ¬íì¬ ìì í ì ììµëë€.
Alex Unpin
ìœë©ížì êŽíì¬ : ì ë Unpin
ì믞륌 ì²ì²í ìŽíŽíê³ ìì§ë§ ìŽíŽíêž° ìŽë µë€ë ë° ëìí©ëë€. ë€ë¥ž ìŽëŠìŽ ëììŽ ë ìë ìì§ë§ ì§êžì ê°ê²°í ìŽëŠì ì°Ÿì ì ììµëë€. ThingsInsideDontBreakIfObjectGetsMoved
, DoesntRequireStableAddress
, PinDoesntMatter
ë±
ëŽê° ìì§ ìì í ìŽíŽíì§ ëª»í ê²ì ì &mut self
ìì Pin<&mut self>
륌ë°ë ê²ìŽ 몚ë ì íì ëíŽ ìì í ì ìëì§ì
ëë€. PinìŽ ëšì§ ê°ì²Ž ì첎ì 죌ìê° ìì ì ìŽëŒë ê²ì ì믞íë€ë©Ž, ìŽê²ì ëë¶ë¶ì ì íì ìž Rust ì íì ì ì©ë©ëë€. Pinì íµí© ë ë ë€ë¥ž ì°ë €ê°ìë ê² ê°ìµëë€. ëŽë¶ì ì첎 ì°žì¡° ì íë 깚ì§ì§ ìëë€ë ê²ì
ëë€. ìŽë¬í ì íì ê²œì° Pin
ë°ì í ì¡°ìíë ê²ì íì ìì íì§ ììµëë€. ê·žë¬ë ëë¶ë¶ì ê²œì° ì»ŽíìŒë¬ìì ìì±ëë©° ìì íì§ ìê±°ë ìì í¬ìží°ë êŽì°®ì ê²ìŽëŒê³ ìê°í©ëë€. ê³ ì ë ížì¶ì íì íëë¡ ì ë¬íŽìŒíë ìë í¥í ê²°í© ìì ê²œì° íë륌 íŽë§íêž° ì ì íëì íì ìì±íë ìì íì§ ìì ížì¶ìŽ ë¶ëª
í íìí©ëë€. ê·žë¬ëìŽ ê²œì°ìë ì í ì€ìíì§ ìì ë€ë¥ž íëì ì¡ìžì€íë ê²ë³Žë€ ì€ì ë¡ ì€ìí ì¥ì (íìŽ ì¬ì í ì íší©ëê¹?)ì ë êŽë šìŽìë ìíì ëŽ
ëë€.
ëŽê° ê°ì§ ë ë€ë¥ž ìê°ì ëª ê°ì§ ì í ì¬íìŽ ì ì©ëë©Ž ë ê°ëší ìì€í
ì ì»ì ì ìëì§ ì¬ë¶ì
ëë€. ì륌 ë€ìŽ ê³ ì ìŽ íìí ê²ìŽ ë¹ëêž° ë©ìë ëŽììë§ ì¬ì©í ì ìê³ í¥í ê²°í© ìì íšê» ì¬ì©í ììë 겜ì°ì
ëë€. Pin
ëë Unpin
ì€ íëë¡ ëšìí í ì ììµëë€. ë§ì ìœëì ê²œì° ì í / ì¡°ìž ì§ììŽìë ë¹ëêž° / ëêž° ë©ìëê° ê²°í© ììê² ì 늬í ì ìë€ë ì ì ê³ ë €í ë ìŽê²ì ê°ì¥ í° ìì€ìŽ ìë ì ììµëë€. ê·žë¬ë ìŽê²ìŽ ì ë§ë¡ ëììŽëëì§ì ëíŽìë 충ë¶í ìê°íì§ ìììµëë€.
êžì ì ìž ìž¡ë©Ž : "ì€í"ì°šì©ìŒë¡ ë¹ëêž° / ëêž° ìœë륌 ìì±í ì ìë€ë ê²ì ë§€ì° ë©ì§ê³ íìí©ëë€! ê·žëŠ¬ê³ ì¹šì 컬ë ì 곌 ê°ì ë€ë¥ž ì¬ì© ì¬ë¡ì ëíŽ ê³ ì ì ì¬ì©íë êž°ë¥ì ìë² ëë ìì€í ìŽë 컀ë곌 ê°ì ëìë¿ ìëëŒ ì±ë¥ìë ëììŽë©ëë€. ê·žëì ëë ìŽê²ì ëí íŽê²°ì± ì ì ë§ë¡ ê³ ëíê³ ììµëë€.
ìì í ë³Žê³ ìì ëí ì¬ìí 묞ì :
fn get_unchecked_mut(self) -> &'a mut T
ëë ìŽê²ìŽ ì€ì ë¡ unsafe fn
ëŒê³ ìê°í©ëë€.
@ Matthias247 Tê° ê³ ì íŽì ëì§ ìì ê²œì° Pin<P<T>>
ìì & mut T륌 ìì íê² ê°ì žì¬ ì ììµëë€. ê·žë¬ë©Ž mem::swap
ì (륌) Pinìì T륌 ìŽëììŒ ê³ ì íë 목ì ì ë¬Žë ¥í í ì ìêž° ë묞ì
ëë€.
ëŽê° ë ìì ìê² ì€ëª íë ë° ìŽë €ììŽìë í ê°ì§ë íìŽ APIì ìŒë¶ê°ëìŽìŒíë€ë ì ìì Future륌 ë€ë¥ž í¹ì±ê³Œ 귌볞ì ìŒë¡ ë€ë¥Žê² ë§ëë ìŽì ì ëë€. ëŽ ë§ì, async / awaitì ê³ ì ìŽ íìíêž° ë묞ìŽëŒë ê²ì ì§êŽì ìŒë¡ ìê³ ìì§ë§, Iteratorsìë ë€ë¥ž Futuresì ëíŽ êµ¬ì²Žì ìŒë¡ ë§í©ëê¹?
íŽë§ì & mut self륌 ì·šíê³ Pin<P>
ì í ëë ê³ ì íŽì ë ì íì ëíŽìë§ Future륌 구íí ì ììµëê¹?
íì ë§€ê° ë³ìë¡ ì¬ì©íë ë©ìëìì ë³ê²œ ê°ë¥í íëì ìŽë»ê² ì¡ìžì€ í ì ììµëê¹?
ìŽê²ì ì€ì ë¡ 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
ì íì 구ííì¬ selfì Unpin
íëì ëí ìì í¬ìží°ë¥Œ ê°ì ž ì€ë ê²ì
ëë€ (ê·žëŠ¬ê³ ìì ì ìž ì£Œì / ëìŒí ìžì€íŽì€), &mut
륌 ëìŒí íëë¡ ê°ì žì ìžë¶ íšìì ì ë¬í©ëë€. ìŽê²ì Unpin
구íìŽ ìì í ìŽì ì ëìŒí ìŽì ì íŽë¹íë ê² ê°ìµëë€. !Unpin
ì íëì ëí ìì í¬ìží°ë¥Œ ì¬ì©íì¬ ìŒë¶ êžê³ 륌 ížì¶ í ì ìëë¡ ì íí©ëë€. ìíŒì€.
ìŽì ìí©ì ë ìì íê² ë§ë€êž° ìíŽ Pinned
ì¶ê°íë ëì ìŒë°ì ìŒë¡ 구조첎ì Unpin
íëê° ì€ì ë¡ !Unpin
íì륌 ìíŽ Pinned
ì ë¹ë ë ëíŒê°ìì ì ììµëë€. 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 { ... }
}
ìŽ ëªšë ê²ìŽ íì¬ APIì ì ížíëë ê²ì²ëŒ 볎ìŽë©° futures-rs
ê²°í© ììì ìŒë¶ ìì íì§ ìì ë¶ë¶ì ì ê±° í ì ìì§ë§ (ì : ìŽì ê°ì ì¶ê° íëì ìì íê² ì¡ìžì€ í ì ììµëë€) íì¬ ì¬ì© ì¬ë¡ìë íìíì§ ììµëë€. ì¬ì©ì ì ì !Unpin
ì í (ì : 칚ì
컬ë ì
)ì 구ííêž° ìíŽ ìŽì ê°ì ìŒë¶ API륌 ì€ííê³ ëì€ì ì¶ê° í ì ììµëë€.
ëŽê° ì ìêž° ë묞ì Nemo157 @ ê·žì§ë êž°ë¥ì ìì íì§ mem::swap
ìš &mut T
êž°ë¥ ë°ííêž° ì ì ì 륌 íµê³Œ &mut U
. (ë³íêž° ì¬ìŽ ê²ì ë¶ë³íë ê²ìŽ ìì íì§ ìì ìë ìë€ë ê²ì
ëë€)
ížì§ : ëí pin-utils 맀í¬ë¡ê° ë€ëŠ
ëë€. unsafe_unpinned
ëì ì íìŽ Unpin
ìž ê²ê³Œ êŽë šìŽ ììµëë€. "ê³ ì ëì§ ìì í¬ì"- &mut Field
ëí í¬ìì
ëë€ !Unpin
겜ì°ìë íŽë¹ íëì íë¡ì ížë¥Œ ê³ ì íì§ ìë í ìì íê² ì¬ì©í ì ììµëë€.
ëŽê° ë ìì ìê² ì€ëª íë ë° ìŽë €ììŽìë í ê°ì§ë íìŽ APIì ìŒë¶ê°ëìŽìŒíë€ë ì ìì Future륌 ë€ë¥ž í¹ì±ê³Œ 귌볞ì ìŒë¡ ë€ë¥Žê² ë§ëë ìŽì ì ëë€. ëŽ ë§ì, async / awaitì ê³ ì ìŽ íìíêž° ë묞ìŽëŒë ê²ì ì§êŽì ìŒë¡ ìê³ ìì§ë§, Iteratorsìë ë€ë¥ž Futuresì ëíŽ êµ¬ì²Žì ìŒë¡ ë§í©ëê¹?
ìŽë¡ ì ìž ì°šìŽë ìì§ë§ ì€ì©ì ìž ì°šìŽê° ììµëë€. íëë Iterator
ìŽ ìì ì ì
ëë€. ê·žë¬ë 결곌ì ìŒë¡ ì°ëŠ¬ê° ë§€ì° ì늬í ê²ì ìì ëŽì§ ìë í, ê·žê²ìŽ ììŽë ìì í ìì íŽìŒíì§ë§ ìŽì€ ê°ì ììŽ ìêž° ì°žì¡° ìì±êž°ìì for
룚í륌 ì€íí ì ììµëë€. for 룚íë ìì±êž°ë¥Œ ìë¹íê³ ì ë ìŽëíì§ ìêž° ë묞ì
ëë€).
ë ë€ë¥ž ì€ìí ì€ì©ì ìž ì°šìŽì ì Iterator
ì Future
ì¬ìŽì ìœë íšíŽìŽ ìë¹í ë€ë¥Žë€ë ê²ì
ëë€. 믞ëì ëêž° ì§ì ì ë¹ëŠ¬ê³ ì¶ì§ ìê³ 10 ë¶ì ê° ì ììµëë€. ê·žëì ì 묌 0.1ìììŽ Arc
ê° ì¬êž° ì êž° ëíëë ê²ì 볌 ì ììŒë¯ë¡ ë ê°ì ë€ë¥ž ë³ììì ëìŒí ë³ì륌 ì¬ì©í ì ììµëë€. and_then
íµí. ê·žë¬ë ì°ëŠ¬ë ì í ìêž° ì°žì¡° ë°ë³µì륌 ííí ìììŽ ì죌 ë©ëŠ¬ ì, 귞걎 ê·žë¥ ì¬ì© ì¬ë¡ ì€ìí ê²ì.
ëŽê° í ì ìêž° ë묞ì ê·žì§ë êž°ë¥ì ìì íì§
mem::swap
ìš&mut T
íšìê° ë°ííêž° ì ì ì 륌 íµê³Œ&mut U
ì, ì ì¥, ê·žê²ì ê·ž ë¶ë¶ì ììŽ ë²ë žìµëë€.
fn as_mut(&mut self) -> Pin<&mut P::Target>
fn into_ref (self)-> Pin <& 'a T>`
찞조륌 ì€ì ë¡ ë°ííë ë©ìëì íŒëíì§ ììŒë €ë©Ž as_pinned_mut
ë° into_pinned_ref
ížì¶íŽìŒí©ëê¹?
íì€ìì Unpinì 죌목í ë§í 구í :
impl<P> Unpin for Pin<P> {}
ììµëë€.ì°ëŠ¬ê° ì¬ì©íë ì íì ê²œì° ìŽê²ì íšê³Œê° ììŒë©° ì¡°êž ë ìì íŽ ë³Žì
ëë€.
ì 겜 ì°ì§ ë§ìžì. 목ë¡ì ììµëë€. ;)
ìì í ì ì Drop
볎ìŠì ì±ë¬žííŽìŒíë€ê³ ìê°í©ëë€. ê·žë ì§ ììŒë©Ž ë묎 ëŠì ê²ì
ëë€.
ê³ ì ë ê°ì²Ž (ëìì ì€í ëŠ¬ì§ ë¬Žíší ë¶ë²
Pin
ížì¶íì§ ìê³ ì°žì¡°)drop
ê°ì²Žì ëíŽ.
ì¬êž°ì "묎íší"ë "í ë¹ ì·šì"륌 ì믞 í ì ìì§ë§ "ì¬ì©ë"ë ì믞í©ëë€. x
ì Ok(foo)
ìì Err(bar)
ë¡ ë³ê²œíë©Ž foo
ì ì ì¥ ì©ëìŽ ë¬Žíšíë©ëë€. .
ìŽê²ììŽ í ë¹ íŽì ë¶ë²ê°ëëë¡, ì륌 ë€ìŽ 결곌륌 ê°ë Pin<Box<T>>
, Pin<Rc<T>>
ëë Pin<Arc<T>>
ì ížì¶ììŽ drop::<T>
.
Deref
, DerefMut
ì©ë ë³ê²œëë ìŽê²ìŽ Deref
í¹ì±ì "ìŽê²ìŽ ëëí í¬ìží°ìŽë€"륌 ì믞íë ë°©ììŒë¡ ìŽë»ê² ì¬íì©íëì§ì ëíŽ ì¬ì í ìœê° ë¶ìíŽí©ëë€. ì°ëŠ¬ë "ìì"곌 ê°ì ë€ë¥ž ê²ë€ìë Deref
륌 ì¬ì©í©ëë€. ê·žê²ì ìí° íšíŽ ìŒ ì ìì§ë§ ì¬ì í ìë¹í ìŒë°ì ìŒë¡ ì¬ì©ëê³ ììŒë©° ìì§í ì ì©í©ëë€. :ë
ëë ìŽê²ìŽ 걎ì ì± ë¬žì ê° ìëëŒê³ ìê°í©ëë€.
Unpin
ìŽíŽë»ë»í íë¬ê·ž : ëë ìŽê²ì ëíŽ ë ê°ì ëžë¡ê·ž ê²ì묌ì ìŒëë°, ìŽê²ì ë¹ì ìŽ (ë°) íìì ìž êµ¬ë¬žì ìŒë§ë ì¢ìíëì§ì ë°ëŒ ëììŽ ë ìë ìê³ ìë ìë ììµëë€. ;) APIë ê·ž ìŽíë¡ ë³ê²œëìì§ë§ Ʞ볞 ììŽëìŽë ë³ê²œëì§ ìììµëë€.
@ Matthias247 ëë ë¹ì ìŽ ê²ªê³ ìë í ê°ì§ 묞ì ë íì¬ ê³ ì 곌 êŽë šë ì¶ìí륌 구ì¶íë €ë©Ž ê±°ì íì ìì íì§ ìì ìœëê° íìíë€ë ê²ì ëë€. ìŽë¬í ì¶ìí륌 ì¬ì© íë ê²ì ì¢ì§ë§ ì륌 ë€ìŽ ìì í ìœëìì 믞ëì ê²°í©ì륌 ì ì íë ê²ì ìëíì§ ììµëë€. ê·ž ìŽì ë "í íë¡ì ì "ìë 컎íìŒë¬ ë³ê²œìŒë¡ ë§ ìì íê² íìží ììë ì ìœ ì¡°ê±ŽìŽ ìêž° ë묞ì ëë€. ì륌 ë€ìŽ
ëŽ drop () ë©ìëê° ìŽì Pin ëì & mut self륌 ë€ìë°ë ìŽì ë 묎ìì ëê¹?
ì, drop()
ì ì€ëëììµëë€. Rust 1.0ë¶í° ì¡Žì¬íë¯ë¡ ë³ê²œí ì ììµëë€. Pin<&mut Self>
íë©Ž Unpin
ì íìŽ ì§êžì²ëŒ &mut
ì»ì ì ìì§ë§, ìŽë ìŽì ë²ì 곌 ížíëì§ ìë ë³ê²œì
ëë€.
믞ëì ê²°í©ì륌 ìì íê² ìì±íë €ë©Ž ìì í í íë¡ì ì
ìŽ íìíë©°ìŽë¥Œ ìíŽ ì»ŽíìŒë¬ë¥Œ ë³ê²œíŽìŒíë¯ë¡ ëŒìŽëžë¬ëŠ¬ìì ìí í ì ììµëë€. derive
proc_macroìì ê±°ì í ì ìì§ë§ "ìŽ ì íìë Drop
ëë Unpin
구íìŽ ììµëë€"ëŒê³ 죌ì¥íë ë°©ë²ìŽ íìí©ëë€.
í íë¡ì ì
ì ìíŽ ìŽë¬í ìì í API륌 ì»ë ë°©ë²ì ììëŽë ê²ìŽ ê°ì¹ê° ìë€ê³ ìê°í©ëë€. ê·žë¬ë ìŽê²ìŽ ìì í륌 ì°šëší íìë ììµëë€. ì¬êž°ì ìì ííë APIë ìì í í íë¡ì ì
곌 ížíëìŽìŒí©ëë€. ( Unpin
ì ìì 죌ì¥ì 구ííêž° ìíŽ lang í목ìŽëìŽìŒ í ìë ìì§ë§ ê·žë ê² ëìê² ë³ŽìŽì§ë ììµëë€.)
ëë ì¢ ì¢ C ++ì ëíŽ ìê°íëë°, ìŽë¬í 묞ì ì ëë¶ë¶ì íŒí ì ììµëë€. ì íì ìŽë ìì±ìì í ë¹ ì°ì°ì륌 ìì íì¬ ìŽë ë¶ê°ë¥ìŒë¡ ì ìž í ì ììµëë€. ì íìŽ ìŽëí ììë ê²œì° íŽë¹ ì íì í¬íšíë ì íë ìŽëí ì ììµëë€.
Rustì ëíŽ ìì§ìŒ ììë ì íì ì ìíë €ë ìëê° ì¬ë¬ ë²ìììµëë€. ë§€ì° ë¹ ë¥Žê² ë³µì¡íŽì§ëë€.
ìŽíŽíŽìŒ í í ê°ì§ ì€ìí ì ì ê³ ì ìŽ ìì§ìŒ ììë ì íì ì ê³µíì§ ìëë€ë ê²ì
ëë€! 몚ë ì íì Rustìì ìì§ìŒ ì ììµëë€. T
ê°ìë ê²œì° ìíë ê³³ìŒë¡ ìŽëí ì ììµëë€. ìŽëí ììë ì í ëì , ì°ëŠ¬ë ìŽëí ììë í¬ìží° ì íì ì ìíêž° ë묞ì ìë¡ìŽ 캡ìí ë API륌 ì ìíë Rustì êž°ë¥ì ì¬ì© T
)ê° ìëëŒ í¬ìží° ì í ( Pin<&mut T>
T
)ì ììµëë€. ì íìŽ "ëë ê²°ìœ ìì§ìŒ ì ììµëë€"ëŒê³ ë§í ë°©ë²ìŽ ììµëë€. ê·žë¬ë, ì í "ëë ê³ ì ììŽ ê²œì°, ë륌 ë€ì ìŽëíì§ ììµëë€ 'ëŒê³ í ììë ë°©ë²ìŽìë€. ë°ëŒì ëŽê° ìì í MyFuture
ë íì ìŽëí ì ìì§ë§ Pin<&mut MyFuture>
ë ë ìŽì ìŽëí ììë MyFuture
ì ìžì€íŽì€ì ëí í¬ìží°ì
ëë€.
ìŽê²ì 믞ë¬í ìì ìŽë©°, ì°ëŠ¬ëìŽ ìŒë°ì ìž ì€íŽë¥Œ íŒíêž° ìíŽ ì¬êž°ìì 묞ì륌 구첎ííë ë° ìê°ì í ì íŽìŒ í ê²ì ëë€.
ê·žë¬ë ì°ëŠ¬ë ìêž° ì°žì¡° ë°ë³µì륌 ì í ííí ììë ìíë¡ êœ€ ë©ëŠ¬ ììŒë©°, ì¬ì© ì¬ë¡ìì ê·žë€ì§ ì€ìíì§ ììµëë€.
ì§êžê¹ì§ 몚ë ë°ë³µêž°ê° ì í곌 impl Iterator for âŠ
ëžë¡ì ì¬ì©íì¬ ì ì ëìêž° ë묞ì
ëë€. ë ë°ë³µ ì¬ìŽì ìí륌 ì ì§íŽìŒíë ê²œì° ë°ë³µêž° ì íì íëì ìí륌 ìšêž°ê³ &mut self
ìì
íë ê² ìžìë ì íì ì¬ì§ê° ììµëë€.
ê·žë¬ë ìŽê²ìŽ ìžìŽì ì ëë ìŽí°ë¥Œ í¬íšìí€ë 죌ë ëêž°ê° ìëëëŒë ê²°êµ ì ëë ìŽí° yield
구묞ì ì¬ì©íì¬ for
ì íšê» ì¬ì©í ììë ê²ì ì ì í ì ìë€ë©Ž ë§€ì° ì¢ì ê²ì
ëë€ yield
ìì ì°šì©íììì€. ìëíë©Ž ë°ì êž°-믞ëì 겜ì°ë§íŒìŽë ë°ì êž°-ë°ë³µììê²ë ì€ìíêž° ë묞ì
ëë€.
(
Unpin
ì ìì 죌ì¥ì 구ííêž° ìíŽ lang í목ìŽëìŽìŒ í ìë ìì§ë§ ê·žë ê² ëìì§ ìì ê² ê°ìµëë€.)
Unpin
ë° Pin
ì (ë) ìì í ë¶ë ìì±êž°ë¥Œ ì§ìíêž° ìíŽ ìŽë¯ž lang í목ìŽìŽìŒí©ëë€.
몚ë ì€ëª
ì ê°ì¬ë늜ëë€! ëë @Gankro ì Pin
ì êŽí nomicon ì€íìŒì ì¥ìŽ ì¬êž°ìì ë§€ì° ì ì© í ê²ìŽëŒë ë° ëìí©ëë€. ë€ìí ìì í ë°©ë²ìŽ ì¡Žì¬íë ìŽì ì ìì íì§ ìì ë°©ë²ìŽ ì ìì íì§ ììì§ì ëí ë§ì ê°ë° ìì¬ê° ìë€ê³ ìê°í©ëë€.
ìŽë¥Œ ìŽíŽíë ë° ëììŽëëë¡ ê° êž°ë¥ìŽ ìì í ìŽì ëë 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
implì ìŽë»ìµëê¹? ìŽê²ì ìì í ë°©ë²ì
ëë€
ì¬ì©ìê° ì ê³µ í 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
mem::replace
륌 ì¬ì©íì¬ T
ìì íê² ìŽëí ì ìêž° ë묞ì
ëë€. ê·žë§íŒ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
"ì newtype ëíŒì
ëë€. 결곌ì ìŒë¡&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
구íí©ëë€.ì§ë¬ž : ìŽê²ìŽ 귌볞ì ìŒë¡ íì ì€ìŽì£Œë ê²ì ëí ìë 묎ìì
ëê¹?
ì륌 ë€ìŽ,ìŽ implìŽ ìë€ë©Ž unsafe
ê° íìí ììë êžê³ ë
ì¡Žì¬íì§ ìììµëë€.
@ Matthias247 Pinìì & mut T륌 ìì íê² ê°ì žì¬ ì ììµëë€.
> Tê° ê³ ì íŽì ê° ìë ê²œì° mem :: swapì ì¬ì©íì¬ T륌 Pinìì ìŽëí ì ììµëë€. ê·žë¬ë©Ž ê³ ì 목ì ìŽ ë¬Žíšíë©ëë€.
ê°ì¬! ì, swap
ë ìì íì§ ìì ë°©ë²ìŽ ìëë¯ë¡ ë¶ëª
í 묞ì ê°ë©ëë€. íì§ë§ Unpin
ë°ìžë©ì swap()
ì ì¶ê°íì¬ ë¬žì 륌 íŽê²°í ì ììµëê¹? ì§êžê¹ì§ì 몚ë ìœëë Unpin
ìŽê±°ë ìŽìšë ìì íì§ ìêž° ë묞ì ì묎 ê²ë 깚ëšë €ìë ìë©ëë€.
ì¬ì í ì 륌 ê°ì¥ íŒëì€ëœê²íë ê² ì€ íëë Pin<T>
ì¬ë¬ 볎ìŠì ìœëííë€ë ê²ì
ëë€. Tì 죌ìê° ìì ì ìŽëŒë ê²ê³Œ ëŽë¶ ìíì ëí ìŒë¶ ë³ŽìŠ (ìŒë¶ììë ê³ ì / ë¶ë³ ìí©ìŽì§ë§ ì€ì ë¡ë ìëëë€).
ìì íì§ ìì ìœë / íë¡ì ì
ì Pin
êž°ë° ížì¶ìŽ ë íìí ê³³ ââ(ì : íëì poll
s)ìŒë¡ ìŽëíë ê²ìŽ ìì íì§ ìì íë¡ì ì
ì ì²ëŠ¬íë ê²ë³Žë€ ë ëì ì ììµëë€. 몚ë 겜ì°. ê·žë¬ë ìŽì ë ë€ë¥ž 묞ì ê° ììì 깚ë¬ììµëë€. ë³ê²œ ê°ë¥í ì°žì¡°ì ëí ì¡ìžì€ ê¶íìŽìë ìœëë íë륌 ìì ë¡ê² ìŽëí ì ììŒë©°ìŽ íëìì drop()
륌 ìì íê² ížì¶íë©Ž ë€ë¥ž ê³³ì ì ì¥ëë 죌ì. ìŽë¥Œ ìíŽ ìžêž ë drop(Pin<T>)
ì€ë²ë¡ëê° íìí©ëë€.
@RalfJung ì€ëª
죌ì
ì ê°ì¬í©ëë€! ëë ìŒë°ì ìŒë¡ ìì íì§ ìì ìŒì íì€ííë €ê³ íêž° ë묞ì ì¶ê°ì ìž ìŽíŽê° íìíë€ë ì¬ì€ì ëìí©ëë€. ëë ë ìŒë°ì ìŒë¡ ìì í 믞ëì ê²°í©ì륌 ìì±íê³ ì¶ìŽíë ì¬ëë€ì ëíŽ ë ê±±ì íì§ë§ ì§êžì ìŽë¬í 몚ë ì©ìŽì ì§ë©Žíê² ë ìë ììµëë€. ë§ìœ ê·žë€ìŽ Unpin
ì í íë¡ì ì
ì ì í ìŽíŽíì§ ìê³ ë ê²°í©ì륌 ìì±í ì ìê³ , ê·žë° ë€ì ê°ì ë ë°©ììŒë¡ ìëíë ê²°í© ìë§ ì»ì ì ìë€ë©Ž ( Unpin
ì 묌ììë§), ê·žê²ì ë°ëì§íŽ 볎ì
ëë€. ëë ê·žê²ì ìëíì§ ììêž° ë묞ì ëë ê·žê²ìŽ íì¬ ì¬ë¡ìžì§ ë§í ì ìë€. ì ìŽë Unpin
겜ê³ë¥Œ ìëìŒë¡ ì¶ê°íŽìŒíë€ê³ ìê°í©ëë€.
ë¹ ìŽëí곌 ííìŽ ë€ë¥Žë€ë ê²ë ìê³ ììµëë€. ê·žë¬ë ëë íì¬ ì°šìŽì ë³Žë€ ì ì€ ìŒìŽì€ì ë ì§ì€íê³ ììµëë€. ê·žëŠ¬ê³ ì¹šì 컬ë ì ì ì¬ì© ì¬ë¡ì ê²œì° ìŽë ë¶ê°ë¥í ì íì ë묎 ë³µì¡íì§ ìê³ ë§€ì° ì ìëí©ëë€. 믞ëì ê²œì° ìŽëì ì íìì ë¹ ìŽëì ì íìŒë¡ì ë°©ììŽ ëëœ ëìêž° ë묞ì ë¶ëª í ìŒë¶ ì°êµ¬ê° íìí ê²ì ëë€. ê·ž ë°©ë²ìŽ Pin APIë³Žë€ ìžì²Ž ê³µíì ìŽì§ ìë€ë©Ž ì¹ëŠ¬ë ìì ê²ì ëë€.
T: Unpin
ì mem::swap
ì ì¶ê°íë©Ž í¹ì ì íìŽ í ëŽë¶ì ìì§ ìëëŒë ì¬ì©í ì ììµëë€.
ê·žë¬ë swap ()ì Unpin ë°ìžë©ì ì¶ê°íì¬ íŽê²°í ì ììµëê¹? ì§êžê¹ì§ì 몚ë ìœëë ê³ ì íŽì ìŽê±°ë ìŽìšë ìì íì§ ìêž° ë묞ì ì묎 ê²ë 깚ì§ì§ ìììŒí©ëë€.
ê·žê²ì 몚ë ìŒë°ì ìž ìœë륌 깚ëšëŠŽ ê²ì
ëë€ : ë§ìœ ë¹ì ìŽ ì ìœììŽ T
ëí ì€ëë ì stable rustìì íšì륌 ìì±íë€ë©Ž, ê·žê²ì ëíŽ swap
륌 ížì¶ í ì ììµëë€. ìŽê²ì ê³ì ìëíŽìŒí©ëë€.
ìŽë ë¶ê°ë¥í ì íì ë묎 ë³µì¡íì§ ìê³ ì ìëí©ëë€.
ì묎ë ì¬êž°ì ìì í륌 ìíŽ ì ì ë ê²ë³Žë€ íšì¬ ë³µì¡íì§ ìê³ ìŽì ë²ì 곌 ížíëë ë°©ì ìŒë¡ Rust https://github.com/rust-lang/rfcs/pull/1858 ì ì°žì¡°
https://github.com/rust-lang/rfcs/pull/2349 ì RFCì ì¬êž°ìì ììíë 볎ížì ëžë¡ê·ž ì늬ìŠë ê³ ë € ë ë€ë¥ž ëììžì ëí 배겜곌 ìžìì죌ë ë° ëììŽ ë ê²ì ëë€. (ë ì§ë 죌목íìžì.ìŽ ëììžì ê±°ì 10 ê°ì ëì ìì ì€ì ëë€!)
ëí mem :: swapì ì í í¥ë¯žë¡ìŽ êž°ë¥ìŽ ìëêž° ë묞ì ë¶ì ì²ìŽì ëë€. ë§ ê·žëë¡ ê·žë¥
let temp = *a;
*a = *b;
*b = temp;
@Gankro ë ìì íì§ ìì ìœë륌 ì¬ì©íì§ ììµëê¹? Afaik 묞ì ê·žëë¡ ìž ì ììµëë€.
ížì§ : ìŽê²ì ëíŽ ìê°íë ë ë€ë¥ž ë°©ë²ì mem::swap
T: Unpin
륌 ì¶ê°íë ê²ìŽ ì€ì ë¡ ìžìŽ ìì€ìì ìì ì ì ì륌 ë³ê²œíë ê²ì
ëë€. ê·žê²ì ìŒììì 몚ë mycrate::swap
fns륌 깚ëšëŠŽ ê²ì
ëë€.
T : Unpin to mem :: swapì ì¶ê°íë©Ž í¹ì ì íìŽ Pin ìì ìì§ ìëëŒë ì¬ì©í ì ììµëë€.
ê³ ì íŽì ê° ìëìŒë¡ íìëë©Ž ( Sync
/ Send
ì ê°ì ë°©ììŒë¡) 묞ì ê°ëì§ ìëë€ê³ ìê°íìµëë€.
ê·žê²ì 몚ë ìŒë°ì ìž ìœë륌 깚ëšëŠŽ ê²ì ëë€ : ì ìœììŽ Tì ëí ì€ëë ì stable rustìì íšì륌 ìì±íë€ë©Ž, ê·žê²ì ëíŽ swapì ížì¶ í ì ììµëë€. ìŽê²ì ê³ì ìëíŽìŒí©ëë€.
ê·žë¬ë ìŽê²ì ë¶ëª í©ëë€. í¹ì± 겜ê³ê° Rustìì ëª ì ì ìŒë¡ ì íëìŽìŒíë€ë ì¬ì€ì ëíŽ ìê°íì§ ìììµëë€.
ì묎ë ì¬êž°ì ìì í륌 ìíŽ ì ì ë ê²ë³Žë€ íšì¬ ë³µì¡íì§ ìê³ ìŽì ë²ì 곌 ížíëë ë°©ììŒë¡ Rustì ìŽë ë¶ê°ë¥í ì íì ì¶ê°íë ë°©ë²ì 볎ì¬ì£Œì§ ìììµëë€. RFC 늬í¬ì§í 늬ìì ìŽë¬í ì€ëë ì ì ë° í ë¡ ì€ ìŒë¶ë¥Œ ì°Ÿì ì ììµëë€. í ê°ì§ ìë rust-lang / rfcs # 1858ì ì°žì¡°íìžì.
ê°ì¬í©ëë€. ìê°ìŽ ììŒë©Ž ìŽì ìì ì ëíŽ ì¢ ë ìœìŽ ë³Žê² ìµëë€. ë¶ëª í ë§ì ìê°ê³Œ ë žë ¥ìŽ ìŽë¯ž ì¬êž°ì ë€ìŽê°ê³ ëë íì€í 묌걎ì ì°šëšíê³ ì¶ì§ ììµëë€. ìŽ ìì ì ìë í ë ëŽ ì°ë € ì¬í곌 ì§ë¬žì ì ê³µíê³ ì¶ììµëë€.
ìë íìžì.
ê³ ì íŽì ê° ìëìŒë¡ íìëë©Ž (ëêž°í / 볎ëŽêž°ì ëìŒí ë°©ììŒë¡) 묞ì ê°ëì§ ìëë€ê³ ìê°íìµëë€.
ëŽê° ë¶ëª
íëì§ ì ëªšë¥Žê² ìµëë€. ëª
íííêž° ìíŽ !Unpin
ì íì ìŽëíë ê²ìŽ ì벜íê² ìì íë¯ë¡ mem::swap
ì íì ìŽëíë ê²ìŽ ì벜íê² ìì í©ëë€. T: !Unpin
ì íì ê³ ì í í, ìŠ Pin<P<T>>
ëŽë¶ìì ìŽëíë ê²ì ìì íì§ ììµëë€.
ì륌 ë€ìŽ, async / await ìœëìì ìíëë§íŒ ë¹ëêž° íšììì ë°í ë Future륌 ìŽëí ì ììµëë€. pin_mut!
ëë Pin<Box<..>>>
ëë êž°í í목ì ë£ìŒë©Ž ìŽëìŽ ì€ì§ë©ëë€.
ìŽì ëíŽ ëª ê°ì§ ì§ë¬žìŽ ììµëë€.
ì ì€ìì±ì ê°ì Pin<T>
ë async
ë
¹ì ë€ë¥ž ë¶ë¶ê³Œ ìíž ìì©í ë unsoundness ì© ë°ì êž° ë° ì ì¬ë ¥ (ì swap
& replace
), 몚ë 볎ì ì¬êž°ì ì ì ë ê³ ì API ë³íì ëíŽ ê³µì ê²ìŠ (ì : @jhjourdan ëë @RalfJung)ìŽ ìí ëììµëê¹?
ìŽ APIê° Rustì ì¶ì êž°ê³ / ìŽì ìë¯žë¡ ì ëí ìë¡ìŽ 볎ì¥ì ì ê³µí©ëê¹? ìŠ, async
ë° await
/ ë°ì êž°ì ëí ì§ì ë©ì»€ëìŠìŒë¡ ì¬ì© ì¬ë¡ë¥Œ ììŽ ë²ëŠ° 겜ì°ìŽë¥Œ ìíê³ì í¬ë ìŽíž ìì ë£ì ì ììŒë©° íì¬ ë³ŽìŠìŽ 죌ìŽì§ 겜ì°ìë§ ìëí©ëë€. 죌Ʞ?
ê³ ì API륌 ìì í í 결곌 ìŽë€ ì¢ ë¥ì API ëë ì í ìì€í ì¶ê°ê° ë¶ê°ë¥í©ëê¹? (ìŽ ì§ë¬žì 2ì íì¥ì ëë€.)
ìì í ë APIê° íë íë¡ì ì
ì ê°ì íêž° ìíŽ &pin T
ì íì ì ê³µíë ìžìŽë¥Œ ë°ì ìí€ë ìž¡ë©Žìì ì ê³µíë ë°©ë²ì 묎ìì
ëê¹ (ì ì ë APIë¡ë ì¢ì§ ìì ê² ê°ìµëë€).
ëª ê°ì§ ë©ëªšê° ììµëë€.
íì€ ëŒìŽëžë¬ëŠ¬ì 묞ìë ë§€ì° ëë¬Œê² ë³Žì ëë€. :(
ëë ê³ ì êµ¬ì¡°ê° ì ì ì ìŒë¡ ë§€ì° ë¶ëŽì€ëœê³ ââë³µì¡íë€ë ë° ë€ë¥ž ì¬ëë€ê³Œ ëìí©ëë€.
묞ìì Unmovable
ìì ë ì§ëì¹ê² ë³µì¡íŽ 볎ìŽë©° unsafe
; ìŽê²ì ì°šì ì±
ìŒë¡ 볎ì
ëë€. ìžìŽì RFC ìŽìì ììží ì€ëª
ë ì ì§ì ìŽêž°í (ìŠ, NLL ê°ì )ë ëì ë€ìì ì ê³µ í ì ììµëë€.
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ë ê°ì²Žë¥Œ ì€íì ê³ ì íë ìì í ë°©ë²ì ì ê³µíì§ ììµëë€.
íšì API륌 ì¬ì©íì¬ ìì íê² êµ¬íí ììë ë°©ë²ìŽ ìêž° ë묞ì ëë€.
ìŽì ê°ì 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)
}
ëë ê³ ì APIì ê°ë°ì ë묎 ë°ì íê² ë°ë¥Žì§ ììêž° ë묞ì ë€ë¥ž ê³³ìì ìžêžëê±°ë ì€ëª ëìì ì ììŒë©° ì°Ÿì ì ìììµëë€. ê·žë ë€ë©Ž ì¬ê³Œë늜ëë€.
Pinned
ì íìUnpin
구ííì§ ìë ZSTì ëë€. ê·žê²ì ë¹ì ìŽ í ì ììµëë€
stableììUnpin
ì ìë 구íì ìµì í©ëë€. ì¬êž°ì!Unpin
impls
ìì§ ìì ì ìŽì§ ìì ê²ì ëë€.
!Unpin
impls륌 ìì ì ìŒë¡ ë§ë€ ììë ìŽì ì ëí ì€ëª
ìŽ ììµëê¹?
Foo (í¬íš ì í)ê° repr (packed)ëì§ ìì 겜ì°ìë§ ìì í©ëë€.
ìŽë¡ ìžíŽ íëê° ìŽëëìŽ ì¬ì ë ¬ë©ëë€.
íší¹ì íë륌 ëì ìŒë¡ ìŽëí ì ììì ì믞í©ëê¹? ê·žê²ì ìœê° 묎ììµëë€. llvmìŽ ë€ë¥ž ìí©ìì íë륌 ìŽëíë ìœë륌 ìì±íì§ ìì ê²ìŽëŒê³ íì í©ëê¹? ë§ì°¬ê°ì§ë¡ ì€íì ê³ ì ë ê°ìŽ llvmì ìíŽ ìŽë ë ì ììµëê¹?
믞ë¬íšìë ë¶êµ¬íê³ ìŽê²ì ì ë§ ë©ì§ APIì²ëŒ 볎ì ëë€. ì íìŽ!
@Centril Ralfë ìì ì ëžë¡ê·ž ì ê³ ì
í APIë ìžìŽ ë³ê²œì ì í í¬íšíì§ ììŒë©° êž°ì¡Ž ìžìŽ êž°ë¥ì ì¬ì©íì¬ íì€ ëŒìŽëžë¬ëŠ¬ìì ìì í 구íë©ëë€. Rust ìžìŽì ìí¥ì 믞ì¹ì§ ììŒë©° ë€ë¥ž ìžìŽ êž°ë¥ì ëíŽ ì°šê°íì§ ììµëë€.
Pin
ì Rustì ê°ì¥ ê·ì€íê³ ê³ ì ì ìž êž°ë¥ ì€ íë ìž API unsafe
ìŒë¶ë¥Œ íìíì¬ APIì ë¶ë³ì±ì ëì
íë êž°ë¥ì íëª
íê² êµ¬í í ê²ì
ëë€. Pin
í¬ìží°ë¥Œ ëííì¬ íëì ìì
( DerefMut
)ì ìì íì§ ìê² ë§ë€ê³ ìŽë¥Œ ìííë ì¬ëë€ìŽ í¹ì ë¶ë³ì ì ì§íëë¡ ì구íê³ (ì°žì¡°ìì ë²ìŽëì§ ìì) ë€ë¥ž ìœëê° ìŽê²ìŽ ê²°ìœ ìŒìŽëì§ ìì ê²ìŽëŒê³ ê°ì íììì€. ìŽ ê°ì ížëŠì ì ì¬í íšì¬ ì€ëë ìë String
. ìŽë¡ ìžíŽ UTF8ìŽ ìë ë°ìŽížë¥Œ 묞ììŽì ë£ë ê²ìŽ ìì íì§ ìì ë€ë¥ž ìœëìì String
몚ë ë°ìŽí°ê° ë€ì곌 ê°ë€ê³ ê°ì í ì ììµëë€. UTF8.
ì ìží impls륌 ìì ì ìŒë¡ ë§ë€ ì ìëì§ì ëí ì€ëª ìŽ ììµëê¹?
ë€ê±°í°ëž implì íì¬ ë¶ìì íë©° ìŽë¬í APIì ì í êŽë šìŽ ììµëë€.
ë€ê±°í°ëž implsë íì¬ ë¶ìì í©ëë€.
ð€Šââïž ë§ìŽ ëë€ì, ì¡°êž ë ìê° íìŽìŒ íìŽì. ê°ì¬.
@alexcrichton ìŽê²ììŽ APIì ëí íë¥í ë¶ìì ëë€. ì°ëŠ¬ë ììŽ ë²ëŠŽ 죌ìë³Žë€ ë ì 볎졎íë €ê³ ë žë ¥íŽìŒí©ëë€!
ëª ê°ì§ ì견 :
as_mut
: ì§ë¬ž : "ì ì±"DerefMut implì ìŽë»ìµëê¹? ìŽê²ì ìì í ë°©ë²ì ëë€
Ʞ볞ì ìŒë¡ & mut P :: Targetì ìì±íë ì¬ì©ì ì ê³µ DerefMutì ížì¶íë €ë©Ž
ìë§ë ê·žê²ì ìì í ì ììµëë€. ìŽê² ìì íŽì?
Ʞ볞ì ìŒë¡ new_unchecked
륌 ížì¶íë©ŽìŽ ì íì ëí Deref
ë° DerefMut
구íì ëíŽ ìœìí©ëë€.
set
: 죌ìŽì§ í(ê·žëŠ¬ê³ ì°ëŠ¬ê° ì묎ê²ë 몚륞ë€ë ì¬ì€
ê³ ì íŽì ), ìŽê²ìŽ P :: TargetìŽ ìì§ìŽì§ ìëë€ë ê²ì 볎ì¥íì§ ììµëê¹? ë§ìœ ì°ëŠ¬ê° í ì ìë€ë©Ž
ê·žëë ë€ë¥ž P :: TargetìŒë¡ ë€ì ìŽêž°ííë©Ž ìì íì§ ììµëê¹?
ìëë©Ž ìŽê²ìŽ ìë©žìì êŽë šìŽ ììµëê¹?
ìŽê²ì í¬ìží°ì ìŽì ëŽì©ì ìì íê³ ê±°êž°ì ìë¡ìŽ ëŽì©ì ë£ìµëë€. "ê³ ì ëš"ì "ìì ëì§ ìì"ì ì믞íë ê²ìŽ ìëëŒ "ìì ë ëê¹ì§ ìŽëíì§ ìì"ì ì믞í©ëë€. ë°ëŒì drop
륌 ížì¶ íë drop
ê²ìŽ ì€ìí©ëë€. ìŽê²ìŽ ì ê° ììì ìžêž í ëë¡ ë³Žì¥ì
ëë€.
ì¬êž°ì ëê° ìì§ìŽë ê² ë³ŽìŽëì?
map_unchecked
: ì§ë¬ž :: ì¬êž°ì ë°ë¡ë 묎ìì ëê¹? ìŽê²ìŽ ìì íë€ë©Ž Pinì 볎ì¥ì ìë°íë ê²ì 볎ì¬ì£Œë ìë 묎ìì ëê¹?
ì륌 ë€ìŽ Pin<&&T>
ë¡ ììíê³ ìŽ ë©ìë륌 ì¬ì©íì¬ Pin<&T>
륌 ê°ì žìµëë€. ê³ ì ì 찞조륌 "ì í"íì§ ììµëë€.
get_ref
: ì¬êž°ì íëì "ìë§ë 묞ì "ë ëŽë¶ ê°ë³ì±ì ëë€. ë§ìœ Tê°
RefCell?
ì€ì ë¡ ìŽê²ì 묞ì ìŽì§ë§ 걎ì ì± ë¬žì ë êŽì°°íì§ ìììµëë€. ë¶ê±Žì í ê²ì Pin<RefCell<T>>
ìì Pin<&[mut] T>
ë¡ê°ë ë©ìë륌 ê°ë ê² ì
ëë€. Ʞ볞ì ìŒë¡ RefCell
ë ê³ ì ì ì ííì§ ìê³ impl<T> Unpin for RefCell<T>
ììµëë€.
ì¬êž°ì ì ì ë ê³ ì API ë³íì ëíŽ ê³µìì ìž ê²ìŠ (ì : @jhjourdan ëë @RalfJung)ìŽ ìí ëììµëê¹?
ìë, ì°ëŠ¬ ížìŽ ìëìŒ. ììì ìžêž í ëžë¡ê·ž ê²ì묌ìëìŽë¥Œ ê³µìííë ë°©ë²ì ëí ëª ê°ì§ ìê°ìŽ í¬íšëìŽ ìì§ë§ ì€ì ë¡ëìŽë¥Œ ìííì§ ìììµëë€. íìëšžì ìŽë êŽì¬ìë ë°ì¬ 곌ì íìì 죌멎 ì°ëŠ¬ê° í ê²ì ëë€. ;)
ë¹ëêž° ë° ëêž° / ì ëë ìŽí°ì ëí ì§ì ë©ì»€ëìŠìŒë¡ ì¬ì© ì¬ë¡ë¥Œ ììŽ ë²ëŠ° 겜ì°ìŽë¥Œ ìíê³ì í¬ë ìŽíž ìì ë£ì ì ììŒë©° íì¬ ì ê³µíë 볎ìŠìŽ 죌ìŽì§ë©Ž ìëí ê¹ì?
ê·žê²ìŽ ìëì ëë€.
ê³ ì API륌 ìì í í 결곌 ìŽë€ ì¢ ë¥ì API ëë ì í ìì€í ì¶ê°ê° ë¶ê°ë¥í©ëê¹? (ìŽ ì§ë¬žì 2ì íì¥ì ëë€.)
ìŽ, ê·ž ì§ë¬žì íì ì ê°ì§ê³ ëëµíë ë°©ë²ì ëªšë¥Žê² ìŽì. ì¶ê° í ììë ê³µê°ì ë묎 í¬ê³ ì°šììŽ ë묎 컀ì ê·žê²ì ëíŽ ìŽë€ ì¢ ë¥ì 볎ížì ìž ì§ì ë í ì ììµëë€.
ìì í ë APIë íë íë¡ì ì ì ê°ì íêž° ìíŽ & pin T ì íì ì ê³µíë ìžìŽë¥Œ ë°ì ìí€ë ìž¡ë©Žìì ìŽë€ ë°©ë²ì ì ê³µí©ëê¹ (ì ì ë APIììë ì¢ì§ ìì ê² ê°ìµëë€).
&pin T
ì ëíŽ ë ìŽì ì ëªšë¥Žê² ìµëë€. ìë¡ìŽ ìŒë° Pin<T>
ì ì ìŒì¹íì§ ììµëë€. íë¡ì ì
ì²ëŠ¬ ìž¡ë©Žìì " Unpin
ë° Drop
ìŽ (ê°)ìŽ ì íì ëíŽ êµ¬íëì§ ìììµëë€"ëŒê³ ë§íë íŽí¹ìŽ íìí©ëë€. ê·žë¬ë©Ž 맀í¬ë¡ë¥Œ ì¬ì©íì¬ ìì íê² ìí í ì ììµëë€. ì¶ê°ì ìž ìžì²Ž ê³µíì ìíŽ ì°ëŠ¬ë ìžìŽë¡ ë ìŒë° "íë íë¡ì ì
"êž°ë¥ì ìí ê²ì
ëë€.ìŽ êž°ë¥ì &Cell<(A, B)>
ìì &Cell<A>
ë¡ì ì íë í¬íší©ëë€.
ì ìží impls륌 ìì ì ìŒë¡ ë§ë€ ì ìëì§ì ëí ì€ëª ìŽ ììµëê¹?
AFAIK ë€ê±°í°ëž implìë ëª ê°ì§ ì€ë ì íìŽ ììŒë©°, ìŒë° 겜ê³ë¥Œ ì¶ê°íë©Ž ììëë¡ ìëíì§ ìë 겜ì°ê° ë§ìµëë€. (ìŒë° 겜ê³ë ëëë¡ ë¬Žìëë 겜ì°ë ììµëë€.)
Chalkê°ìŽ 몚ë ê²ì ê³ ì¹ ìë ìê³ , ìŒë¶ë§ ê³ ì¹ ìë ìì§ë§, ìŽë 쪜ìŽë Chalkìì ìŽê²ì ì°šëšíê³ ì¶ì§ ìì ê²ì ëë€.
íší¹ì íë륌 ëì ìŒë¡ ìŽëí ì ììì ì믞í©ëê¹? ê·žê²ì ìœê° 묎ììµëë€.
drop
ê° ì ë ¬ ë 찞조륌 ììíë¯ë¡ íší¹ ë íëìì drop
륌 ížì¶íë ì ìŒí ë°©ë²ì
ëë€.
llvmìŽ ë€ë¥ž ìí©ìì íë륌 ìŽëíë ìœë륌 ìì±íì§ ìì ê²ìŽëŒê³ íì í©ëê¹? ë§ì°¬ê°ì§ë¡ ì€íì ê³ ì ë ê°ìŽ llvmì ìíŽ ìŽë ë ì ììµëê¹?
LLVM ë³µì¬ ë°ìŽížë íë¡ê·žëš ëìì ë³ê²œí ì ìêž° ë묞ì 묞ì ê°ëì§ ììµëë€. ìŽê²ì Rustìì êŽì°° í ììë ë°©ììŒë¡ ë°ìŽí°ë¥Œ "ìŽë"íë ë ëì ìì€ì ê°ë ì êŽí ê²ì ëë€ (ì : ë°ìŽí°ì ëí í¬ìží°ê° ë ìŽì ë°ìŽí°ë¥Œ ê°ëŠ¬ í€ì§ ìêž° ë묞ì ëë€). LLVMì í¬ìží°ê°ìì ììë ë€ë¥ž ê³³ìŒë¡ ë°ìŽí°ë¥Œ ìŽëí ì ììµëë€. ë§ì°¬ê°ì§ë¡ LLVMì 죌ìê°ìë ì€íìì ê°ì ìŽëí ì ììµëë€.
@RalfJung ê°ì¬í©ëë€. ëª ê°ì§ íì ì§ë¬ž ...
"ìì ë ëê¹ì§ ìŽëíì§ ìì"ìŽëŒê³ ë§íë©Ž &mut self
ê° Pin<&mut Self>
죌ììì ìŽë í ê³³ìì &mut self
Drop
ê° ížì¶ ë ì ììì ì믞í©ëë€.? ìë©žìë ì íí ëŽë¶ í¬ìží°ì ìì¡Ž í ì ììµëë€.
set
ì (륌) 볌 ë ëŽ ê±±ì ì íšëìŽ ìŽë»ê² ì²ëŠ¬ëëì§ ìì§ë§, ìœë ì ì ì¡°êž ë íí€ì³ 볎멎 ìŽê²ìŽ 묞ì ê°ëì§ ìëë€ê³ ìê°í©ëë€.
"ìì ë ëê¹ì§ ìŽëíì§ ìì"ìŽëŒê³ ë§íë©Ž
&mut self
ê°Pin<&mut Self>
죌ììì ìŽë í ê³³ìì&mut self
Drop
ê° ížì¶ ë ì ììì ì믞í©ëë€.? ìë©žìë ì íí ëŽë¶ í¬ìží°ì ìì¡Ž í ì ììµëë€.
@alexcrichton ëŽ ìŽíŽë Drop::drop
ë°í ë ëê¹ì§ ìŽëíì§ ììë€ë ì믞ì
ëë€. ê·žë ì§ ììŒë©Ž ìŒë¶ ì¬ì© ì¬ë¡ (ì ìŽë ë°©íŽê°ëë 컬ë ì
ë° ì€í í ë¹ DMA ë²íŒ)ê° ë¶ê°ë¥ íŽì§ëë€.
ìë©žìë ìŽì ì Pin
ìììì ìŠëª
í ì ìë€ë©Ž ìŽëëì§ ìì 묎ìžê°ì ìì¡Ž í ì ììµëë€. ì륌 ë€ìŽ ìí ëšžì ìŽ ê³ ì ëìŽìŒíë API륌 íµíŽìë§ ìíì ë€ìŽê° ììë ê²œì° ìë©žìë íŽë¹ ìíììë ê²œì° ìì ëêž° ì ì ê³ ì ëìë€ê³ ê°ì í ì ììµëë€.
ìœëë ë¹ ë¡ì»¬ ìë©žìê° êµ¬ì±ìì ìŽëíì§ ìëë€ê³ ê°ì í ì ìì§ë§ ë¶ëª í ìì ì ìë©žìê° êµ¬ì±ìì ìì±íêž° ë묞ì ìŽëíì§ ìëë€ê³ ê°ì í ì ììµëë€.
"never moved until drop"ìŽëŒê³ ë§íë©Ž & mut selfê° Pin <& mut Self>ì 죌ììì ìŽë í ê³³ìì DropìŽ ížì¶ ë ì ììì ì믞í©ëë€. ìë©žìë ì íí ëŽë¶ í¬ìží°ì ìì¡Ž í ì ììµëë€.
ìŠ, drop
ê° ížì¶ ë ëê¹ì§ ë°ìŽí°ê° ìŽëíì§ ììµëë€ (í ë¹ íŽì ëì§ ìë ê²ì í¬íšíì¬ ë€ë¥ž ê³³ìŒë¡ ìŽëíì§ ìëë€ë ì믞). ê·žëŠ¬ê³ ì, drop
ë ì íìŽ ê·žê²ì ííí ì ìëëŒë ê³ ì ë ìì¹ìì ì€íì ìì¡Ž í ì ììµëë€. drop
ì ( ë) Pin<&mut self>
(몚ë ì íì ëíŽ)륌 ë°ììŒ íì§ë§ ììœê²ë ë묎 ëŠììµëë€.
drop
ê° ížì¶ ë í ë°ìŽí°ë ì믞ê°ìë ë°ìŽížìŽë¯ë¡ ìŽë€ ìì
ë ìí í ì ììµëë€. ê±°êž°ì ì í목ì ë£ê³ í ë¹ì ì·šìí©ëë€.
ì륌 ë€ìŽ ììì ìë©žìê° ìžì í í¬ìží°ë¥Œ ì¡°ì íì¬ ë±ë¡ì ì·šìíë 칚ì ë§í¬ 목ë¡ì íì©í©ëë€. ìë©žìê° ížì¶ëì§ ììŒë©Ž ë©ëªšëŠ¬ê° ì¬ëŒì§ì§ ìì ê²ì ëë€. (ììë ì¬ì í ì ì¶ ë ì ììŒë©° ê·ž ì°ê²° 목ë¡ì ììí ëšììì ê²ì ëë€. ê·žë¬ëìŽ ê²œì° ì íší ë©ëªšëŠ¬ë¡ ëšì ììŒë¯ë¡ ìì 묞ì ê° ììµëë€.)
ì ë Pin
, Unpin
ìì ì°Ÿì ììë 몚ë ëŽì©ì ìœììŒë©° ìŽì ëí ë
Œìë _ ìê°í©ëë€ _ ìŽì ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ ìŽíŽí©ëë€. ë€ë¥ž ì íì ì믞ì 구í ìì ì¬ì©ìê° ë°ëŒìŒíë ê³ìœì ëí 믞ë¬íš ìíê¹ê²ë std::pin
ëë Pin
ë° Unpin
ì ëí 묞ììì ìŽì ëí ë
Œìê° ë¹êµì ì ìµëë€. í¹í ë€ì ëêžì ëŽì© ì€ ìŒë¶ë¥Œë³Žê³ ì¶ìµëë€.
묞ìì íµí©ëììµëë€. 구첎ì ìŒë¡ í¹ë³í:
Pin
ë "í ëšê³ ê¹ìŽ"ë§ ë³Žíží©ëë€.Pin::new_unchecked
ë Deref
ë° DerefMut
ì ëí implì ì íì ë¡ëë€.Pin
ë° Drop
ê°ì ìíž ìì©.!Unpin
ë Pin
ë°°ì¹ ë íì Pin<Box<T>>: Unpin where T: !Unpin
ìŽì ì ëí 귌거. ìŽë ìì "1 ëšê³ ê¹ìŽ"ì í곌 ë€ì ì°ê²°ëì§ë§ ì ì í ì€ëª
ìŽ í¬íš ëìŽ êµ¬ì²Žì ìž ìê° ë
ììê² ëììŽ ë ê²ìŽëŒê³ ìê°í©ëë€.@alexcrichton ì ë°ë¡ë ꜀ ì ì©íë€ë ê²ì unsafe
ë°©ë²ì ëíŽ ë¬ŽììŽ ì못 ë ì ìëì§ì ëí ììŽëìŽë¥Œ ì ê³µíë©Ž ë§ì ëììŽ ë ê²ìŽëŒê³ ìê°í©ëë€ (ì ìŽë íì€í ì ìê² ëììŽëììµëë€). ìŒë°ì ìŒë¡ìŽ APIì 믞ë¬íšìŒë¡ ìžíŽ ë€ìí ìì íì§ ìì ë©ìëì ìì ì± ì¹ì
ìŽ íì¥ëê³ 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<Box<T>>
ì ëìê² ë ì¢ê² ìœìµëë€. í¹í Box
ë§ ê³ ì ëìŽ ìê³ í¬íš ë ëŽì©ìŽ ìëëë€.Unpin
-> Repin
: ë€ë¥ž ë§ì»€ í¹ì±ì ê²œì° ìŒë°ì ìŒë¡ íŽë¹ ë§ì»€ í¹ì±ì ê°ì§ ê²ìŒë¡ í ììë ìì
ì ëíŽ ìŽìŒêž°í©ëë€. ìŽê²ìŽ ìë§ë Unpin
ìŽ ì²ìì ì íë ìŽì Unpin
ê²ì ê³ ì í ë€ì 결곌 ë ê³ ë €ììŽ ë€ë¥ž ê³³ì ë€ì ê³ ì í ì ìë€ë ê²ì
ëë€. ì¢ ë ì¥í©íì§ë§ @ mark-imì PinNeutral
ì ìë ë§ìì ëëë€.Pinned
-> PermanentPin
: Pinned
ê° ì¢ì ìŽëŠìŽëŒê³ ìê°íì§ ììµëë€. Pinned
ê° í¬íš ë í목ì ì€ì ë¡ ê³ ì ëì§ ììêž° ë묞ì
ëë€. Unpin
ìëëë€ . PhantomPin
ë Pin
ê° ì€ì ë¡ ìíë ê²ìŽ ìë Pin
ì°žì¡°íë€ë ì ìì ì ì¬í 묞ì ê° ììµëë€. NotUnpin
ìë ìŽì€ ë¶ì ìŽììŽì ì¶ë¡ íêž° ìŽë µìµëë€. @Kimundi ì PhantomSelfRef
ì ìì ꜀ ê°ê¹ìì¡ì§ë§ ì¬ì í ìœê° "ë³µì¡íë€"ê³ ìê°íê³ "í ë² ê³ ì íë©Ž ìŽëí ì ìì"ìì±ì í ìžì€íŽì€ ì ì°ê²°í©ëë€ ( ìêž° ì°žì¡°ê° ììµëë€). ëŽ ì ìì PermanentlyPinned
ë¡ íí ë ìë ììµëë€. ëë ìŽë€ ííê° ë ëìì§ ëªšë¥Žê² ìµëë€.Pinned
ì ê²°êµ NotX
ê°ëìŽìŒíë€ê³ ìê°í©ëë€. X
ë Unpin
ê° ìŽëŠìŽ ë¶ë ìŽëŠì
ëë€. Pinned
ì ì ìŒí ìì
ì ëë¬ìžë ì íìŽ Unpin
구ííì§ ìëë¡ ë§ëë ê²ì
ëë€. (ížì§ : ê·žëŠ¬ê³ ì°ëŠ¬ê° Unpin
륌 ë€ë¥ž ê²ìŒë¡ ë°êŸžê³ ìë€ë©Ž ìë§ë ìŽì€ ë¶ì ì 묞ì ê°ëì§ ìì ê²ì
ëë€)
"ìŽ ì íì ë€ë¥ž ê³³ì ê³ ì ë ì ìì"ì "ìŽ ì íì íìì ìŽëí ì ìì"ì ë¶ìì© ìŒ ë¿ìŽë¯ë¡ Repin
ì ìŽíŽê°ëì§ ììµëë€.
@tikue ìŽë€ ì믞ìì ëë ëê°ì ëëìŽ ë€ì§ë§ ë°ëë¡. Unpin
ì "this is _not_ constrained by Pin
"ë¡ ííëìŽìŒíê³ Pinned
ë "this _is_ constrained by Pin
"ë¡ ííëìŽìŒíë€ê³ ìê°í©ëë€. s/Unpin/TemporaryPin
, s/Pinned/PermanentPin
?
ížì§ : ì, Repin
ê° Unpin
ì ë¶ìì© ìž ê²ì ëí ê·íì ìì ì ëŽ
ëë€. Pin
ë Unpin
ìž ì íì ëíŽ "ì€ìíì§ ìë€"ë ì¬ì€ì ì ë¬íê³ ì¶ììµëë€. Unpin
ìŽ (ê°) ë§€ì° ì ìëíë€ê³ ìê°íì§ ììµëë€. ë°ëŒì ìì ì ì TemporaryPin
.
@jonhoo ëë ê·ž ë°ë륌 ì ížíë 죌ë ìŽì ë Pinned
ìŽ í¹ì±ìŽ 구íëë ê²ì ë§êž° ë묞ìŽëŒê³ ìê°í©ëë€. ìŠ, ëìê² ê°ì¥ ëª
ë°±í ì믞ìì ì§ì í ë¶ì ì ì
ëë€.
ížì§ : ìŽëšê¹ì?
Unpin -> Escape
Pinned -> NoEscape
í¥ë¯ž ë¡ ë€ì .. 묞ìì ìŽë»ê² ë€ìŽê°ë ì§ ìì ë³Žë €ê³ í©ëë€. ë€ì곌 ê°ì ê² :
ìŒë°ì ìŒë¡
Pin<P>
ë°ìŒë©ŽP
ì ëììŽ ìì ë ëê¹ì§ ìŽëíì§ ìëë€ë 볎ì¥ê³Œ íšê» ì ê³µë©ëë€. ìŽì ëí ììžëP
ì 목íê°Escape
ì ëë€.Escape
ë¡ íìë ì íì ìŽëíëëŒë (ì : ëŽë¶ ì첎 ì°žì¡°ê° í¬íšëì§ ìì) ì íšíë€ê³ ìœìíë¯ë¡Pin
륌 "ìŽì€ìŒìŽí"í ì ììµëë€.Escape
ë ìë ížë ìŽ ížìŽë¯ë¡Escape
ìž ì íìŒë¡ ìì í 구ì±ë 몚ë ì íëEscape
ì ëë€. 구íìëNoEscape
impl !Escape for T {}
륌 ì¬ì©íê±°ëstd::phantom
ìNoEscape
ë§ì»€ë¥Œ í¬íšíì¬ ìŒê°ììŽ êž°ë¥ì ìµíž ìì í ì ììµëë€.
"íì¶"ìŽëŒë ëšìŽìì ì°ê²°ìŽ ìœê° ìœíŽ 볎ìŽì§ë§ ꜀ êŽì°®ì ê² ê°ìµëë€. ë³ëë¡ ìì ëŽì©ì ìì±íë©Ž Pin<P>
ê° P
ì ëììŽ ìŽëëì§ ìëë€ë ê²ì _ ì ë§ _ 볎ì¥íì§ ìëë€ë ê²ì 깚ë¬ììµëë€ (ì íí Unpin
ë묞ì). ëì , _ either_ P
ì ëììŽ ìŽëíëì§ _or_ P
ì ëììŽ ìŽëëì§ ìëì§ ì¬ë¶ë ì€ìíì§ ììì 볎ì¥í©ëë€. ê·žëë ë ëì ìŽëŠ ì íì ì늬Ʞ ìíŽ ê·žê²ì ì¬ì©íë ë°©ë²ì ëªšë¥Žê² ìµëë€ ... ê·žë¬ë ê·žê²ì ìë§ë 묞ìì ìŽë€ ì ìŒë¡ë ê·žê²ì ë§ë€ìŽìŒ í ê²ì
ëë€.
ê°ìžì ìŒë¡ ëë ìŽëŠìŒë¡ Unpin
륌 ì«ìŽí©ëë€. ìë§ë impl !Unpin
ë¡ ì죌 볎ìŽì§ë§ "not-un-pin"ìŽëŒê³ ìœê³ ëª ë²ì ëë ì¬ìŽíŽìŽ íìíêž° ëë¬žìŒ ê²ì
ëë€. 'ìŽì ëªšëž ì)ì "ì¢ìì. ì²ì ê³ ì ëë©Ž ììí ê³ ì ë ê²ì
ëë€."ëŒë ê²°ë¡ ì ëŽëŠŽ ì ììŒë¯ë¡ ìŽì€ ë€ê±°í°ëžë¥Œ ìµì í í ìë ììµëë€.
ìŒë°ì ìŒë¡ ìžê°ì êžì ëì ë¶ì ì ìž ìê°ìíë 겜í¥ìŽ ììµëë€ (ì§ì ì¶ì²ììŽ, ìì¬ì€ë¬ìŽ ê²œì° Richard Hudsonì ìì
ì íìžíììì€).
Btw Repin
ì ë§ ì¢ë€ì.
Pin
ë ê³ ì ë ê°ì íì ê³ ì ë ê°ìŒë¡ ë§ë€ì§ ìêž° ë묞ì ì€ëª
íêž° ìŽë µìµëë€. Pinned
ë ì€ì ë¡ ì묎ê²ë ê³ ì íì§ ìêž° ë묞ì íŒë ì€ëœìµëë€. ê·žê²ì ëšì§ Pin
ìŽì€ìŒìŽí륌 ë°©ì§í©ëë€.
Pin<P<T>>
ë ê³ ì ë ê°ìŒë¡ ì€ëª
í ì ììµëë€. ê³ ì ë ê°ì ê°ìŽ íì ë²ìŽë ììë ì íìŽ ìëë©Ž ìŽëí ì ììµëë€.
ë¹ ë¥ž ìží°ë· ê²ìì ë ì¬ë§ìì íìŽ ê³ ì ë ë íìì ë¹ ì ž ëê°ë ê²ì íì¶ìŽëŒê³ í©ëë€.
ëë ëí Unpin
ëì ìŽì€ìŒìŽíëŒë ì©ìŽë¥Œ ì¢ìíì§ë§ EscapePin
í©ëë€.
ì¬êž°ì ë§ì ì¢ì ìê°ìŽ ììµëë€!
í ê°ì§ ìŒë°ì ìž ì¬í : 몚êµìŽê° ìë ì ìê² Pin
ë° Unpin
ë ëë¶ë¶ ëì¬ / ëìì
ëë€. Pin
ì ìë¯žê° ìì§ë§ ê°ì²Žë í ë²ì íëì ë©ëªšëŠ¬ ìì¹ì ê³ ì ëìŽ ììŒë¯ë¡ Unpin
ëíŽ ëìŒí ìì¹ë¥Œ 볌 ì ììµëë€. Pin<&mut T>
찞조륌 ë°ìŒë©Ž Unpin
ì¬ë¶ì êŽê³ììŽ íì ë©ëªšëŠ¬ ìì¹ê° ìì ì ìŽëŒë ìë¯žë¡ Tê° ê³ ì ë©ëë€. ì€ì ë¡ ê°ì²Žë¥Œ ìì
ìŒë¡ ê³ ì íŽì í ì ììµëë€. ì°šìŽì ì Unpin
ì íì ì¶ê° ìíž ìì©ìì ì ì§íêž° ìíŽ ê³ ì 볎ì¥ìŽ íìíì§ ìë€ë ê²ì
ëë€. ê·žê²ë€ì ìêž° ì°žì¡°ê° ìëë©° ê·žë€ì ë©ëªšëŠ¬ 죌ìë ì륌 ë€ìŽ ë€ë¥ž ê°ì²Žë¡ 볎ëŽì§ì§ ìê³ ê±°êž°ì ì ì¥ëì§ ììµëë€.
Unpin
ì€ì ë¡ ì믞íë ë°ì ëíŽ ëëŒìŽ ìì
ìíë ê²ìŽ ì¢ê² ë€ë @tikueì ì견ì ëìíì§ë§ ì ëííêž°ë ìŽë µìµëë€. ê·žë¬í ì íìŽ ìì í ìì§ìŒ ì ìë€ë ê²ìŽ ìëëŒ ìì í ìêž° ì°žì¡° ì±ìŽ ë¶ì¡±í ê²ë ìëëë€. ìë§ë "ê°ì²Žê° ìŽë ë ë ì 첎 ë©ëªšëŠ¬ ê³µê°ì í¬ìží°ê° 묎íšíëì§ ìëë€"ë ê²ì
ëë€. ê·žë° ë€ì StableOnMoveAfterPin
ëë StableMove
ê²ìŽ ìµì
ìŽ ë ì ìì§ë§ ê·ž ëí ì¢ì§ ìì ê² ê°ìµëë€.
ë륌 ìíŽ Repin
ë Unpin
ì ëìŒí í©ë³ìŠì ê°ì§ê³ ììµëë€. ìŠ, í ê°ì§ê° 뚌ì ê³ ì íŽì ëë€ë ê²ì ì믞í©ëë€. ëŽ ìŽíŽë¡ë ë°ìíì§ ììµëë€.
í¹ì±ì ëë¶ë¶ ì íì Pin
륌 볞 í ë°ìíë ìŒì ì ìíêž° ë묞ì PinNeutral
ëë PinInvariant
ê²ìŽ ëìì§ ììµëë€.
Pin
vs Pinned
ì êŽë šíì¬, ëë ê·žê²ì 볎ë ìì ì í¬ìží° ìíìŽêž° ë묞ì Pinned
ì ížíë€ê³ ìê°í©ëë€.
@ Matthias247 P: Unpin
ê²œì° P::Target
ì 죌ìê° ìì ì ìŽëŒë 볎ì¥ìŽ ìë€ê³ ìê°í©ëë€. ëë ìŽê²ì ëíŽ í늎 ì ììµëê¹?
ìë íìžì.
Pin <& mut T>ì ëí 찞조륌 ë°ìŒë©Ž ê³ ì íŽì ì¬ë¶ì êŽê³ììŽ íì ë©ëªšëŠ¬ ìì¹ê° ìì ì ìŽëŒë ìë¯žë¡ Tê° ê³ ì ë©ëë€.
ìŽê²ì ì믞륌 ëª
íí í ì ììµëê¹? 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
@jonhoo ì€ì ë¡ ì¢ì ì§ë¬žì
ëë€. ëŽ ì¶ë¡ ì ì ë¬ŒìŽ ììì ë€ìŽê° ë€ì 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>
.
ìŽê²ë€ì 몚ë ìë³žë³Žë€ êžžì§ë§, ìŽê²ì ëí ì¶ë¡ ìŽ ìŒë§ë ì¬ìžíì§ë¥Œ ê³ ë €í ë ë ëª íì±ì ìíŽ ê°ì¹ìë í¬ìê° ë ì ììµëë€.
Re : Repin
, ë€ì곌 ê°ì ê²ìŒë¡ ììí©ëë€.
unsafe trait Repin {
unsafe fn repin(from: *mut Self, to: *mut Self);
}
ê°ë ìœí
ìž ë¥Œ ìŽëíë Vec
-like 컬ë ì
ëŽìì !Unpin
ì íì ì§ìíë ë° ì¬ì©í ì ììµëë€ (ìŽë ìŽë¬í í¹ì±ì ì¶ê°íêž°ìí ì ììŽ ìëëë€. í¹ì± ìŽëŠ).
ëí ìŽëŠì bikshedding :
Pin<P>
-> Pinned<P>
: í¬ìží° P
ê°ëŠ¬í€ë ê°ìŽ ë©ëªšëŠ¬ì ê³ ì ë©ëë€ (ìì ë ëê¹ì§).Unpin
-> Moveable
: ê°ì ê³ ì í íìê° ììŒë©° ìì ë¡ê² ìŽëí ì ììµëë€.Pinned
(struct)-> Unmoveable
: Pinned
ìŽìŽìŒíë©° ìŽëí ì ììµëë€.ëë Pin
ëë Unpin
ê° ë³ê²œëìŽìŒíë€ê³ ìê°íì§ ììŒë©°, ëìì 몚ë ëŽ ì견ì ëª
ííì§ ìê³ ììží ëŽì©ì ì¶ê°íê±°ë ì€íŽì ìì§ê° ììµëë€. ëí ì°ëŠ¬ë ìŽë¯žìŽ ëí륌íê³ Pin
ë° Unpin
륌 ì¬ì©íêž°ë¡ ê²°ì íìŒë©°ìŽ ì€ë ëìì ê°ì žìš ìžì ì€ ìŽë€ ê²ë ìë¡ìŽ ê²ìŽ ìëëë€.
ê·žë¬ë Pinned
ë ìŽì ë
Œì ìŽí ì¶ê°ëììŒë©° PhantomData
ì ê°ì í¬í
ë§ì»€ ì íì ì§ì°ë €ë©Ž PhantomPinned
륌 ë§ëë ê²ìŽ í©ëŠ¬ì ìŽëŒê³ ìê°í©ëë€.
ê°ìžì ìŒë¡ ëë Unpinì ìŽëŠìŒë¡ ì¬ì©íë ê²ì ë§€ì° ì«ìŽí©ëë€. ìë§ë ê·žê²ìŽ "not-un-pin"ìŽëŒê³ ìœê³ ê²°ë¡ ì ëŽëŠ¬êž° ìíŽ ëª ë²ì ëë ì¬ìŽíŽì íìë¡íë impl! "ì¢ìì. ìŽê±Ž ì²ì ê³ ì ëë©Ž ììí ê³ ì ë ê²ì ëë€."ëŒë ë»ì ëë€. ê·žëì ìŽì€ ë¶ì ì ìµì í í ìë ììµëë€.
ìŽê²ì ëŽ ê²œí곌 ìì í ë°ëì
ëë€. !Unpin
ìëìŒë¡ 구ííë€ë ê²ì ë§€ì° íì ìì¥ ìž ìì íì§ ìì ìœë륌 ì¬ì©íì¬ ìëìŒë¡ ì첎 ì°žì¡° 구조륌 구ííë€ë ê²ì ì믞í©ëë€. ë°ëë¡, í¬ìží° ë€ì ì ì¬ì ìŒë¡ ê³ ì íŽì ë 구조첎륌 ì ì§íë 몚ë ê²ì Unpin
ì ìì implì ê°ìµëë€. ì륌 ë€ìŽ std
ìì Unpin
ì 몚ë implsë ìì ê·¹ì±ì
ëë€.
@withoutboats ì¬êž°ì ì êž° ë ë ŒììŽ ìŽë¯ž ë Œì ëìŽ ìŽëŠë€ì ëí ìŽì ë Œìì ëí ë§í¬ë¥Œ ì ê³µ í ì ììµëê¹?
RFC ì€ë ë ë° ì¶ì 묞ì https://internals.rust-lang.org/t/naming-pin-anchor-move/6864 ììë íì€í ë Œìëìì§ë§ ë€ìì ì€ë ë íëì ëë€.
(ìŽ ì€ë ëì ìµì»€ ë° í ì íì ìŽì Pin<Box<T>>
ë° Pin<&'a mut T>
)
Unpinì Unpinnableì ìœìë¡ ìœíìŒí©ëê¹? í ëŽë¶ì ìëëŒë ì€ì ë¡ ê³ ì ë ê°ì ì ì§í ì ìêž° ë묞ì ê³ ì í ì ììµëë€. (ê·žê² ëŽ ë¶ë¶ì ëí ì¬ë°ë¥ž ìŽíŽì ëê¹?)
ìŒë¶ 묞ì ë° ëêž ì€ë ë륌 ìŽíŽ 볎ìì§ë§ Unpinnableì ëí ì°žì¡°ë í¹ë³í ë³Žì§ ëª»íìµëë€.
ê³ ì íŽì ë 묎ììŽë ì€ì¬ìë ìë©ëë€. ëŽê° ìê°íë í ê°ì§ë ë§ì ì¬ì©ììê² ë¶ëª
íì§ ìì§ë§ ì¬ì€ì
ëë€. íì€ ëŒìŽëžë¬ëŠ¬ ì€íìŒ ê°ìŽëë íì©ì¬ê° ìë í¹ì± ìŽëŠìŒë¡ ëì¬ë¥Œ ì ížíë€ë ê²ì
ëë€. ë°ëŒì Sendable
ìëëŒ Send
Sendable
. ìŽê²ì ì벜í ìŒêŽì±ìŒë¡ ì ì©ëì§ ììì§ë§ íì€ì
ëë€. Unpin
ë ê³ ì í Pin
ìììŽ ì íì ê³ ì íŽì í ì ììŒë¯ë¡ "ê³ ì íŽì "ì ê°ìµëë€.
ê°ì ìŽëŠ Move
( "ìŽë"íì§ êž°ìµ)ë¥Œë³Žë€ ëª
í Unpin
ê·žë€ìŽ ì€íë €ì ëìì ì°ê²°íë ê²ë³Žë€, ì í ìŽëí ììë곌 êŽë šìŽ ìë€ë ê²ì ì믞íêž° ë묞ì í ì í. Rustìì Sized
ê°ì ìŽëí ì ìêž° ë묞ì !Unpin
ì íì ìŽëí ì ììµëë€.
ëŽê° 볞 ê²ì²ëŒ ì 첎 묞구 ìž ìŽëŠì stdì ëíŽ ë§€ì° ëšêŽì ìŒ ê²ì ëë€.
ì§§ì§ ìì ìë ìì§ë§ ì íí ëŽê° ìœë ë°©ë²ì
ëë€. í¹ì±ì ëì¬ìŽêž° ë묞ì ì íì ëí ì°ì°ìŽ ìë ì íì ì€ëª
íë ë° ì¬ì©íë €ë©Ž ìëìŒë¡ íì©ì¬ë¡ ë³ííŽìŒí©ëë€. std::iter::Iterator
ë ë°ë³µ ê°ë¥í 묎ìžê°ì ìíŽ êµ¬íëê³ , std::io::Seek
ë ê²ì ê°ë¥í 묎ìžê°ì ìíŽ êµ¬íëê³ , std::pin::Unpin
ë ê³ ì ë¶ê°ë¥í 묎ìžê°ì ìíŽ êµ¬íë©ëë€.
@withoutboats ëì¬ ë¬žì ê°ìë ë€ë¥ž ìŽëŠì í¹ì 묞ì , ì륌 ë€ìŽ Escape
ëë EscapePin
? ìŽ í ë¡ ìŽ ìŽì ì ìŒìŽë¬ë€ë ê²ì ìŽíŽíì§ë§ ì§êžì ë ë§ì ìì ìŽ ì§ì€ëìŽ ììŒë¯ë¡ ìì í ì€ë³µ ë ì¬íŽììžì§ íì€íì§ ììµëë€.
ëë ì¬ì€ ìê° íê°ì§ë ìì¬ì ë¶ìŽìŽ Pin
ë° Unpin
(ìŽë€ ì¢
ë¥ì "í"ìŽë©°, ìŒë¶ë "ê³ ì íŽì "ìŽë€) í ììŒë¡ ìœì ì, ê²œì° Pin
ë ëì¬ê° ìë ëª
ì¬ ì¬ìŒí©ëë€. Pin
ìŽ í¹ì±ìŽ ìëëŒë ì¬ì€ìŽ ìí©ì ëª
íí íŽì€ëë€. Pinning
ì ì°¬ì±íë 죌ì¥ì íë¹íì§ë§ ì¬êž°ìë ìŽëŠ êžžìŽ ë¬žì ì ë§ìê²ë©ëë€. ë°©ë² ìì Ʞ륌 ë°ë³µíŽìŒí©ëë€ í¹í ë묞ì self
: ë ë², ì°ëŠ¬ë 묞ìì ë§ì ëëŒ self: Pinning<&mut Self>
. Pinning<P>
ìŽ Pin<P>
ë³Žë€ ëª
í í ê°ì¹ê°ìë ì 첎 4 ìëŒë ê²ì íì íì§ ëª»í©ëë€.
@tikue "íì¶"ì©ìŽë ëŽê° ìê°íë ê³ ì ë³Žë€ íšì¬ ë 곌ë¶íëìŽ íì¶ ë¶ì곌 ê°ì ê°ë 곌 충ëí©ëë€.
ëí ì°ëŠ¬ë ìŽë¯žìŽ ëí륌íê³ , Pin곌 Unpinì ì¬ì©íêž°ë¡ ê²°ì íê³ ,ìŽ ì€ë ëìì ì êž° ë ìŽë€ 죌ì¥ë ìë¡ìŽ ê²ìŽ ìëëë€.
ìŽê²ì ì 륌 ì못ë ë°©ììŒë¡ 묞ì§ëŠ
ëë€. 컀뮀ëí°ì 겜í ë³Žê³ ìê° ìíì§ ììµëê¹? ê°ìžì ìŒë¡ìŽ ì€ë ëì ë€ë¥ž ëêžê³Œ Pinned
ìŽì€ ë€ê±°í°ëžìì ë³ì¹ìì Unpin
ëí ëª
íí 묞ì 륌 ë³Žì§ ëª»íìµëë€.
Rustë ìŽì€ìŒìŽí ë¶ìì ìííì§ ììŒë¯ë¡ ìŽê²ìŽ ì€ì 묞ì ëŒê³ ìê°íì§ ììµëë€.
: bell : ì§êžì ì ì ì ë°ëŒ ìµì¢ ëêž êž°ê°ì ì ë ¥í©ëë€ . :벚:
ìŽ ë ì ëë¬íêž° ì ì 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
ìŽëŒë ìŽëŠìŽ ì구ì ìžì§ ì¬ë¶ì
ëë€ Pinned
컚ížë¡€. Pin*
ì ë€ë¥ž ìŽëŠì ë ê°ì ë€ë¥ž ê°ë
ìŽ íŒëëë ê²ì ë°©ì§í©ëë€.
PhantomNotUnpin
: P
ê°ìžì ìŒë¡ ëë Unpinì ìŽëŠìŒë¡ ì¬ì©íë ê²ì ì«ìŽí©ëë€. ìë§ë impl! UnpinìŽ "not-un-pin"ìŽëŒê³ ìœê³ ì¬ë¬ ë죌Ʞ륌 íìë¡íêž° ëë¬žìŒ ê²ì ëë€.
ê°ì¬! ëë ëí ꜀ ì€ë«ëì Unpin
ì ìíŽ ê·ì°®ê² ëŽìŽ ê·ž ìŽì 륌 ì íí ì§ì í ì ìììµëë€. ìŽì ëë ìŽíŽíë€ê³ ìê°í©ëë€. ê·žê²ì ìŽì€ ë¶ì ì
ëë€.
ìŽê²ì ëŽ ê²œí곌 ìì í ë°ëì ëë€. ìëìŒë¡! Unpinì 구ííë€ë ê²ì ë§€ì° íì ìì¥ ìž ì¬ì© ì¬ë¡ ìž ìì íì§ ìì ìœë륌 ì¬ì©íì¬ ìëìŒë¡ ì첎 ì°žì¡° 구조륌 구ííë€ë ê²ì ì믞í©ëë€. ë°ëë¡, í¬ìží° ë€ì ì ì¬ì ìŒë¡ ê³ ì íŽì ë 구조첎륌 ì ì§íë 몚ë ê²ì Unpinì ìì implì ê°ìµëë€. ì륌 ë€ìŽ íì€ìì Unpinì 몚ë implsë ìì ê·¹ì±ì ëë€.
ê·žë¬ë 구íë¿ë§ ìëëŒ í ë¡ ì êŽí ê²ì
ëë€. impl !Sync
ì ë§€ì° ë묌ì§ë§ (ë¶ìì íêž° ë묞ì íŒìê° ìëëë€) Sync
ë° !Sync
ì íì ëíŽ ìŽìŒêž°íë ê²ì ë§€ì° ìŒë°ì ì
ëë€. ë¹ì·íê², !Unpin
ëìŽ êž°ë¥ì ëí ë
Œììì ìë¹í ë§ìŽ ëìëë°, ì ìŽë ì ê° ê°ì§ê³ ììë ê²ì
ëë€.
ì ë ìì±ì êžì ì ìŒë¡ íííë ê²ì ì íží©ëë€ ( MoveFromPin
ì ë). ëë ìžê° ê³µíì ìì í íì íì§ ëª»í©ëë€. Pin
ìë ë¬ëŠ¬ìŽ í¹ì± 겜ê³ë¥Œ ì죌 ìž íìê° ìêž° ë묞ì
ëë€.
Rustë ìŽì€ìŒìŽí ë¶ìì ìííì§ ììŒë¯ë¡ ìŽê²ìŽ ì€ì 묞ì ëŒê³ ìê°íì§ ììµëë€.
LLVMì ê·žë êž° ë묞ì ìŽì€ìŒìŽí ë¶ìì ì¬ì í ââRustì êŽë šìŽ ììµëë€.
ìŽë¥Œ íŽê²°íë ë°©ë²ì Pin
/ Unpin
ì ì믞륌 ë€ì§ë ëšìŽë¥Œ ì ííë ê²ì
ëë€. ì륌 ë€ë©Ž, ìŽëŠì ë³ê²œ Unpin
ì Relocate
. ê·žë¬ë©Ž !Unpin
ë !Relocate
ë©ëë€. ê·žê²ì ëìê² íšì¬ ë ì§êŽì ìž ìë¯žê° ììµëë€. "ì€,ìŽ ì íì ê°ì²Žë ì¬ë°°ì¹ í ì ììµëë€"ëŒê³ ìœììµëë€. ë ë€ë¥ž 겜ììë Movable
ì
ëë€.
Pin
ë첎 í ììë ë°ë ëšìŽê° 묎ììžì§, ìëë©Ž íìíì§ ëªšë¥Žê² ìµëë€. ê·žë¬ë ëë 묞ìê° ë€ì곌 ê°ìŽ ë§íë ê²ì íì€í ììí ì ììµëë€.
ê³ ì ë ê°ì²Žë ê°ì²Žë¥Œ ë©ëªšëŠ¬ì ì¬ë°°ì¹ í ììë 겜ì°ìë§
DerefMut
륌 íµíŽ ì§ì ìì í ì ììµëë€.Relocate
ë ìë ížë ìŽ ížìŽë©° Ʞ볞ì ìŒë¡ ì¶ê°ë©ëë€. ê·žë¬ë ê°ì 볎ì íë ë©ëªšëŠ¬ì ëí ì§ì í¬ìží°ê°ìë ê²œì° ì íìimpl !Relocate
륌 ì¶ê°íì¬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
ingì ì륌 ë€ìŽ Swiftìì íŽë¡ì ì êŽë šìŽ ììŒë©° íì¬ ìœ ì²Žìž ëŽë¶ ëë ìžë¶ìì ížì¶ëëì§ ì¬ë¶ì
ëë€. ì€íŽì ìì§ê°ìë ê² ê°ìµëë€.
ëª íì±ì ëë í ꞎ ìŽëŠì 묞ì ë 볎ìŽì§ ììµëë€.
FWIW í¬í륌 íµíŽ Unpin
ìŽëŠì Relocate
ëë MoveFromPin
ì ê°ì "êžì ì ìž"ìŽëŠìŒë¡ ë°êŸžê³ ì¶ìµëë€ (ëë ë ì¥í©íì§ë§ ìœê° ë ì íí MayMoveFromPin
).
!Unpin
ëë Unpin
ì ìŽì€ ë¶ì ìŽ ìì¬ì ìŒë¡ ì ìê² íŒë ì€ë¬ì ê³ êžì ì ìž "ìŽê²ì Pin
ìì ìììë ë¶êµ¬íê³ ìì§ìŒ ì ììµëë€"ëŒë ì ì ëìí©ëë€. íŒëì ëìŽ ì€ ê²ì
ëë€!
FWIW ì²ììë Unpin
ì ëíŽ ëê°ì ìê°ìíì§ë§ ì€ì ë¡ IMO륌 ì¬ì©íë €ê³ íì ë ì믞ê°ìììµëë€. ì°Ÿê³ ìë ìì
ìŽ Unpin
êž°ë¥ìŽêž° ë묞ì ì€ì ë¡ ìŽì€ ë¶ì ìŽ ìëëë€ Pin
ìì ë¡ê² ë€ìŽì€ê³ ëê°êž°)ë 묌걎ì ê³ ì íë ë¥ë ¥ìŽ ìëëë€. MoveFromPin
ì ëìŒíë©° ë€ë¥ž ëšìŽë¡ë§ íìë©ëë€. ëë ì¬ëë€ìŽ " Pin
"ê°ì ê²ìŽ ìëëŒê³ ìê°íê² ë§ë€ì§ ìë ìŽëŠì ì ížíì§ë§ IMO MoveFromPin
ì ë€ë¥ž ì¬ëë€ì ë묎 ë§ìŽ ë§ë€. UndoPin
? (haskell êµ°ì€ì ìíŽ FreePin
?)
ëë ìì§ë !Unpin
ìŽìíë€ê³ ìê°íë€ â ëë ëŽë©Žì 목ì늬륌 "ìŽê±ž íì§ ë§!"ì²ëŒ ì·šêžíëë¡ íë šì쌰ë€. ìŒë°ì ìž " Unpin
구ííì§ ìì"ëì ìœê°ì ë
žë ¥ìŽ íìí©ëë€.
!Pluck
ìŽë»ìµëê¹?
@runiq
ìŒë°ì ìž "ê³ ì íŽì 륌 구ííì§ ìì"ëì
ìŽì ì견ìì ìŽê²ì ìžêžíì§ë§ ì€ì ë¡ë ìŽê²ìŽ ì¢ì ííìŽëŒê³ ìê°í©ëë€. Unpin
ì Pin<C<_>>
륌) ë€ìŽì€ê³ ëê°ë ìì
ì
ëë€. Unpin
구ííì§ ìë ê²ì ê·žë¬í êž°ë¥ì ì ê³µíì§ ììµëë€.
@cramertj ì ë UndoPin
ì죌 ì¢ìí©ëë€
@cramertj ëë ì§êžê¹ì§ ì ì ë ëìì ìŽë ¬í í¬ìŽ ìëëŒë ë° ëìíì§ë§, ê°ìžì ìŒë¡ MoveFromPin
ë³Žë€ Unpin
MoveFromPin
ëŒë ëšìŽë¥Œ ì íží©ëë€. ìŽì€ ë¶ì ìŽ ìëëŒë ê²ìŽ ì¢ì ì ìŽì§ë§ (ìì§ ìŒíì§ ìì ì¬ëìŒë¡ì) ê·žê²ì ìœìŒë©Ž ìŽì€ ë¶ì ìŽëŒë ì¬ì€ìŽ ê³ìíŽì ë륌 êŽŽë¡ íëë€. "Un"ì ëì¬ë¥Œ ììë¡ ê³ì ìœìŒë €ê³ í©ëë€ ...
ížêž°ì¬ìŽ ë§ì§ë§ @cramertj ëë ë€ë¥ž ì¬ëë€ì Unpin
ë°ìžë©ìŽ ìžì²Ž ê³µíì ìŒë¡ ìŒë§ë ë§ìŽ ëì€ëì§ì ëí ì¢ì ížë€ìŽ ìë€ê³ ìê°í©ëê¹? ë§€ì° í¬ê·í©ëê¹? ë§€ì° ííê°ì? íìŽííë ê²ìŽ ê³ íµ ì€ëœë€ë©Ž ê³ íµ ì€ë¬ìž ì ëë¡ ííê°ì?
ì§§ê³ ë¬ìœ€í ìŽëŠì ê²œì° ê°ìžì ìŒë¡ Relocate
ììŽëìŽê° ë§ìì ë€ì§ë§, ë êžžê³ ëšìŽê° ë ë§ì ììŽëìŽì 겜ì°ìë MoveFromPin
ì¢ìí©ëë€. Unpin
ë³Žë€ ë«ë€ê³ ëëëë€.
ížêž°ì¬ìŽ ë§ì§ë§ @cramertj ëë ë€ë¥ž ì¬ëë€ì ëì€ëì§ì ëí ì¢ì ížë€ìŽ ìë€ê³ ìê°í©ëê¹? ë§€ì° í¬ê·í©ëê¹? ë§€ì° ííê°ì? íìŽííë ê²ìŽ ê³ íµ ì€ëœë€ë©Ž ê³ íµ ì€ë¬ìž ì ëë¡ ííê°ì?
ëŽ ê²œíì Unpin
ì€ì ë¡ ì¬ì©ì ìœëì ëíëë ë ê°ì§ 겜ì°ê° ììµëë€.
Unpin
ê²œê³ ê° ëíë©ëë€ (ì : ìŒë¶ API ì í).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 ëë ë€ë¥ž ì¬ëë€ì ëì€ëì§ì ëí ì¢ì ížë€ìŽ ìë€ê³ ìê°í©ëê¹? ë§€ì° í¬ê·í©ëê¹? ë§€ì° ííê°ì? íìŽííë ê²ìŽ ê³ íµ ì€ëœë€ë©Ž ê³ íµ ì€ë¬ìž ì ëë¡ ííê°ì?
ëŽ ìœë륌 Futures 0.3 ( Pin
)ìŒë¡ ìŽì í 겜íì ëí ꞎ ê²ì묌 ì ìì±
Unpin
ë ê±°ì 몚ë ì íì ëíŽ ìë 구íëêž° ë묞ì ëë¶ë¶ì ê²œì° Unpin
ì ëíŽ ì í ê±±ì í íìê° ììµëë€.
ë°ëŒì Unpin
ì ëíŽ ê±±ì íŽìŒ í ì ìŒí ìê°ì ë€ì곌 ê°ìµëë€.
ë€ë¥ž ì í (ì : struct Foo<A>
)ë³Žë€ ìŒë°ì ìž ì íìŽ ììµëë€.
ê·žëŠ¬ê³ íŽë¹ ì íì ëíŽ ê³ ì API (ì : 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
combinator륌 ë§ëë ìí©ììë§ ëíë©ëë€.
ê·žëì ì ë MoveFromPin
ì ê°ì ìŽëŠì ê°ë ¥í ì íží©ëë€. ê³ ì ì ëë¶ë¶ì ì¬ëë€ìŽ ë€ë£° íìê°ìë íì êž°ë¥ìŽë¯ë¡ ìŽëŠ êžžìŽë¥Œ 곌ëíê² ìµì ííŽìë ìë©ëë€.
ë묞 ìí©ìì ëª ëª ì 묞ì륌 ì ì¥íë ê²ë³Žë€ìžì§ ì ìŽì (ìŽì€ ë¶ì ì íŒíë ê²)ìŽ íšì¬ ë ì€ìíë€ê³ ìê°í©ëë€.
í¹í ê³ ì ì ìŽë¯ž ìŽíŽíêž°ì 충ë¶í ìŽë µ êž° ë묞ì ëë€! ê·žë¬ë ë¶íìíê² ìŽë µê² ë§ë€ì§ ë§ì.
@jonhoo ì°ëŠ¬ë
impl Unpin
ê° ì¬ëë€ìŽ ì죌 구ííë ê²ì êž°ìµíŽìŒ í ê²ìŽëŒê³ ìê°í©ëê¹? ì€ëë ëŒìŽëžë¬ëŠ¬ ìì±ìê° ì¬ì©ì ì§ì íìì ëíŽ#[derive(Debug)]
ëëimpl std::error::Error
륌 ììŽ ë²ëŠ¬ë ê²ê³Œ ë¹ì·íì¬ ìŽë¬í ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íêž°ê° ë ìŽë µìµëê¹?
impl Unpin
륌 ìì ì ìë€ê³ ìê°í©ëë€. ìëíë©Ž ìì±ìê° ììŽ ë²ëŠ¬ë©Ž 컎íìŒë¬ ì€ë¥ê° ë°ìíì¬ ììê° ì²ìì ê²ìëë ê²ì ë°©ì§íêž° ë묞ì
ëë€. ë°ëŒì #[derive(Debug)]
ìë ì í ë€ëŠ
ëë€.
@withoutboats ê° ë§íë ìí©ì Future
/ Stream
/ Signal
combinator륌 구ííë ì¬ëë€ìê²ë§ íŽë¹ëë©° ë€ë¥ž ì¬ëìê² ìí¥ìì£Œì§ ììµëë€ (í¹í, ëìêŽì ë€ìŽ ì€ížëŠŒ ì¬ì©ì).
(ëë ìŽì€ ë¶ì ìŽ ê·žê²ì ìŒë¶ëŒê³ ìê°íê³ , ìë§ë ì격í íìí ê²ë³Žë€ ë ë¶ì ì ìŒ ìë ìì§ë§, ìŽê²ìŽ ì 첎 ìŽìŒêž°ê° ìëëŒê³ ìê°í©ëë€ (ì¬êž°ì ì±ì°°íë €ê³ í©ëë€) ... "ê³ ì íŽì "ë ìœê° , ìì ì ì ëê¹? ê°ì ì ì ëê¹? ì€ëª í ë ìŽíŽê°ëë©° "ê³ ì "ìì²Žê° ìŽë¯ž ìì ìŽêž° ë묞ì ëŽ ëê° ê·ž ìì 륌 ì¶ê°íë ë° ë¬žì ê°ìë ìŽì ë ë¶ëª íì§ ìì§ë§ ê·žëŒìë ë¶êµ¬íê³ ëŽ ëëì ì믞륌 ì°Ÿìµëë€. ìŽë€ ìŽì ë¡ "ê³ ì íŽì "ë 몚ížíê³ ëšëší ê³ ì íêž° ìŽë µìµëë€.)
ëë ë¹ì ìŽ ì³ë€ê³ ìê°í©ëë€ @cramertj , ê·žê²ì ìŒë°ì ìž ì믞ìì ì€ì ë¡ ìŽì€ ë¶ì ìŽ ìëì§ë§ @alexcrichton ë° @glaebhoerl ì²ëŒ ê³ìíŽì ëìŽì§ê³ ììµëë€. ì ëì¬ë¡ "ëì§ ìëë€ë ê²ì"ë ê·žê²ì ë§€ì° ë¶ì -Y ëë ( "ìì íì§ ìì", "구íëì§ ìì"ë± ëë ë³Žíµ íŽë¹ ì ëìŽê° ë°ìíë ë°©ë²ì ëë€)ì ê°ì§ê³ ììŒë©°, ê·žê²ì ëšì§ ëì¬ ê°ì 겜ì°, ì¬êž°ì ê³ ì ë¶ì ëë€.
@withoutboats ëë ë¹ì ì ìì 2ì ëíŽ ê¶êží©ëë€. impl UnpinìŽ ì¬ëë€ìŽ ì죌 구ííë ê²ì êž°ìµíŽìŒ í ê²ìŽëŒê³ ìê°í©ëê¹? ì€ëë ëŒìŽëžë¬ëŠ¬ ìì±ìê° ì¬ì©ì ì§ì íìì ëíŽ # [derive (Debug)] ëë impl std :: error :: Error륌 ì죌 ììŽ ë²ëŠ¬ë ê²ê³Œ ë¹ì·íì¬ ìŽë¬í ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íêž°ê° ë ìŽë µìµëê¹?
ì ëì ìŒë¡íì§! ì¬ì©ìê° ë¯žëê° ìë ìŒë°ì ìž Future
륌 ìëìŒë¡ 구ííë ê²œì° ìì íì§ ìì ìœë륌 ìì±íì§ ìê³ í¥í 구íìì ìí륌 ë³ê²œí ì ìꞰ륌 ìí ê²ì
ëë€. ìŠ, Pin<&mut Self>
륌 &mut self
í©ëë€. MyFuture<T: AsRef<[u8]>>
ìŽ Unpin
구ííì§ ìëë€ë ì€ë¥ê° íìë©ëë€. ìŽ ë¬žì ì ëí ìµì ì íŽê²°ì±
ì Unpin
구ííë ê²ì
ëë€. ê·žë¬ë ìŽê²ìŽ 믞ì¹ë ì ìŒí ìí¥ì Future
구ííë €ë ì¬ì©ììê² ììŒë©° ìœëê° ì»ŽíìŒëì§ ìêž° ë묞ì ììŽ ë²ëŠ¬ë ê²ì ë¶ê°ë¥í©ëë€.
@withoutboats ê° ë§íë ìí©ì Future / Stream / Signal combinator륌 구ííë ì¬ëë€ìê²ë§ íŽë¹ëë©° ë€ë¥ž ë구ìê²ë ìí¥ì 믞ì¹ì§ ììµëë€ (í¹í ëŒìŽëžë¬ëŠ¬ì ë€ìŽ ì€ížëŠŒ ì¬ì©ììê²ë ìí¥ì 믞ì¹ì§ ìì).
ëë 구첎ì ìŒë¡ ë¹ ê²°í© ì ë€ëŠ ìë ì 묌 ì ëíŽ ìŽìŒêž°íê³ ìëë°, ì ë€ëŠìŽ Unpin
ê° ìëëëŒë Unpin
ì ìŽêŽ impls ë§ ììŽìŒí©ëë€.
"ìë 믞ë / ì€ížëŠŒì 구íí ë ê³ ì ì ëíŽ ìŽë»ê²íŽìŒí©ëê¹?"ëŒë ì§ë¬žì ëí ììë륌 ë§ë€ììµëë€.
ì¡°êž ë ìì ê±° íꞰ륌 ìíŽ ì€ë ì ì¬ ìê°ì LeavePin
ìê°íŽ ëìµëë€. 묵ìì ìž ì€íŽì ìì§ê°ìë escape
ì ëìŒí í€ì ì ë¬í©ëë€.
ìëª ê³Œ ë§ì°¬ê°ì§ë¡ impl ì ë¬žê° ì í ì¬ìŽì í¥ë¯žë¡ìŽ ìíž ìì©ìŽ ììµëê¹?
íì 묞ììŽ "specializ"ë 묞ì í ë¡ ì
@vi ë 걎ì ì± ìíž ìì©ìŽ ììë¿ë§ ìëëŒ ê±Žì ì± ìíž ìì©ë ê°ë¥ íì§ ììµëë€. í APIë íì€ ëŒìŽëžë¬ëŠ¬ìì ì격íê² ì ìëë©° ìë¡ìŽ ìžìŽ êž°ë¥ì í¬íšíì§ ììµëë€. ì¬ì©ìë íì¬ ëŒìŽëžë¬ëŠ¬ ììì²ëŒ ìœê² ì ì í ì ììµëë€. ìŽ ëŒìŽëžë¬ëŠ¬ ìœëê° ì¡Žì¬íë ìí©ìì ìžìŽ êž°ë¥ìŽ 걎ì íì§ ììŒë©Ž 몚ë ì¬ì©ìê° ì€ëìŽ ëŒìŽëžë¬ëŠ¬ ìœë륌 ìì±í ì ìê³ ì ëë¡ ì»ŽíìŒ ë ê²ìŽêž° ë묞ì 걎ì íì§ ìì êž°ê° ì ëë€.
ìŽ ëŒìŽëžë¬ëŠ¬ ìœëê° ì¡Žì¬íë ìí©ìì ìžìŽ êž°ë¥ìŽ 걎ì íì§ ììŒë©Ž 몚ë ì¬ì©ìê° ì€ëìŽ ëŒìŽëžë¬ëŠ¬ ìœë륌 ìì±í ì ìê³ ì ëë¡ ì»ŽíìŒ ë ê²ìŽêž° ë묞ì 걎ì íì§ ìì êž°ê°ì ëë€.
ê·žê²ìŽ pin
ì ìŽë€ ìí¥ì 죌ìŽìŒíë€ë ê²ì ìëì§ë§, ê·žë ê² ê°ëšíì§ ìë€ê³ ìê°í©ëë€.
ëŒìŽëžë¬ëŠ¬ êž°ë¥ìŽ unsafe
륌 ì¬ì©í ë ëììŽ ìì§ ì§ì ëì§ ìì ìžìŽ 구조륌 ì¬ì©íë ê²œì° (ì : &packed.field as *const _
, ëë ABIì ëí ë€ìí ê°ì ì ìí) ì¶ê° ìžìŽ ë³ê²œìŽ ê°ì ì 묎íšííë ê²œì° ê·ž ëŒìŽëžë¬ëŠ¬ì ìžìŽ ë³ê²œìŽ ìë 걎ì íì§ ìì
MoveFromPin ëë ì ì¬ í목ì +1
"ìžì ëŽ ì íì ëíŽ Unpin 구íì íŽì íŽìŒí©ëê¹?"ëŒë ì§ë¬žìíë ê²œì° ëì "ëŽ ì íì ëíŽ MoveFromPinì ìžì 구í ì·šìíŽìŒí©ëê¹?"ëŒê³ 묻ëë€ë©Ž ëëµìŽ íšì¬ ë ëª í íŽì§ëë€.
"ì¬êž°ì ê²°í© ë í¹ì±ìŒë¡ ê³ ì íŽì 륌 ì¶ê°íŽìŒí©ëê¹?"ì ëìŒí©ëë€. vs "ì¬êž°ì MoveFromPinì ížë ìŽ íž ë°ìŽëë¡ ì¶ê°íŽìŒí©ëê¹?"
ê³ ì ì ìëëë€!
ìŽê²ìŽ ìŽëê°ìì ìžêž ëìë€ë©Ž 믞ìíì§ë§ ì¬êž° Pin, 구í 묞ì ë° RFC 묞ì ì êŽí ë°©ëí ìì ë Œì ë§ íìŽ ë³Žììµëë€.
ë ¹ìŽ ìêžž ê²ì ëë€! ëë íì€í ê·žë° ìŒì ëí ì¬ì© ì¬ë¡ë¥Œ 볌 ì ììµëë€. (ì¢ì, ëë ìì§ìŒ ììë ì íìŒë¡ ë°ì ìŽì ìì§ ìë ë°©ë²ì ì°Ÿê³ ììêž° ë묞ì Pinì ëíŽ ì°Ÿììµëë€.) ëëµìŽ 'ì'ëŒë©Ž Pin곌 ìŽë»ê² ìíž ìì©í ê¹ì? Pinì ì¡Žì¬ê° ìŽë¯ž! Move륌 ì¶ê°íë ê²ë³Žë€ ë ìŽë µê² ë§ë€ê¹ì?
ì ì ë³í© ì²ëŠ¬ê° í¬íš ë ìµì¢ ëêž êž°ê°ìŽ ìŽì ìë£ëììµëë€ .
ê³ ì íŽì ì ìŽëŠ ì§ì ì ëíŽ íŽê²°ëì§ ìì 묞ì ê° ììŽìŒí©ëë€.
@RalfJungìŽ ì§ì íë¯ìŽ # 55992ë https://github.com/rust-lang/rust/issues/55766#issuecomment -438316891 ë° ë€ë¥ž ê³³ìì ìì²í ì¶ê° 묞ìì ìë ë§ ì¶ê°í©ëë€. ê·žê²ìŽ ìì§ í©ë³íì§ ìë 귌거ëŒë ê²ì ëªšëŠ ëë€.
ëŽ drop () ë©ìëê° ìŽì Pin ëì & mut self륌 ë€ìë°ë ìŽì ë 묎ìì ëê¹?
ì, drop ()ì ì€ëëììµëë€. Rust 1.0 ìŽíë¡ ì¡Žì¬íë¯ë¡ ë³ê²œí ì ììµëë€. ì°ëŠ¬ë Pin <& mut Self>륌 ì¬ì©íëë¡ ë§ë€ê³ ì¶ìµëë€. ê·žë¬ë©Ž Unpin ì íìŽ ì§êžì²ëŒ & mutì ì»ì ì ìì§ë§ ìŽë ìŽì ë²ì 곌 ížíëì§ ìë ë³ê²œì ëë€.
ìŽ ë³ê²œ ì¬íì ìŽì ë²ì 곌 ížíëë ë°©ììŒë¡ 구íí ì ìëì§ ê¶êží©ëë€. Unpin
ì¶ê° í ëê¹ì§ AIUI (ê·žëŠ¬ê³ ì¬ëë€ì !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
. 볞ì§ì í¹ì§ ë¶ (trait) DropPinned
ìë LANG í목ìŽëë€ Drop
. AFAICS ìŽê²ììŽ ë©ì»€ëìŠìŽ Unpin
ì ëìì ëì
ë 겜ì°ìë§ ìŽì ë²ì 곌 ížíë©ëë€.
ê³ ì íŽì ì ìŽëŠ ì§ì ì ëíŽ íŽê²°ëì§ ìì 묞ì ê° ììŽìŒí©ëë€.
@tikue libs íìì FCP ìŽì ëë ëì€ì rfcbotì ì°ë €ë¥Œ ì êž°íì§ ìììŒë©° Unpin
ì ëí 죌ì¥ìŽìŽ ì€ë ëì ìë¡ê±°ë ìë¡ë€ ê³ ìê°íì§ ììŒë¯ë¡ ìŒë°ì ìŒë¡ íë¡ìžì€ë íì¬ë¥Œ ê³ ë €í©ëë€. ë§ë¬ŽëŠ¬ í ìŽëŠì
ëë€. ëêµ°ê° ì°ë € ì¬íìŽìë ê²œì° ì ê³ íŽìŒíì§ë§ í ì²Ží¬ ë°ì€ ë€ì FCPê°ìë ìì ì 몚ë ì¬ëìŽ ì ì ëëë¡ API륌 ížìíê² ìì í í ì ìëë¡íë ê²ì
ëë€.
@cramertj ì¡°êž íŒë ì€ë¬ìì. ì¬ë¬ ì¬ë ìŽ ë§ìíìµëë€. Unpin
ì ìŽëŠì ëí ë
ŒììŽ ì êž°ëê³ íŽê²° ë ë€ë¥ž ê³³ì ëí 찞조륌 ìì²íì ë https://internals.rust-lang.org/t/naming-pin-anchor-륌 ê°ëŠ¬ 쌰ìµëë€. ëí 볌 ìì ìŽëŠì ëíŽ ë¶ííë ì¬ëë€ìŽìë€, Unpin
, ê·žëŠ¬ê³ ì§ì§ ë°ë¡ . https://github.com/rust-lang/rfcs/pull/2349 ì ìë RFCë Unpin
ëíŽ ì ì ë ëììŽ ì ë ëìì§ì ëí 귌거ê°ë³ë¡ ììµëë€. ìŽ ì€ë ëììë ì€ì ë¡ ë±ì¥íë ì ìŒí ë°ë¡ ì "짧ë€"ì "êž°ì ì ìŒë¡ ì ííë€"ì
ëë€. ìŽíŽíêž° ì¬ìŽ ë첎 ìŽëŠ (ì : MoveFromPin
)ìŽ ë
Œìëê³ ê±°ë¶ëë 구첎ì ìž ë
Œì륌 ì§ì í ì ììµëê¹?
ëë ìŽì ì견ìì ììŽ êžìì ìë¡ìŽ êŽì ìŽ ì êž°ëìë€ê³ 믿ëì§ ì€ëª íìµëë€. ëë ì²ìë¶í° pin API í ë¡ ì ìë¹í ë©Žë°í ë°ë¥Žê³ ììŒë©°ìŽ ì€ë ë ìŽì ì ìŽì€ ë¶ì 묞ì ê° ì êž° ë ê²ì 볞 ì ìŽ ìììµëë€.
@tikue ëë ìŽì€ ìì± ë¬žì 륌 ì¬ë¬ ë² ì êž°íê³ ë³Žìê³ Unpin
ì ì íí ìŽëŠìŽ ì¬ë¬ ë² ë¬žì ë¡ ì êž°ëììŒë©° Unpin
ì ì°¬ì±íì¬ ì§ìì ìŒë¡ íŽê²°ëììµëë€. Unpin
ì ìŽëŠìŽ í¬íšëì§ ìì ìì ìì í ì ìì ìëª
íìµëë€. íŽê²°ëì§ ìì ì§ë¬žìŒë¡ Unpin
: ëìì ëíŽ ë
ŒìíìŒë©°ìŽ FCPë Unpin
ëŒë ìŽëŠì í¬íšíì¬ ëŽë €ì§ ê²°ì ì ìì í í ì€ë¹ê°ëìëì§ ê²°ì íë íë¡ìžì€
@cramertj í ë¡ ìŽ ë°ìí ìì¹ì ëí ë§í¬ë¥Œ ì ê³µíŽ ì£Œìê² ìµëê¹? ëë ë¹ì ì ìì¬íì§ ììµëë€. Unpin
ì°¬ì±íë 죌ì¥ìë³Žê³ ì¶ìµëë€. ìëíë©Ž ëë ê·žë€ìŽ ì¬êž°ì ì£ŒìŽ ì¡ë€ê³ ë¯¿ì§ ìêž° ë묞ì
ëë€. ìžêžíë¯ìŽ ì§êžê¹ì§ ì ê³µë ì°žì¡°ë Unpin
ìŽëŠ ì§ì ì ëí íŽê²°ì±
ì ì ê³µíì§ ììµëë€.
@cramertj +1 @jonhoo ì ì§ë¬žì. ê³µì ì±ëì ë±ë¡ëì§ ìì libs í ê°ì í ë¡ ìŽ ìë€ë©Ž, ê·ž í ë¡ ì 죌ë ìì§ë ì¬êž°ì ë°ë³µëìŽìŒíë€ê³ ìê°í©ëë€. RFC ê²°ì ì ê³µê°ì ìŒë¡ ìë €ì§ ì£Œì¥ì ìíŽìë§ ëŽë € ì§ ì ìë€ë ê³µìì ìž ê·ì¹ì¡°ì°š ìë€ê³ ìê°í©ëë€.
RFC ê²°ì ì ê³µê°ì ìŒë¡ ìë €ì§ ì£Œì¥ì ìíŽìë§ ëŽë € ì§ ì ìë€ë ê³µìì ìž ê·ì¹ì¡°ì°š ìë€ê³ ìê°í©ëë€.
ë€, 귞걎 ì¬ì€ì
ëë€. ê·žëŠ¬ê³ êž°ë¡ì ì ë libs íì ìíŽ ìì§ ììŒë¯ë¡ libs í ì ì© í ë¡ ì ì°žì í ì ìŽ ììµëë€. RFC ì€ë ëì Pin
ì¶ì 묞ì 륌 ìŽíŽë³Žë©Ž Unpin
ëŒë ìŽëŠìŽ ëì€ë 겜ì°ê° ë§ìŽìììµëë€. ëë ëêµ°ê°ê° í¹ë³í ëšìŽ "ëëž ë€ê±°í°ëž (Double Negative) 'ëŒê³ íìëì§ ììµëë€,íì§ë§ íì€í"êž°ìµ !Unpin
묎ìì ë¹ì ìŽ í ììë ìŽëŠ ì§ì í¹ì±ì ìŒë°ì ìž API ê·ì¹ë¿ë§ ìëëŒ, ìŽì ì ì êž° ë ìŽì€ ë¶ì ìŽë€ " ì€íë € ëŽê° ììì ì§ì íëë¡ (ëŽê° ìê°í ììë ê²ë³Žë€, ê·žë€ê³Œ íšê» í ì Unpin
ê·žê²ì ì€ííë íì©ì¬ë¡ ë£ë ê²ë³Žë€ ëì¬ ì€íë €ìŒë¡ "ê³ ì íŽì "륌 ë£ê³ íìíì§ë§, ì€ì ë¡ìŽ ë ê°ì§ ê·ì¹ì ë°ë¥žë€ ì¬ëë€ìê² ì§êŽì ìŽì§ ìì "ê³ ì ìŽ ìë").
@wmanley ìŠ, ì륌 ë€ìŽ, ìëíì§ ìë impl<T> Drop for Vec<T>
ì°ëŠ¬ê°ìŽ ìêž° ë묞ì íŽì ê²ìŽ Vec<T>: Unpin
. ëíìŽ ì€ì ë°ë¥ž ì ìì ìŽì ììŽ ì€ë ë ììë ìŽë£šìŽì¡ìµëë€. íì íêž° ì ì í ë¡ ëŽì©ì ìœìŒììì€. ëë ê·žê²ìŽ ìë¹í ë§ì ê²ì ì구íë€ë ê²ì ìê³ ìì§ë§, ëìŒí 묞ì ê° ë°ë³µíŽì ì€ëª
ëë ê²ì íŒí ììë ì ìŒí ë°©ë²ì
ëë€.
RFC ê²°ì ì ê³µê°ì ìŒë¡ ìë €ì§ ì£Œì¥ì ìíŽìë§ ëŽë € ì§ ì ìë€ë ê³µìì ìž ê·ì¹ì¡°ì°š ìë€ê³ ìê°í©ëë€.
ìŽê²ì ë¹ê³µìì ìŒë¡ "ìë¡ìŽ 귌거 ìì"ê·ì¹ ìŒë¡ ìë €ì ž ììµëë€.
ìŽ êžì ìŽëì ê²ì íŽìŒí ì§ ëªšë¥Žê² ì§ë§ ëêµ°ê° https://github.com/rust-lang/rust/issues/56256ì 볌 ì ììµëê¹?
# 56256곌 êŽë šíì¬ impl<T> From<Box<T>> for Pin<Box<T>>
ë OPì ìì í ë ê²ìŒë¡ ëìŽëì§ ìì§ë§ Pin
ê° ì²ëŠ¬ëë©Ž ìì ì ìŒë¡ ìì íë©ëë€. ì¬ìíì§ ìê³ ìì í륌 ìíŽ ê²í íŽìŒíë ë€ë¥ž í¹ì± 구íìŽ ììµëê¹? (묞ì륌 ì€ìºíë©Ž ë€ë¥ž 몚ë ê²ì ëìê² ëí ë í¬ìží°ì ëí ì¬ìí ìì 구íìŒë¡ 볎ì
ëë€).
ì€ë libs íìììŽ ë¬žì ì ëíŽ ìŽìŒêž°íìµëë€. ì§ë ëª ì£Œ ëì ë
Œì ë ë°ì ë°ë¥Žë©Ž, í¹í Unpin
ì ìŽëŠê³Œ êŽë šíì¬ ëšŒì íŽê²°íŽìŒ í ëª ê°ì§ ì¬íìŽ ììµëë€.
ë°ëŒì ì§êžììŽë¥Œ ìì ííë ìì ì ì§ííì§ ìì ê²ì ëë€ (FCPìë ë¶êµ¬íê³ ).
ëêµ°ê°ìŽ ì€ë ëìì ììŽëìŽë¥Œ 몚ìŒê³ ëª ëª ìí©ì ê°ì íêž°ìí ë 늜í ì ìì ì€ë¹ í ì ìë€ë©Ž ëëší ê°ì¬íê² ìµëë€.
ë¿¡ë¿¡
ëêµ°ê°ìŽ ì€ë ëìì ììŽëìŽë¥Œ 몚ìŒê³ ëª ëª ìí©ì ê°ì íêž°ìí ë 늜í ì ìì ì€ë¹ í ì ìë€ë©Ž ëëší ê°ì¬íê² ìµëë€.
ìŽê²ì libs íìŽ íì¬ API륌ìë ê·žëë¡ ìì ííì§ ììŒë € íšì ì믞í©ëê¹? ì ë ê°ìžì ìŒë¡ íì¬ êµ¬í ë ìŽëŠ ìžížë³Žë€ ë ëì ìŽëŠì ìê° íŽëž ì¬ëìŽ ìë€ê³ ìê°íë¯ë¡ ê·žë¬í ì ìì í ìë ìì§ë§ ìŽë¬í APIê° ìì íëë ê²ì 볎ë ë° ë§ì êŽì¬ìŽ ììµëë€. ê·žëì libs íì ëêµ°ê°ê° ì ížíë ìŽëŠì ê°ì§ê³ ìë€ë©Ž : shipit :
ë§ì ëë£ë€ê³Œ íšê» ìŽê²ì Bikesheddedíê³ @anp ë DePin
ì ìíìµëë€. ìŽê²ì Unpin
ì "not pin"ì믞륌 ì ê±°íê³ ì íì ëíŽ ìŽìŒêž°íê³ ììì ê°ì¡°íêž° ë묞ì ì ê° ì€ì ë¡ êœ€ ì¢ìíë DePin
. Pin
'dê° ë ì ììµëë€.
@Kimundi ë¹ì ëë libs íì ëêµ°ê°ê° ëª ìì ìž "fcp êŽì¬ì¬"륌 ë±ë¡íì¬ FCPìììŽ ë¬žì 륌 ì ê±°íê³ "íŽê²°íŽìŒ í ëª ê°ì§ ì¬í"ìŽ ì믞íë ë°ë¥Œ ë ëª ííê² ì€ëª íŽ ì£Œìê² ìµëê¹?
@rfcbot 묞ì ê³ ì íŽì ìŽëŠ ì§ì
FCPê° ì
ë ¥ëë©Ž ìŽê²ìŽ ì€ì ë¡ ìëíëì§ íì€íì§ ìì§ë§ Unpin
í¹ì±ì ìŽëŠ ì§ì ì ëíŽ ê³µìì ìž ì°šëš ë¬žì 륌 ì êž°íê³ ì¶ìµëë€. Unpin
í¹ì±ì APIì ë§€ì° ì€ìí ê²ìŒë¡ 볎ìŽë©° "ìŽì€ ë€ê±°í°ëž"(ììì ì€ëª
íë¯ìŽ)ë ìœì ëë§ë€ ì 륌 ëì§ëë€.
ë€ìí ìŽëŠì ëí ë§ì ëêžìŽ ìì§ë§ ìíê¹ê²ë ìì§ ë묎 í¥ë¶ëì§ë ììµëë€. ëŽ "ì¢ìíë í목"ì ì¬ì í MoveFromPin
ëë Relocate
ëŒìžì ë°ëŒ ììµëë€ (ìŽë° ìê²¬ìŽ ë묎 ë§ìì ìŽë»ê² ê²í í ì§ ëªšë¥Žê² ìµëë€).
ì ë ê°ìžì ìŒë¡ Pin
ì첎ì ìŽëŠê³Œ Unpin
í¹ì±ì 구ííì§ ìë ZSTì ê²œì° Pinned
ëŒë ìŽëŠì ëìí©ëë€.
ëë Unpin
ì ìŽëŠìŽ ì¬êž°ìì í° ë
Œìì í¬ìžížëŒë @alexcrichtonì ì ì ìŒë¡ ëìí©ëë€. ì ì ë êž°ë¥ ì첎ì ëíŽ ë³Œ ììë í êž°ì ì ìž ë¬žì ë ìë€ê³ ìê°í©ëë€ (ë§ì ëêžìŽ ìêž° ë묞ì 묎ìžê°ë¥Œ ëì³€ì ìë ììµëë€).
ëë ìì§ë ìê° Pinned
ìë€ ìŽìí ìŽëŠ ëê°ê° í¬íš ë ë묞ì ZSTì ëí Pinned
ì ë§ ê³ ì ëì§ .. ê·žë¥íì§ Unpin
. PhantomPinned
(# 55992ìì ìŽëŠìŽ ë³ê²œëììŒë¯ë¡)ìë ZSTê° ìœ Unpin
_really_ ìŒ ë Pin
ì°žì¡°íë€ë ì ìì ëìŒí 묞ì ê° ììµëë€.
ëë ëíìŽ êž°ë¥ì 믞ë¬íšì ê°ìí ë 묞ìì ë ë§ì ìì ìŽ íìíë€ê³ ìê°íì§ë§ ìë§ë ì°šëšêž°ë¡ ê°ì£Œëì§ ìì ê²ì ëë€.
ëí @Kimundi , libs íìŽìŽ 묞ì 륌 íŽê²°íë ë° ì¡°êž ë ë§ì ìê°ì í ì íë€ë ì¬ì€ì ìê²ëìŽ êž°ì©ëë€. ë¶íìí ìì ê±° í늬Ʞì ë¹ì·íŽ ë³ŽìŒ ì ìì§ë§,ìŽ êž°ë¥ì íìµ ë¥ë ¥ì í¥ììí€ë ê²ìŽ ë§€ì° ì€ìíë€ê³ ìê°í©ëë€.
Pinned
ì¬ì í ìŽìíë€ê³ ëëŒê³ PhantomPinned
ìŽ ë ëìì§ì§ ìëë€ê³ @jonhoo ì ëìíìµëë€ (í¬í
ë°©ììŒë¡ë ê³ ì ëì§ ìì). Unpin
ì ì¢ì ìŽëŠì ì°ŸìŒë©Ž Pinned
ì ìì°ì€ëœê² Not{NewNameForUnpin}
ë¡ ìŽëŠìŽ ë³ê²œ ë ê²ì
ëë€.
ì ë§ ì°ëŠ¬ê° ë
Œìíê³ ìë ë ë§ì ìê°ì í ì í íìê° ìë€ê³ ìê°íì§ ììµëë€ PhantomPinned
ìŽë¬í ì íì ê±°ì ìµì¢
ì¬ì©ììê² íìëì§ ììµëë€ -. PhantomNotUnpin
/ PhantomNotDePin
/ PhantomNotMoveFromPin
/ ë±ì ë ìŽì ìŒë°íëì§ ìê±°ë ìŽë¯ž 충ë¶í ìµìí ì¬ì©ììê² API륌 ë€ì ëª
ííê² ë§ë€ì§ ììµëë€. API륌 ì¬ì©íì¬ PhantomPinned
ëí í©ë²ì ìž ì¬ì©ì ì°Ÿììµëë€.
ê°ëší ììŽëìŽ : Move
ë° ZST Anchor
.
몚ë ì íì
ëë€ Move
ê·žê²ìŽ í¬íšíì§ ìë í, ì Anchor
ê·žê²ì 충ì€íê² ê·ž Pin
.
Anchor: !Move
ì§êŽì ìŒë¡ ìŽíŽê°ëë ë°©ììŽ ë§ìì ëëë€.
ëë ì°ëŠ¬ê° PhantomPinned
ì í¹ë³í ìê°ì í ì íë€ê³ ì ìíë ê²ì ìëì§ë§, Unpin
ì ì°©ë¥ í ê²ìŽ 묎ììŽë ì§ ìë í ê°ë¥ì±ìŽ ìêž° ë묞ì ìŽëŠ° ë§ìì ì ì§íë ê²ìŽ ë®ì ë
žë ¥ìŽëŒê³ ìê°í©ëë€. PhantomPinned
ë ë§ì°¬ê°ì§ì
ëë€.
ì°ëŠ¬ë Move
ë€ë£šê³ ì ë¶ì ì í ì§ ì¬ë¬ ë² ì€ëª
íìµëë€. 몚ë ì íì ê³ ì ë ëê¹ì§ ìì§ìŒ ì ììµëë€. ë§ì°¬ê°ì§ë¡ Anchor
ìŽ (ê°) ìŽì ì ì ìëìì§ë§ Unpin
ing / Move
ingìì ìµíž ììíë ë° ì¬ì©ëë ìŽëŠìŽ ëª
ííì§ ììµëë€.
@stjepang !Unpin
ê²ìŽ ì€ì ë¡ ìŽëì ë°©íŽíì§ ìêž° ë묞ì Move
ìŽ (ê°) ìŒë§ ì ì íêž° ë ê² ê°ìµëë€. ì íì ìë 겜ì°ìë§ì
ëë€ 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
ì 족ììì ëìš "íì¶ íŽì¹"ê° ìëëë€. í¹ì±ì ìŽëí ë ê°ìŽ 묎íšíëì§ ìëë€ê³ ë§í©ëë€.
Pin
ì Unpin
ë ìì í ë³ê°ì ê²ìŒë¡ 볎ì
ëë€. :)
ëë ì ë°ë륌 ëëë€.). í¹ì±ì Ʞ볞 ê°ì ìŽëì±ì ëí ì ìœì ì믞ìê² íííë ì ìŒí ì í ìž Pinì ëíŽìë§ ìë¯žê° ììµëë€. PinìŽ ììŒë©Ž Unpinì ìì í ìë¯žê° ììµëë€.
ì ë í 볎ëì ââ묎ìžê°ë¥Œ ì¬ë € ëë ê²ìŒë¡ ê³ ì ì ìê°íê³ ì¶ìµëë€. 볎ëì ê³ ì ë ê°ì²Žì íì ì ê±°íë©Ž ê°ì²Žë¥Œ ìŽëí ì ììµëë€. í ì ê±°ë ê³ ì íŽì ì
ëë€.
ì ë Unpin
ìŽëŠìŽ ë§ìì
ëë ëí ìŽë»ê²! UnpinìŽ ìŽì€ ë¶ì ìŽê³ íŒëì ìŒìŒí¬ ì ìëì§ ë³Œ ì ììµëë€. íì§ë§ ìŒë§ë ì죌 !Unpin
륌 ìšìŒíëì§ ê¶êží©ëë€.
Unpinì ì¬ì©í ììë ë€ë¥ž ìŽëŠì Detach
ì
ëë€. í 볎ë ë¹ì ë¡ ëìê°ì, ë¹ì ì _Unpin_ìŽ ìëëŒ ê°ì²Žìì Pinì _Detach_ í ê²ì
ëë€.
DePin
ì ë§ ì¢ìíë ê² ê°ìì! ì§êžê¹ì§ ì ê° ê°ì¥ ì¢ìíë ëšìŽì
ëë€. ê°ê²°íê³ íì©ì¬ê° ìë ëì¬ê° ë¶ëª
íë©° !DePin
꜀ ëª
í íŽ ë³Žì
ëë€ ( "ê³ ì íŽì í ì ìì").
ê°ìŽ "ê³ ì "ëì§ ììêž° ë묞ì ì íìŽ Unpinì 구ííë ê²ìŽ ìŽìíë€ê³ ìê°í©ëë€. ë©ëªšëŠ¬ê° ê·žë ìµëë€.
ê°ì ë©ëªšëŠ¬ì ê³ ì ë©ëë€. íì§ë§ ì¬êž°ììë ê°ì¹ê° ë§€ì° ì€ìí©ëë€. ì ìê² ë©ëªšëŠ¬ ê³ ì ì ì°žì¡° í ììë ì ë륌 ì ì§íë ê²ìŽì§ë§ mem::swap
ìë°ëì§ë ììµëë€. ê°ì ë©ëªšëŠ¬ì ê³ ì íë ê²ì ê³ ì ë ê°ì ë€ë¥ž ê³³ìŒë¡ ìŽëíì§ ìë ê²ì
ëë€. ì íí Pin
ì
ëë€.
ëë ëí ìŽë»ê²! UnpinìŽ ìŽì€ ë¶ì ìŽê³ íŒëì ìŒìŒí¬ ì ìëì§ ë³Œ ì ììµëë€. ê·žë¬ë ìŒë§ë ì죌 ìšìŒí ì§ ê¶êží©ëë€!
ìŽëŠìŽ íŒëì€ëœì§ ìë€ê³ ë§íë©Ž ë€ëŠœëë€. ì ììŽ ì€ë ëì ë§ì ë€ë¥ž ì¬ëë€ìŽ ìŽëŠ ì§ì ì íŒëì€ë¬ìíìµëë€.
ìì ìœëê° ìì§ë§ ì 묌ì ì²ì ì¬ì©íë €ê³ í ë impl Future<Output=T>
륌 ë°ííë íšì륌 ìíìµëë€. ë¬Žìš ìŒìŽ ìŒìŽ ë¬ëì§ êž°ìµí ì ìì§ë§ Tì Unpinì ëíŽ ë¶ííë íížìë 컎íìŒë¬ ì€ë¥ê° ìŠì ë°ìíìµëë€. ëŽê° ëëµíŽìŒ í ì§ë¬žì "T륌 ê³ ì íŽì ë¡ë§ ì ííë ê²ìŽ ìì í©ëê¹?"ììµëë€. ê·žë¡ ìžíŽ ìœ 2 ìê° ëì ì¬ì°ì ììíìµëë€.
"ì€, ì¢ìµëë€. íìŽ ì믞íë ê²ìŽëŒë©Ž. ê·žëì Unpinì .. Box륌 ì믞í©ëê¹? ê·žê² ì í¹ì±ì ëê¹?"
"ì ê¹ë§ ì, impl !Unpin
? ì impl Pin
ê° ìëì£ ?"
"Right, Pin ë° Unpin ...ì ë°ëê° ìëëë€. ìì í ë€ë¥ž ê²ì ëë€. ì ê¹, UnpinìŽ ë 묎ìì ì믞í©ëê¹? ì ê·žë ê² ë¶ë¥Žëì?"
"ëë첎 !Unpin
ì 묎ìì ì믞í©ëê¹? ... ë€ë¥ž ê²ìŽ ìëëŒ í ê²ì
ëê¹? Hrrrgh"
ì¬ì í ìŽê²ìŽ ëŽ ëšžëŠ¿ììì ìŽíŽëë ì ìŒí ë°©ë²ì 'ê³ ì íŽì '륌 'ìì¹ ë³ê²œ ê°ë¥'ìŒë¡ ë°êŸžë ê²ì ëë€. "ì íì ë©ëªšëŠ¬ìì ì¬ë°°ì¹ í ì ììµëë€"ë ìì í ìë¯žê° ììµëë€. ê·žë¬ë PinìŽ ë¬Žììíëì§ ìêž° ë§íŽë "type is not unpin"ì íŒë ì€ëœìµëë€.
Unpin
ì Relocatable
(ëë Relocate
)ë¡ ë°êŸžë©Ž ëŽ í¬í ð³ë¥Œ ì»ìµëë€. ê·žë¬ë ê³ ì íŽì ë³Žë€ ë ëì ë€ë¥ž ì ìì ì°Ÿì ì ììµëë€.
í¹ì±ì Ʞ볞 ê°ì ìŽëì±ì ëí ì ìœì ì믞ìê² íííë ì ìŒí ì í ìž Pinì ëíŽìë§ ìë¯žê° ììµëë€. PinìŽ ììŒë©Ž Unpinì ìì í ìë¯žê° ììµëë€.
ìŽê²ì ëíŽ ìì ìëêž° ìíŽ, íì ëí 볎ì¥ì ì ì ìŒë¡ ì íìŽ ìë í¹ì íë ì ëí ê²ì
ëë€. ì륌 ë€ìŽ ()
륌 ì°ì¶íë ìì±êž° íšìë ë°ë³µì ìŒë¡ ì¬ê°íì¬ FnOnce
륌 ì¬ìíê² êµ¬íí ì ììµëë€. ìŽ ì íì Unpin
구ííì§ ìì ì ìì§ë§ ììš ìíê° ì첎 ì°žì¡° ìŒ ì ìêž° ë묞ì FnOnce
ìží°íìŽì€ (ì첎 ìŽë)ë FnOnce
ë ìì§ ê³ ì ëì§ ììêž° ë묞ì ìì í ìì í©ëë€. Unpin
ë ì íì ìŒë¶ ê³ ì ìì±ìŽ ìëëŒ ì íìŽ ê³ ì ëë©Ž (ìŠ, ìŽë) ìì íë€ê³ 죌ì¥ëë ëìì ì¢
ë¥ì êŽí ê²ì
ëë€.
ììŽë¬ëíê²ë ì ë Unpin
ìŽëŠ ì§ì ìŽ ê³Œê±°ì íì€í ë
Œì ìŽ ëìì§ë§, ê·ž ë
ŒììŽ Move
륌 Unpin
ë¡ ë첎íêž°ë¡ ê²°ì íì ëììµëë€. ë¶ëª
í ê°ì ì
ëë€. ê·žëŠ¬ê³ ì¢
ì¢
ëì€ì ê·žê²ì 깚ë¬ì ëê° ììµëë€. íì¬ ëììžì ìŽì ì ë¹íŽ íì€í ê°ì ëìì§ë§ ìì§ ë ê°ì í ì¬ì§ê° ììµëë€. ìŽê²ìŽ ëŽê°ìŽ ìŒìì ì€ë ë°©í¥ì
ëë€.
ê³ ì íŽì ë íìì ìŒë¶ ê³ ì ìì±ìŽ ìëëŒ íììŽ ê³ ì ëë©Ž (ìŠ, ìŽë) ìì íë€ê³ 죌ì¥ëë ëìì ì¢ ë¥ì êŽí ê²ì ëë€.
ê³ ì ë ëìì ê·žë¥ ê³µì ëìŽìë 묞ì / ë¶ë³ ê°ì ì íì ê³ ì ìì±ì ëë€. ëë ìŽ ëžë¡ê·ž í¬ì€íž ìì íšì¬ ë ììží ë€ë£šì ë€.
@RalfJung ì°ëŠ¬ë ìë¡ ê³Œê±°ì ë§íê³ ììµëë€. ìêž° ì°žì¡° ì íìŽ "ìŽëí ì ìì"ìŽëŒë íŒëìŽ ë§ìŽ ììµëë€. ìŽê²ì ì ííì§ ìê³ ìŽëí ììë í¹ì ìí륌 ì
ë ¥ í ì ìì§ë§ ë€ë¥ž ìíììë ëììë ì벜íê² ìì í©ëë€. ë¡ ìŽë (ì°ëŠ¬ì APIë ì륌 ë€ìŽ ê·žë€ìê² ìœ€ë¹ë¥Œ ì ì©íë ê·žë€ì ìŽëíë êž°ë¥ì ìì¡Žíê±°ëë¡ë¥Œ ìŽëíêž° Pin<Box<>>
). ëë ìŽë¬í ì íìŽ "ìŽëí ììë"겜ì°ê° ìëì ëª
íííë €ê³ í©ëë€.
ì, ê·žëŒ ëìí©ëë€. !DePin
ì íì íì ê³ ì ëë ê²ì
@cramertj @withoutboats ëŽê° ìì§ ìê°í ì ììë í ê°ì§ë Unpin
ìŽëŠì ë°êŸžë ê²ì ë°ë í©ëê¹? ìŽëŠì ë°ê¿ìŒíë€ë ë° ëìíë€ê³ ìê°íë ê² ê°ì§ë ìì§ë§ ë°ëíë ê±Žì§ ëªšë¥Žê² ìµëë€.
ëë ê°ìžì ìŒë¡ ì¬êž°ì 죌ì 묞ì ê° Unpin
ëŒë ìŽëŠì ìë€ê³ ìê°íì§ ììŒë©° "ë§ìœ ìŽëŠì ë°ê¿ ì ìë€ë©Ž 몚ë ê²ìŽ ì§êŽì ìŒ ê²"ìŽëŒê³ ìê°í©ëë€. ìŽëŠì ë°êŸžë ê²ìŽ ìœê° ëììŽ ë ì ìì§ë§ (ì¬êž°ì Relocate / DePinì ë©ì§ê² 볎ì
ëë€ ...), 죌ì ë³µì¡ì±ì ì첎 ê³ ì ìŽëŒë ê°ë
ìì ë¹ë¡¯ë ê² ê°ìµëë€. íì€í ìŽíŽíê±°ë ì€ëª
íêž° ê°ì¥ ì¬ìŽ ê°ë
ì ìëëë€. ê±°ì ììµëë€.
ë°ëŒì core::pin
몚ëì 묞ì륌 _ ëëšíê² _ ê°ííê³ ë ë§ì ìì 륌 í¬íšíŽìŒíë€ê³ ìê°í©ëë€. ì¢ì ìë íì€ ì¬ì© ì¬ë¡ë¿ë§ ìëëŒ ìì íì§ ìì êž°ë¥ ë° ë¶ê±Žì í 구íì ì¬ì©ì 볎ì¬ì€ëë€.
@alexcrichton ì ë ìŽëŠ ë³ê²œì ë°ë íì§ ììµëë€. ëŽ ìê° Unpin
ì ìŽë¯ž,íì§ë§ ë êŽì°® ê² DePin
ëŽê° ì ìíë ìŽì ì
ëë€. RemoveFromPin
ê° ê°ì¥ ë¶ëª
íê² "ì¬ë°ë¥ž"ê²ìŽì§ë§, 구묞 ìížì ìì ì ëíŽìë ì¥í©í©ëë€. ê·žëì ì ë ê·ž ìŽëŠì 구첎ì ìŒë¡ ë°ë í ê² ê°ìµëë€. ê·žë¬ë ì ë 몚ëê° ëìíë ìŽëŠìŽ ìµê³ ëŒë ê²ì ì ëê¹ì§ ìì í륌 묎Ʞí 믞룚ë ê²ì ë°ëí©ëë€. APIìë Unpin
ì ìŽëŠ ë묞ì ê·¹ì ìŒë¡ ë ì¢ê±°ë ëìê² ë§ë€ìŽì§ì§ ìë ëª ê°ì§ ê³ ì í ë³µì¡ì±ìŽ ìë€ê³ ìê°í©ëë€ futures_api
죌ë³ì ìœë, 묞ì ë° í ë¡ ì ëí ë ë§ì ë³ëì ë°©ì§íêž° ìíŽ ê³§ ìì í륌 ì¶ì§íê³ ì¶ìµëë€ (ê·žë¬ë©Ž futures_api
륌 ìì í í ììë ë¶ë¶ì ì ì늬ì ë°°ì¹ í ì ììµëë€. ê·ž ì첎). ì견ìŽìë 몚ë ì¬ëìŽ íŽê²°ì±
ì ì ìíê³ ìŽë¥Œ íŽê²°í ììë ë ëì ëìíì êž°í륌 ê°ì§ ì ìëë¡ ìŽëŠì ì íë ì ì© VC íì륌 ììœíŽìŒí ê¹ì?
ëŽ í¬íë std::pin::Reloc
(ìŽì )ì
ëë€.
ëë ë ê°ì§ ë§€ì° ê°ìì ìí© (ì€ì ë¡ë íëìŽì§ë§ ë ê°ì§ ë€ë¥ž ì€í)ì ê°ì§ê³ ìëë°, ê·ž ì€ íì© ì¬ë¶ë¥Œ ëª ì ì ìŒë¡ ìžêžíŽë êŽì°®ìµëë€.
Unpin
ë ê³ ì ë ì í ìíììë ëì T
ì 몚ë ìí ( T: Unpin
) ìíìì ì ííë ê²ìŽ ì¬ìíë€ë ê²ì ëíë
ëë€ (ê·ž ì©ìŽë¥Œ ì¬ë°ë¥Žê² êž°ìµíê³ ìꞰ륌 ë°ëëë€). @RalfJung ì ëžë¡ê·ž ê²ì묌 ì€ íëìì ê³ ì ëì§ ìì ì í ìíë¡. ìŽê²ìŽ Pin
ê° &mut T
ëë ì€ ììë ìŽì ì
ëë€.
ë°ëŒì ê³ ì ë ì í ìíììë ëì íì 몚ë Woof
ìíìì ê³ ì ëì§ ìì ì íìŒë¡ ì í í ììë 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륌 ë§ë€ê³ ì¶ë€ê³ ê°ì íŽ ë³Žê² ìµëë€.íì§ë§ ê·žë ê²íë ê²ìŽ ì¬ìí ê²ì ìëëë€. Unpinì 구íí ììë ê²œì° Woofê° fn unpin (self : Pin
>)-> ìì ?
ë€, ê°ë¥í©ëë€. ì륌 ë€ìŽ, Woof
ê° ì¹šì
ì°ê²° 목ë¡ì ìì ìž ê²œì° ëª©ë¡ìì ìì륌 ì ê±°íë êž°ë¥ì ì ê³µíê³ ëìì Pin
륌 ì ê±° í ì ììµëë€. -enqueued Woof
s, ë ì í ìíë ëìŒíë¯ë¡ ê³ ì íŽì í ì ììµëë€.)
Relocate
ì (ë) RePin
ì (곌) ëìŒí 묞ì 륌 ê°ì§ê³ ììµëë€. ìŽë ê°ì ìì í ê³ ì íŽì íì§ ìê³ ê³ ì ë ìì¹ìì ë€ë¥ž ìì¹ë¡ ê°ì ìŽëí ììë ìì
ì ì믞 í ì ììµëë€. RePin
ë³Žë€ ë ê°ë ¥í ì믞ìŽì§ë§ ì¬ì í ìœê° íŒëì€ë¬ì 볎ì
ëë€.
ê°ì ìì í ê³ ì íŽì íì§ ìê³ ê³ ì ë í ìì¹ìì ë€ë¥ž ìì¹ë¡ ê°ì ìŽëí ììë ìì ì ì믞 í ì ììµëë€.
ìŽê²ìŽ ì ííìŽ í¹ì±ì êŽí ê²ì ìëì§ë§, ì ì ìŒë¡ ì못ë ê²ì ìëëë€. ëë¶ë¶ì ì¬ì© ì¬ë¡ìì ê°ì ê³ ì ë ìì¹ìì ë€ë¥ž ìì¹ë¡ ìŽëíë ê²ì ê°ì ìì ë¡ê² ì¬ì©íë ê²ë§ íŒ ì¹ëª
ì ì
ëë€. ì€ì ë¡ ë구ë Pin<Box<T>>
ë§ë€ ì ìë€ë ì ì ê°ìí ë ì¬êž°ìì 귌볞ì ìž êµ¬ë³ìíë ìŽì ë ì ì ììµëë€.
ëë¶ë¶ì ì¬ì© ì¬ë¡ìì ê°ì ê³ ì ë ìì¹ìì ë€ë¥ž ìì¹ë¡ ìŽëíë ê²ì ê°ì ìì ë¡ê² ì¬ì©íë ê²ë§ íŒ ì¹ëª ì ì ëë€.
ê·žë êž° ë묞ì íŽë¹ ìì
ì ì íì ì¶ê°íë ížë ìŽ ížê° ì ì© í ì ììµëë€ (ëŽë¶ ì°žì¡° ì
ë°ìŽížì ê°ì ìì
ì ìííŽìŒ í ì ììŒë¯ë¡ Unpin
ì ê°ì ë§ì»€ ížë ìŽ ížìŒ ì ìì). ëë ì§êž ìŽì ê°ì ê²ì ì¶ê° í ê²ì ì ìíë ê²ìŽ ìëëŒ, ìŽëŠìŽ íŒë ë ììë 믞ë ( std
ëë ì 3 ì)ìì ì ê³µëë ê²ì 볌 ìììë¿ì
ëë€.
ì§êžì ê°ë ¥í ì¬ì© ì¬ë¡ë¥Œ ìì§ ëª»íì§ë§ ê³ ì ë 컬ë ì ì ìŽì ì ì¬í ê²ì ì¬ì©íë ê²ì ëíŽ ìê°íìµëë€.
ì¢ì, ì¬êž°ì ëª ê°ì§ ìê°ìŽ ììµëë€. ì ë ì²ììë PinInert
ëë PinNoGuarantees
ê°ì ìŽëŠì ê°ì§ ì ìëì§ ê¶êžíìµëë€. ì€ëª
ìŽ ë¬Žììžì§ì ëí ì€ëª
ìŽêž°ëíì§ë§, ì ê° ì ë§ë¡ ìíë ê²ì ìê°íë ê²ì íë ì ì€ëª
íë í¹ì±ì
ëë€. ëë ì ìŽë ëŽ ëšžëŠ¿ììì ìê°íêž°ê° íšì¬ ì¬ìì§ëë€.
Unpin
í ê°ì§ 묞ì ì ì (ìŽì 륌 ì ëªšë¥Žê² ìµëë€) ìë ë ìë¯žê° "íìì ì ê±°íê³ ê³ ì ì íŽì íë ìì
ìŽ ìì íë€ê³ ìê°íë ê²ì
ëë€. ". ìë ê·žëë¡ì í¹ì±ì "ê³ ì íŽì íì"ì íëì ì ë¬íì§ë§ ê·žê²ì ìœì ë ëë ê·žê²ì ì ìŽíŽíì§ ëª»íë ê² ê°ìµëë€. Pin<T: Unpin>
ê° "ê³ ì íŽì "ìž ê²œì° íììë ìŽì ë 묎ìì
ëê¹?
CanUnpin
ì ê°ì ìŽëŠìŽ ìë í ì ìëì§ ê¶êží©ëë€. ìŽ ì€ ìë¹ìë ìŽë€ ì ìŒë¡ë ì격í 볎ìŠì êŽí ê²ìŽ ìëëë€ ( Unpin
구íì íìì íì ì ê±°íë€ë ìë¯žê° ìëëŒ íìì ì ê±° í ì ììì ì믞í©ëë€). ìŽë»ê² ë€ëŠ¬ëì? CanUnpin
ì ë€ë¥ž ì¬ëë€ìŽ 충ë¶í ìœì ì ììµëê¹? 충ë¶í 짧ìµëê¹?
( Can
ì ëì¬ë¥Œ ì¬ì©íë©Ž ëì¬ë¥Œ íšì¬ ë ìœê² ì ë¬í ì ììŒë©° íìì ì ê±° í
ë¬ŽêŽ í ë ë€ë¥ž ì ì ìŒë¡ì, ìì ìžêžíì§ ìì í ê°ì§ (ì£ì¡í©ëë€!)ë ìì 몚ë ë°©ë²ìŽ ë°ëì ê³ ì í ë°©ë²ìŽìŽìŒíë€ê³ ìê°íì§ ìëë€ë ê²ì
ëë€. ì°ëŠ¬ë ìŽë¯ž ì¶ë¡ ë° ì¶©ë ë©ìëì êŽë šë ë§ì ë²ê·žë¥Œ ê°ì§ê³ ììŒë©° Deref
ë 구ííë ì íì as_ref
ë° as_mut
ì ê°ì ë§€ì° ìŒë°ì ìž ìŽëŠì ì¶ê°íë ê²ìŽ 묞ì ìž ê² ê°ìµëë€. ìŒìŽëꞰ륌 êž°ë€ëŠ¬ê³ ììµëë€.
ìŽë¬í ìì ì ìíí ìì¹ë¥Œ ì ë¹ííêž°ì 충ë¶í ì ëë¡ ìŒë°ì ìŒë¡ ë°ìí©ëê¹? (볞ì§ì ìŒë¡) ìëë©Ž êŽë š êž°ë¥ì ìì í 겜ë¡ë¥Œ ìì¥ í ììì ì ëë¡ ëë¬Œê² ì¬ì©ë©ëê¹?
ì§êžìŽ ê²ìì ì€íšìŽìë ê² ê°êž° ë묞ì CanUnpin
ì (ë) Unpinnable
ëë ìŽì ì ì¬í ê²ì ì ì ì ìŒë¡ ë§€ì° ê°ê¹ì 볎ììµëë€. ê·žëŠ¬ê³ ì ìžìì íì 컀뮀ëí°ê° ìŽë¬í ì¢
ë¥ì ìì ì륌 ëìŽì ì°ížëŠ¬ë ê²ì
ëë€. ëë¶ë¶ì í¹ì±ì ì íìŽ ì·ší ììë ì¡°ì¹ë¥Œ ì€ëª
íë¯ë¡ í¹ì± ìŽëŠì
ëë€. impl ì첎ë ê·žë° ì믞ìì 묵ìì ìž "can"ëë "-able"ì
ëë€. ê²°ì ë ê²ìŽ 묎ììŽë (ê·žëŠ¬ê³ ìŽëŠì ì¬êž°ì ìžêž ë ì ëë¡ ì€ìíì§ ììµëë€. ì¬ì©ìê° ê±°ì ììµëë€. ì¬ì©ìê° ê±°ì ìì ê²ì
ëë€.) ì¬êž°ìì ì§ë¬žì íŽê²°íë ë° êžŽêžíšì ëëŒëë¡ ëªšë ì¬ëìê² ê¶ì¥í©ëë€. ì ëìŽ ìì íì ëíŽ í¥ë¶íê³ ë§ì ì¬ëë€ìŽ ìë€ë ê²ì ìê³ ììµëë€!
íí
Unpin
í ê°ì§ 묞ì ë (ìŽì 륌 ì ëªšë¥Žê² ìµëë€) ìë ë ìë¯žê° "íìì ì ê±°íê³ ê³ ì ì íŽì íë ìì ìŽ ìì íë€ê³ ìê°íë ê²ì ëë€. ".
T: Unpin
ì " T
ê° Pin
"ì ë©ŽìëìŽ ìë€ê³ ìê°íë©Ž ìŽë»ê²ë©ëê¹? ê·žë° ë€ì Pin<T: Unpin>
ê°ìë ê²œì° ê³ ì ì ìí¥ìë°ì§ ìë Pin
ëŽë¶ì ê°ìŽ ììì ì믞íë¯ë¡ ê³ ì ìŽ ì¬êž°ì íšê³Œì ìŒë¡ ì ì©ë©ëë€.
ìŠ, Unpin
Pin
ë¬Žë ¥í í©ëë€. ìì§í ë§íŽì, ë묎 ë§ì ë
Œì ëì ëë ìŽê²ì ëŽë©Žííê³ ì§êžì ìë¯žê° ììµëë€. ð
ìŽ ì€ ìë¹ìë ìŽë€ ì ìŒë¡ë íì€í 볎ìŠì êŽí ê²ìŽ ìëëë€ (
Unpin
구íì íìì íì ì ê±°íë€ë ìë¯žê° ìëëŒ íìì ì ê±° í ì ììì ì믞í©ëë€).
ìŽì ëí ëìë²ì Send
í¹ì±ì
ëë€. ê·žê²ì ë¹ì ìŽ ê°ì¹ë¥Œ 볎ëŽë늜ëë€ ê²ì ì믞íì§ ìëë€, ê·žê²ì ëšì§ ë¹ì ìŽ ê·žê²ì ë³ŽëŒ ì ìë€ë ê²ì ì믞í©ëë€.
@anp ëë CanUnpin
ìŽ (ê°) íë¥í ìŽëŠìŽ ìëëŒë ë° ëìí©ëë€. ë ëì ìŽëŠì ì°Ÿêž° ìíŽ ìµì ì ë€íê³ ììµëë€ ! 몚ë ì ììŽ êž°ë³žì ìŒë¡ Unpin
ìŽëŠì ë³ê²œíŽìŒíë€ê³ ìê°íë ê²ê³Œ ëìŒí ìŽì ë¡ ìžíŽ ìŽëŠìŽ ë³ê²œëìŽìŒíë€ê³ ìê°íë ì¬ëì ê±°ììë ê² ê°ìµëë€.
ëí 몚ë ìì íë ë€ë¥ž 몚ë ë³ê²œ ì¬í곌 ë§ì°¬ê°ì§ë¡ ìŽì°šë¥Œ íë©° ë€ì 죌ì 늎늬ì€ëë©Ž íì€í íŽë¹ 늎늬ì€ì í¬íšëì§ ììŒë©° ë€ì 늎늬ì€ì íë³Žê° ë ê²ì ëë€. ìŠ, 7 죌, ê±°ì 2 ê°ì ëììŽ ëªšë ê²ì ìµëí 빚늬 ì²ëŠ¬ í ì ââììµëë€. ëë ꞎë°ì±ìŽ íìíë€ë ë° ëìíì§ë§, "ìììŒ ì ììŽ ë¬žì 륌 íŽê²°íì"ê° ìëëŒ "ìŽ êžŽë°ì±ì ìì§ ë§ì"ì ë¶ê³Œí©ëë€.
@stjepang ì ë ë묎 ë§ìŽ ìê°íê³ ëì Unpin
ìµìíŽì¡ìµëë€! ìŽ ìì ìì 몚ë ë첎 ìŽëŠì ë§€ì° í늿 íŽ ë³ŽìŽë¯ë¡ ë ëì 묞ìíì ë§ì¡±í ì§ì ì ëë¬íìµëë€. ëë ìŽìì ìŒë¡ë Pin
APIì ëíŽ ì 몚륎ë ì¬ëì ì°Ÿê³ ëì€ì ìžêž í 묞ì륌 ìœê³ íìµì 충ë¶í ì§ ë€ì íìžíê³ ì¶ìµëë€.
ëíìŽ ë¬žì ì í¹í ì€ìíë€ê³ ëëŒêž° ë묞ì ê°ì ë 묞ìì ëí ìì í륌 ê³µìì ìŒë¡ ì°šëšíê³ ì¶ìµëë€.
@rfcbot ì°ë € 묞ì ê°ì
구첎ì ìŒë¡ ë ëì 묞ìê° íìíë€ê³ ìê°íë ê²ì ë€ì곌 ê°ìµëë€.
P
ì DerefMut
구í ê³ìœìŽ Pin::new_unchecked
ì 묞ìíëìŽ ìì§ ììµëë€.unsafe
íšììë ì ê·žê²ìŽ ìì íì§ ììì§ì ëí ìœë ìì ëë ì ìŽë ì못 ë ììë ìŒë šì ëšê³ì ëí ëª
íí ì€ëª
ìŽ ììŽìŒí©ëë€.Pin
ê° ë¬Žììžì§, ê·žëŠ¬ê³ ê·ž ì믞륌 ëìŽì ë ììží ì€ëª
í ì ìë€ê³ ìê°í©ëë€. ëë ê·žë€ìŽ "ìŽë»ê² ìŽê²ìŽ ìŒë°ì ìž ë¶ë íìŽ ìëëŒ ê·žê²ì íí"ëë "ì륌 ë€ìŽ ì 묌곌 ê°ìŽ ì€ì ë¡ ì¬ì©ëë Pin
"ì ê°ì ì 볎ë¡ë¶í° ìŽìµì ì»ì ê²ìŽëŒê³ ìê°íë€.Unpin
ìì ë¥Œë³Žê³ ì¶ìµëë€. ì륌 ë€ìŽ 믞ëì ë§ì ê²°í©ìê° ìŽê²ì ì²ëŠ¬íŽìŒíë ê²ì²ëŒ ë€ëŠ¬ë©° ì ì¬íê² ìŒë¶ ê²°í©ìëìŽë¥Œ í¹ë³í ì구 í©ëë€. ì ë€ëŠê³Œ ìŽë»ê² ìëíëì§ì ìŽë»ê² ìëíëì§ì ëí ëª ê°ì§ ì¬ì© ì¬ë¡ë Unpin
ìŽíŽíë ë° ëììŽ ë ì ììµëë€.ë€ë¥ž ì¬ëë€ë 묞ìì ì¶ê° í 구첎ì ìž ì€í ê°ë¥í íëª©ìŽ ìëì§ë ê¶êží©ëë€!
ë€ììŒë¡ 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
ë¡ ìµì
? ëë ë¹ì ìŽ ìŒì° ê·žê²ì ëíŽ ížì륌 ë² ížë ê²ì ëŽ
ëë€ (ê·žëŠ¬ê³ ì¬ë¬ ì¬ëë€ë ê·žê²ì ì¢ìíë ê² ê°ììµëë€). êž°ë¡ì ìíŽ ëŽê° êž°ìµíê±°ë Ctrl + F-ingìŒë¡ ë¹ ë¥Žê² ì°Ÿì ììë ì§ì ì ìž ë°ëë "ì 첎 묞구 ìž ìŽëŠì ... ë§€ì° ëšêŽì ìŒ ê²" (@withoutboats)ìŽë©° "ë묎 ë§ìŽ ë§ë€
ëë "ëë ê·žê²ì ëíŽ ë묎 ë§ìŽ ìê°í íì ìµìíŽì¡ë€"ëŒë 맥ëœìì ëêž°ê° ë륌 ë€ì ë¶ìíê² ë§ë ë€ë ê²ì ìžì íŽìŒíë€. ìžê°ì 볞ì§ì ìŒë¡ 몚ë ê²ì ìµìíŽì§ê³ ì¬í í©ëŠ¬í í ì ììµëë€. ìŽëŠìŽ 묎ììŽë ì°ëŠ¬ ê° ê²°êµ ìµìíŽ ë¶ëª
í -suboptimal ìŽëŠì ì ííë ìŽì ë ë°ë¡ ê·ž ìŽì ì
ëë€ existential type
ê·žë€ìŽ ì구ì ëê³ íŒíë €ê³ ë€ë¥ž ê²œì° ììì§, ë±.)
ì°ì°í ë ì ì í ëëë¡ ìŒì í ë€ë¥ž ì¬ëë€ë³Žë€ ìë š ë ì¬ì©ì (ì°ëŠ¬ 몚ëê° ê·žë ìµëë€!)ì êŽì ì í¹ê¶ì ë¶ì¬íë ê²ì ì°ëŠ¬ê° ë§ëë ê²ì ëíŽ íì 겜ê³íŽìŒíë€ê³ ìê°íë ì€ì ì ëë€ .
íì€í std libì ì€íìŒì ìëì§ë§, CanUnpin
ë í¹ì ë¶ë¶ìŽ ë€ë¥ž ë¶ë¶ê³Œ ìŽë»ê² ì ìŽìžëŠ¬ë ì§ ë ëª
ííê² ë³Žì¬ì€ëë€.
묞ì륌 ìœì§ ìê³ ìŽë³Žììê² Unpin
ì ì믞륌 ì€ëª
íë ìŽëŠì ë°ëª
íë ê²ì ë¶ê°ë¥í©ëë€. Send
ë° Sync
ëí ìŽë³Žììê²ë ìŽíŽíêž° ìŽë µì§ë§ ë©ì§ê³ ê°ê²° íŽ ë³ŽìŽë©° Unpin
ë ë§ì°¬ê°ì§ì
ëë€. ìŽ ìŽëŠìŽ ì믞íë ë°ë¥Œ 몚륎ë ê²œì° íŽë¹ 묞ì 륌 ìœìŽìŒí©ëë€.
@valff ë§ìµëë€. ê·žë¬ë 묞ì륌 ìœê³ ê³ ì ìë ë°©ìì ìŽíŽ í ì¬ëìŽ êœ€ ë§ì§ë§ Unpin
ìŽëŠì ì¬ì í ì¬ê°í ì ì ì ìŽë €ìì ì ë°íë ë°ë©Ž ë€ë¥ž ìŽëŠì ë ì ë°í©ëë€.
@glaebhoerl ì€, ì ê° ê°ìžì ìŒë¡ íì¬ Unpin
ë³Žë€ MoveFromPin
ëë CanUnpin
í¬ìŽ ë ë§ë€ë ì ì ëª
íííŽì ì£ì¡í©ëë€. ê²°ë¡ ì ëŽëŠ¬ë ë° ëìì ì£Œë €ë ê²ë¿ì
ëë€!
ëë íì¬ì ì ìì ìŽíŽíë €ê³ ë žë ¥íëë°, ìë§ë ìŽë° ì¢ ë¥ì ì§í ë³Žê³ ìê° ìŽëŠ ì§ì ì ëí ì¶ê°ì ìž ë¹ì ë¹ì¶ ììì ê²ì ëë€.
Drop
ê¹ì§ Pin
볎ì¥ì ìì ì ìž ì£Œìë¡ ì°ì¥íë©Ž Pin
ìì±ììê² ì¶ê° ì구 ì¬íìŽ ì ì©ë©ëë€. unsafe fn new_unchecked(pointer: P) -> Pin<P>
륌 ížì¶íë ë° íìí ì ì ì¡°ê±ŽìŽ ì§ì ìžêž ëìë€ë©Ž ì ì© í ê²ì
ëë€. Pin
ê° ìŽë»ê² ìì± ë ì ìëì§ ìŽíŽíë©Ž ê·žë€ì ê°ë
ìž imo륌 ìŽíŽíë ë° í° ëììŽë©ëë€.we agreed that we are ready to stabilize them with no major API changes.
ììíë ì¶ì 묞ì ì ìžêž ë ììœìë ë§ì ì€ëë APIê° í¬íšëìŽ ììµëë€. ëìì Drop
ë° êŽë š í í¬ìì ëí ë§ì íµì°°ë ¥ë í¬íšëìŽ ììµëë€. ëíìŽ ë³Žê³ ììì ì°Ÿì ììë êž ëšžëŠ¬ êž°íž 1ì ìžêž ë ì¶ê° 볎ìŠì ëí ëª
ìì ìž ê³µìì í¬íší©ëë€. ìŽ ì€ëë ì 볎ì ìë¡ìŽ ì 볎ì íŒí©ì ìœê° íŒë ì€ë¬ì ìµëë€. 몚ë ì ë³Žë¥ŒìŽ ë¬žì ë¡ ì®êž°ê±°ë ì€ëë ëšëœì ëíëŽë ê²ì ê³ ë €íììì€.slight extension
ëŒê³ íë¯ë¡ìŽë¥Œ ì í íŽì í ììë ë°©ë²ìŽìì ê²ìŒë¡ ììíìµëë€. ê³ ì ì í¬ìží°ê° ëë¡ ë ëê¹ì§ íŽë¹ í¬ìží°ì ì í ìí륌 ì ë¬íë¯ë¡ìŽ ì í ìíìì 'ì ì'ìíë¡ ëëì ê° ì ììµëë€. ì¬ì€ ì²ììë Unpin
ëŒê³ ìê°íì§ë§ Unpin
ê° ì€ì ë¡ë ì¢ ë ê°íë€ê³ ìê°í©ëë€. ê³ ì ë ìíë ë§ìëë¡ ê³ ì íŽì ë ìíë¡ ìì ë¡ê² ì í ë ì ìë€ê³ ë§í©ëë€. ìŽì êŽë šíì¬ íì¬ ìží°íìŽì€ë ìµì ìì€ìŽì§ë§ Unpin
ë í ìí륌 íìë¡íë ëŽë¶ ë¶ë³ì ì ê±°íë ì íì ëí ìì
곌 íŒë ë ì ììµëë€ (ì : Drop
ì ìííž ë²ì ). .ì€ëª
: ì ë ê°ìžì ìŒë¡ ë€ë¥ž ìŽëŠë³Žë€ MoveFromPin
륌 ì ížíì§ë§ ìžìì ìŽê³ í¬ë°í©ëë€.
@alexcrichton ìì ìŽë¯ž ìì²í 묞ì ê°ì ì¬í ìžìë ì€í ê°ë¥í 구첎ì ì€í ê°ë¥í 죌ì í목ì map_unchecked
ë° map_unchecked_mut
í í¬ìì ëí íë ê·ì¹ ë€ììë ìŽì 륌 ì€ëª
íë ê²ì
ëë€. ëŒìžì ë°ëŒ ëê° :
íì ìì ë ëê¹ì§ ì°žì¡° ë ë°ìŽí°ë¥Œ ìŽëíì§ ìì ê²ì ìœìí©ëë€. 구조첎ì íëê° í¬íš ë 구조첎 ìŽíì ìì ëêž° ë묞ì í ìíë 구조첎 ì첎ì
Drop
구íì ëìŽ íì¥ë©ëë€. íëì í¬ìíë©Ž 구조첎 ìë©žì ëŽìì íëìì ìŽëíì§ ìì ê²ì ìœìí©ëë€.
ìë íì ë§ì»€ ížë ìŽ ížì ìŽëŠ ElidePin
ì ìŽë»ìµëê¹?
ì íìŽ íì ê³ ì íŽì ë ê²ì²ëŒ ì²ëŠ¬ëê±°ë ëì í ì ììì í¬ì°©í©ëë€. ê·žëŠ¬ê³ !ElidePin
ë ë§€ì° ëª
í íŽ ë³ŽìŽì§ë§ 죌êŽì ìŒ ì ììµëë€.
íì€ ë§ì»€ìë ê³ ì ì ìŽíŽíêž°ìí ì벜í ìŽëŠë ììµëë€. Pinned
ë í¬íšíë 구조첎 ìì²Žê° ê³ ì ëìŽ ìì§ë§ ê³ ì ì í¬ìží°ì ì ì©ëê³ ëª
ìì ìž ìì
íì ë§ ââì ì©ëë€ë ê°ë
ì ë¶ë¬ ìŒìŒí€ë ê² ê°ìµëë€. ìŽê²ì ê·žë€ì§ ì€ìíì§ë ìì§ë§ ì€ìíì§ë ììµëë€. í¹í ì첎 ì°žì¡° ì íì ëí 구íìì ì²ì ë°ê²¬ëë ì íìŒ ì ìêž° ë묞ì
ëë€.
MoveFromUnpin
/ RemoveFromUnpin
ëí ëì ìŒë°ì ìž ë°ëë ê·žë€ìŽ ë묎 ë§ìŽ ë묎 ë§ìì ìë Future
구íì ìžì²Ž ê³µíì íŽë³Žìí¬ ë¿ìŽëŒë ê²ì
ëë€. CanUnpin
/ DePin
ë ë€ êŽì°®ì 볎ì
ëë€. Unpin
ê° Read
/ Write
ì íšíŽì ë°ë¥Žë ê²ìŽ ë ë¶ëª
íìŒë©Ží©ëë€. /êž°í. ê·žë¬ë ê·žê²ì ì¬ëë€ìê² ì§êŽì ìŽì§ ìì ê² ê°ìµëë€. ê·žëì ëë 구묞 ì ìêžì²ëŒ 볎ìŽì§ ìê³ ìŽê²ì ë ëª
ííê² ë§ëë ê²ì +1íê² ìµëë€.
NotWhateverUnpinBecomes
ìŽ ìë§ë Pinned
ì ê°ì¥ ì¢ì ìŽëŠìŽëŒë ë° ëìí©ëë€. ìŠ, Adhere
ë죌ì륌 êž°ìžìŽê³ ê³ ìíë ê²ì ì믞í©ëë€. : slightly_smiling_face :
CanUnpin / DePin ë ë€ ëìê² êŽì°®ì 볎ì ëë€. UnpinìŽ Read / Write / etcì íšíŽì ë°ë¥Žë ê²ìŽ ë ë¶ëª íìŒë©Ží©ëë€.
Read
ì ë¬ëŠ¬ Unpin
ìŽë µê² ë§ëë ê² ì€ íëë ë§ì»€ í¹ì±ìŽëŒë ê²ì
ëë€. Read
ë©ìëê° ìêž° ë묞ì ìŽíŽíêž° ìœìµëë€. Read::read
-ìììŒ í 몚ë ê²ìŽ trait
ììµëë€. ê²œì° x
ìŽë€ Read
ëŽê° ížì¶ í ì ììì ìŽíŽ x.read()
- ì ì¬ write
ì ëíŽ Write
ë ê²ì ì€ëª
íêž° íë€ë€ ë±, X
implementation Unpin
ë Pin<Ptr<X>>
DerefMut
구ííë€ë ê²ì ì믞í©ëë€-ìŽë ë§ì¹ X
ì²ëŒ ì²ëŠ¬ í ì ââììì ì믞í©ëë€.
Read :: read ë©ìëê° ìêž° ë묞ì ìœêž°ë ìŽíŽíêž° ìœìµëë€.
auto trait
ì ì + GATì íì ì ì© ê°ë¥í ë©ìë륌 ì¶ê° í ìë§ ìë€ë©Ž Unpin::unpin
- fn unpin<P: DerefFamily>(self: Pin<P::Deref<Self>>) -> P::Deref<Self>
)륌 ê°ì§ ì ììµëë€. ..... ë ë²ì§ž ìê°ì, ëë ê·žê²ìŽ ë구륌 ë íŒëì€ëœê² ë§ë€ ê²ìŽëŒê³ ìê°íì§ ììµëë€.)
(ì¢ ë ì§ì§íê² ë§ì ë늬멎, Pin<P<T>>
ìì P<T>
ë¡ ìŽëíë ë° Pin::unpin
륌 ì§ìíê² ìµëë€)
ëë Pin :: unpinìì Pinìì ìŽëì ì§ìí ê²ì ëë€.
> ~ P
ìŽê²ì íì¬ ìŽëŠ ì첎ì ë§ì°¬ê°ì§ë¡ ëŽ ëšžëŠ¬ ìì ë ì©ìŽë¥Œ íŒëí©ëë€. unpin
ë©ìë fn unborrow(&'_ T)
ëë fn unmove(??)
ê°ìë ê²ê³Œ ê°ì ë¹êµë¥Œ ìíŽ ì í ìíì 볎ì¥ì ë°ì íë ê²ê³Œ ë§€ì° ì ì¬íê² ë€ëŠœëë€. pin
ë ì íì ëíëŽë ìŒë¶ ë©ëªšëŠ¬ê° Drop::drop
edê° ë ëê¹ì§ 볎ì¥ì ì ê³µíë¯ë¡ ì€ì ë¡ ìí륌 ë ëëŠ¬ì§ ììµëë€. ì íì ë€ë¥ž 몚ë ííìŽ ëë±í 볎ì¥ì ì ì§íšì ë³Žì¥ í ë¿ìŽë¯ë¡ìŽë¥Œ 묎ìí ì ììµëë€. . ìŽê²ì ëí ë§ì»€ í¹ì±ê³Œ io::Read
ì ê°ì ê² ì¬ìŽì ëŽê° 볎ë 죌ì ì°šìŽì ì
ëë€. íëë 컎íìŒë¬ ëë ìžìŽì ëí ìì
ì íì±ííê³ ë€ë¥ž íëë íë¡ê·žëëšžì ëí ìì
ì íì±íí©ëë€.
ëí ì íí íìŽíë§ìŒë¡ëìŽë¥Œ ì ííê² ííí ì ìë€ë ê²ìŽ 죌ì í¬ìžížì
ëë€. ëìì ížì¶íë €ë©Ž unpin
ì êž°ë¥ìŽ ììë€ ê²ì²ëŒ ë€ëŠ¬ê² pin
. ëí íšìëŒë ê²ì ê·žë¬í ê³ ì íŽì ìì
ìŽ ìŽë»ê² ë ê³ì° ìì
ì ë¬¶ì¬ ììì ìœê° ì못 ììí©ëë€. ì륌 ë€ìŽ into_pointer()
ë ë í늜 ë ëª
ëª
ê·ì¹ì ë°ë¥Žë©Ž ìŽì êŽë šíì¬ ë ë«ìµëë€.
ë§ì§ë§ìŒë¡, ê³ì° ìì
곌 íšê» unpin
íšìê°ìë ì íì ëí ì ì¬ë ¥ìŽ ìë€ê³ ìê°í©ëë€. ë§€ì° í¹ë³í ëŽë¶ ë¶ë³ì ê°ì§ ì íì fn unpin(self: Pin<&'a mut T>) -> &'a mut
ìží°íìŽì€ë¥Œ ì ê³µ í ììë ë°©ììŒë¡ ëŽë¶ ìí륌 'ê³ ì 'í ì ììŒë©°, ì¬êž°ìë íì ëì Pin
ì 몚ë 볎ì¥ì êž°êºŒìŽ ìì€í©ëë€. 'a
ìŽ ê²œì° ìì ë ê°ì§ ì¬íìŽ ë ìŽì ì ì©ëì§ ììµëë€. ìŽë¬í íšìë ëìŒí ë©ëªšëŠ¬ ìì¹ìì ìì ë° ì¬êµ¬ì±íë ê²ê³Œ ëìŒí íšê³Œê°ìë ê²ì²ëŒ ììí ì ììµëë€ (ë°ëŒì ì€ì ë¡ ì í ìí륌 ì ê±°íš). ì륌 ë€ìŽ ìŒë¶ ì첎 찞조륌 ëì í ë¹ìŒë¡ ìŽëíì¬ ê³ì°ì í¬íš í ì ììµëë€.
íŒëì€ë¬ìŽ ìŽëŠìŽ ëŒìŽëžë¬ëŠ¬ ëììŽëì 구íìê°ìŽ ë ê°ì§ ììŽëìŽë¥Œ ê²°í©íì¬ íŒëì€ëœì§ ìì ìŽëŠì ì ííë ê²ì ë ìŽë µê² ë§ë ë€ë©Ž ë¶í í ê²ì ëë€.
MoveFromUnpin / RemoveFromUnpinì ëí ëì ìŒë°ì ìž ë°ëë ê·žë€ìŽ ë묎 ë§ìŽ ë§ê³ ìë Future 구íì ìžì²Ž ê³µíì íŽë³Žìí¬ ê²ìŽëŒë ê²ì ëë€.
ëë ê·žê²ìŽ ì¬ì€ìŽëŒê³ ìê°íì§ ìëë€. í¹í MoveFromPin
, ê·žê²ì ë륌 ìíŽ íìíë ê²ìŽ í©ëŠ¬ì ìŽëŒê³ ìê°íë€. ê·žëŠ¬ê³ ìŽë€ ì¢
ë¥ì ëëíê±°ë ë©ì²í ìë ìì±ìŒë¡ 묞ì ë ìŽìšë ê±°ì ì¡Žì¬íì§ ìëë€.
ìžì²Ž ê³µíì ì€ìí ë¶ë¶ ì€ íëë ìœëì ê°ë
ì±ê³Œ ìŽíŽë ì¬ìŒí©ëë€. Rustë 곌거ì ìŽë¯ž 묎ìžê°ë¥Œ 공격ì ìŒë¡ ì€ì¬ì ( fn
, mut
ë±) ìœê°ì ë¹íì ë°ì ìŒë¶ ìœë륌 ìœêž° ìŽë µê² ë§ëëë€. ìŽíŽíêž° íšì¬ ë ë³µì¡íê³ ëë¶ë¶ì ì¬ì©ì륌ìí íì 목ì ì 충족íë ê°ë
ì 겜ì°ë³Žë€ ì¥í©íê³ ì€ëª
ì ìž ìŽëŠì ì¬ì©íë ê²ìŽ ìì í íì©ëìŽìŒí©ëë€.
@rfcbot ê³ ì íŽì ëª ëª íŽê²°
Ok ëë ì ì ëì ëì¬ ììŒë©° @withoutboats ì ì§ì ìŽê²ì ëíŽ ìŽìŒêž°íìµëë€. ëë ìŽì ì ìŽë ë§ì»€ í¹ì±ìŒë¡ Unpin
ëŒë ìŽëŠì ì¬ì©íë ê²ìŽ ê°ìžì ìŒë¡ ížìíë€ë ê²ì ìê²ëììµëë€. 결곌ì ìŒë¡ ì°šëš ìŽì ì Ʞ륌 ì ê±° í ê²ì
ëë€ (Libs íì ë€ë¥ž ì¬ëë€ìŽ ë€ë¥Žê² ëëŒëëŒë ìë €ì£Œììì€!)
ì ê° Unpin
ìš ì£Œë ìŽì ë Ʞ볞ì ìŒë¡ @cramertjê° ìŽë¯ž ììì ë§í ê²ì
ëë€. ì°ëŠ¬ê° ìê° íŽëŒ ì ììëìŽ í¹ì±ì ëí ê°ì¥ êŽì©ì ìž ìŽëŠì
ëë€. ëŽê° ì ìí ë€ë¥ž 몚ë í¹ì± ìŽëŠì Unpin
ë¶í©íë êŽì©ì êž°ì€ì 충족íì§ ëª»í©ëë€ (ëë ì ìŽë ì ìê°ìë).
"ëë ë°©êžìŽ í¹ì±ì ìŽëŠì 볎ìê³ ê·žê²ìŽ 묎ììíëì§ ìê³ ì¶ë€"ì ëí ë ëì ìŽëŠìŽ ìë€ê³ ìê°íì§ë§, ì¬êž°ì íŽê²°íŽìŒ í ì¬ë°ë¥ž 묞ì ëŒê³ ìê°íì§ ììµëë€. ê·žê²ììŽ ìì ìì ëìê² ë¶ëª
ê·ž ì°ëŠ¬ê° í ììë, ì ìŽëìŽ ìê°ì, ëí êŽì©ìŽ ìëëŒ ì°ëŠ¬ê° ë€ë¥ž 묞ì 륌 íŽê²° í¹ì± ìŽëŠì 죌ë³ì ì ííê³ ìŽ í¹ì±ì ëíŽ ë€ë¥ž ìŽëŠì ììëŒ. Unpin
ìŽíŽíë ê²ì Send
ë° Sync
ì ì ì¬íë©°, ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ ìì í ìŽíŽíë €ë©Ž ì€ëª
ì륌 ìœìŽìŒí©ëë€.
ë ë€ë¥ž ëª íí ìì ìŒë¡ ëª ê°ì§ "ì°šëš ìŽì ì êž°"륌 ëìŽíì§ë§ ìŽì ì êž° ì첎륌 ì°šëšíë ê²ë³Žë€ TODO í목ì ê°ê¹ìµëë€. ëë ê·žë ê² êžŽ ì€ë ë륌 íìíë ì¢ì ë°©ë²ìŽ ììµëë€! ê·žë° ë§¥ëœìì ì§êžì FCPê° 1 ì£ŒìŒ ì ë 겜곌 í ìíìì ìžì ëŒë ìì í PRì ê²ìíŽë êŽì°®ë€ê³ ìê°í©ëë€. ì첎 / ê³ ì / ê³ ì ì ëí ë§ì§ë§ ìì ì ì¬êž°ì ê°ëší ë Œì í ì ììµëë€ (íìí ê²œì° ìì ì ììŒë¡ ëšê²š ë ì ìì).
í¹í 묞ìíëìŽ ê²œì° ìì í륌ìí ì ì ì¡°ê±ŽìŽ ìëëŒê³ ìê°í©ëë€. ìŽë¬í ì íìŽ ìì ëêž° ì ì 묞ì륌 ì¶ê° í ì 첎죌Ʞ (6 죌)ê° ììŒë©° ì 첎 ë¹ëêž° / ëêž° ì€í ëŠ¬ê° ìì ëêž° ì ì ì¬êž°ì 묞ì륌 ì¶ê° í ìê°ìŽ íšì¬ ë ë§ìµëë€. íì¬ ê±°êž°ììë ê²ì ê°ì íë ë° ë§ì ìê°ìŽ ììëê³ ììŒë©°, ì§êžìë ê²ì ìŽë¯ž ìë¹í ì ì©í©ëë€!
ì¬êž°ì "í¹ìŽì±"ì 묎ìì ì믞í©ëê¹? Reloc[ate]
, Escape
, Evade
, Pluck
ëë Roam
ì ëí ëšêŽ ìŽë 묎ìì
ëê¹? ê·žê²ë€ì 몚ë ëì¬ìŽê³ , ìŽì€ ë¶ì 묞ì ê°ìë ê²ìŒë¡ ì€ìž ë ììë ê²ì ììµëë€.
@alexcrichton Unpin
ìŽ Depin
ëë DePin
ë³Žë€ êŽì©ì ìŒë¡ ê°ì£Œëë ìŽì ê° ììµëê¹?
ëë Depin
ìŽ ë§€ì° ê²¬ê³ í ëììŽëŒê³ ìê°íë©° Unpin
ì ê°ì ì ì ì ìŽë €ìì ì ë°íì§ ììµëë€.
í ê°ì§ ê°ëší ìŽì ë depinìŽ ëšìŽê° ìëëŒ unpinìŽ ìêž° ëë¬žìŒ ì ììµëë€. ê°ìžì ìŒë¡ Unpin
ìŽíŽíë ë° ë¬žì ê° ììµëë€. ë€ë¥ž ë§ì»€ í¹ì±ì ìŽëŠê³Œë ë§ë€ê³ ìê°í©ëë€.
@jimmycuadra Rustìë stdlib륌 í¬íšíì¬ "ì§ì§"ëšìŽê° ìë ìŽëŠìŽ ë§ìŽ ììµëë€.
ê·žê²ìŽ ë€ë¥ž ìŽëŠë³Žë€ í ìŽëŠì ì ííë ì€ìí ìŽì ë¡ ê°ì£Œëë€ë©Ž ëë ëë ê²ì ëë€.
@Pauan ê·žê²ì ì€ìí ìŽì ì
ëë€. ììŽ ììŽë¯ŒìŒë¡ì Depin
ë ê³ ì íŽì ëŒë ëšìŽê° ì¡Žì¬íë€ë ê²ì ìê³ íë륌 ë§ë€ë €ê³ í ê²ì²ëŒ ë€ëŠœëë€. "depinning"ì ëí ììŽ ëšìŽë "unpinning"ì
ëë€.
ì¢ì ë¹ì ë "ì êž íŽì "ëì "ì êž íŽì "ëŒë APIê°ìë 겜ì°ì ëë€.
@jaredr by " Read
ë° Write
í¹ì±ê³Œ ê°ì íì€ ëŒìŽëžë¬ëŠ¬ì í늜 ë ê·ì¹ì ë°ë¥Žë ê²ì ì믞í©ëë€. ì°ëŠ¬ë ê°ë¥í í ì§§ê³ ìí©ì ì í©í ëšìŽê° ìë ìŽëŠ, ëì¬ì ê·ì¹ì ê°ì§ê³ ììµëë€.
ê·íê° ì ìí ìŽëŠì 몚ë ê°ë¥íì§ë§ Unpin
(ëë ì ìŽë ëŽê° ìê°íêž°ì)ìŽìŽ í¹ì ìì
ì ê°ì¥ ì í©í©ëë€ ( "ìŽ ì í ê³ ì íŽì ê°ë¥"볎ì¥). ë€ë¥ž ì¬ëì ëìší ëììŽ ëì Unpin
, ëŽê° ì£Œë¡ ì ì© "ê³ ì ì íŽì "ë©ëŠ¬ ëšìŽìì ìŽëŠì ë°êŸžë ìê°íê³ ëë¡ëì ê°ì ì°ê²° ì ë¬íì§ ìë Pin
ë¡ Unpin
ê·žë ìµëë€.
ëë ê·ž @withoutboatsì ëì @Pauan Depin
ìŽë¿ë§ ìëëŒ jives ê°ì ì늬íì§ ììµëë€ 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
ìì ííêž° ì ì ìŽë¬í볎Ʞ륌 ì¡°ì íì¬ ëìŒí íìŽì§ wrtì ìëì§ íìžíë ê²ìŽ íëª
í ê²ì
ëë€. ìŽ ì€ìí ìžíëŒ ë¶ë¶; ê·žëì ì ë ì£Œë¡ AaronìŽ ìŽê²ì ëíŽ íì¥íê³ ë³Žížì Taylorê° ë¬Žê²ë¥Œ ìž¡ì íꞰ륌 ìí©ëë€.
ë€ë¥ž ê²ë€ì Unpinì ëìší ëììŽìŽì§ë§ ëì²Žë¡ "unpin"ìŽëŒë ëšìŽìì ìŽëŠì ë°êŸžë ê²ìŒ ë¿ìŽë©° ëë¡ë Unpin곌 ëìŒí ì°ê²°ì ì ë¬íì§ ììµëë€.
@alexcrichton ìŽê²ì ì€ì ë¡ ì¢ì ìŒìŽëŒê³ ìê°í©ëê¹? Send
ì ê°ìŽ ìŽë / ë³µì¬ (=) ìì
ì, Sync
ì ëì¬ (&) ìì
ì ì¬ì©í©ëë€. ê·žë¬í ì°ê²°ìŽ ì€ì ë¡ ë ë§ì íŒëì ìŒêž°í ê¹ì?
@ crlf0710 ê·žëŽì§ë! ëë ë ìì ìŽ ê·žë¬í êŽê³ì ëì í ê²ìžì§ íì íì§ ëª»íë€. Send
ë° Sync
ë ê·žë€ìŽ íì±ííê³ ìë ê² (ë€ë¥ž ì€ë ëì ì íì "볎ëŽêž°"ë° ì€ë ë ê° ì¡ìžì€ë¥Œ "ëêž°í")ì ëíŽ ë ììží ì€ëª
íë©° ìŽëŠì ì§ì í ë ìëíì§ ìììµëë€. í ìì
ëë ë€ë¥ž ìì
ì ê°ê¹ê² ìŽëŠì ì§ì íì§ ë§ììì€.
@alexcrichton ì íí! ê·žëì ìë§ëìŽ í¹ì±ì ê·žê²ìŽ ê°ë¥íê²íë ê²ì êŽí ê²ìŽìŽìŒí©ëë€. ( "ìì§ìŽë (ì¬êž°ì ëì¬) Pin
). ì ë ììŽ ììŽë¯Œì ìëì§ë§ pin
"ê³ ì íŽì "ê° ì¡°êž ... ìŽìíë€ê³ ìê°í©ëë€.
@ crlf0710 ê·žë¬ë í¹ì±ìŽ ê°ë¥íê²íë ê²ì íìì <moving>
ìëëŒ <moving out of a Pin>
ì
ëë€. moveì 묞ì ì moveì ëììŽë í¹ì±ìŽ ì íì ìŽë ë¥ë ¥ì ì í ì ìŽíì§ ìëë€ë ê²ì ììíë€ë ê²ì
ëë€. Pin곌ì ì°ê²°ì í¹ì±ìŽ ì€ì ë¡ ë¬Žììíëì§ ìŽíŽíë ë° ì€ìí©ëë€.
ë°ëŒììŽ í¹ì±ì ëí ê°ì¥ êŽì©ì ìž ìŽëŠì "ê³ ì ìì ë²ìŽë ë€"륌 ì믞íë ëì¬ ìŒ ê²ì ëë€. "ê³ ì íŽì "ëŒë ëšìŽê° ì ê² ê°ì¥ ë¶ëª í ëšìŽì ëë€. ìí€ ë±ë§ ì¬ì ì "ê³ ì íŽì "ì ìë ë€ì곌 ê°ìµëë€.
- íì ì ê±°íì¬ íêž°.
- (ì ìŽ, 컎íší , ê·žëíœ ì¬ì©ì ìží°íìŽì€) ìŽì ì ê³ ì ë ìì¹ìì ë¶ëŠ¬ (ììŽìœ, ìì© íë¡ê·žëš ë±).
@withoutboats ì€ëª
íŽ ì£Œì
ì ê°ì¬í©ëë€! ì¬ì€ ì ëìŽ Unpin
ìŽëŠìŽë Rust íìŽ ë§ì¹šëŽ ê²°ì í ìŽëŠì ë°ì ë€ìŒ ì ìë€ê³ ìê°í©ëë€. ì ë Pin ì íì ìì í륌 ì í ì°šëšíê³ ì¶ì§ ììŒë©° "ìŽë"ë±ì ëí ì°ë €ë¥Œ ì ëì ìŒë¡ ìŽíŽí©ëë€.
ìŽëê°ì ì죌 ìœê°ì "ë°ë³µ"ìŽ ìë€ë ëëìŽ ëëë€. ê·žëŠ¬ê³ ëë ëŽ ìì ì ì€ëíŽìŒí©ëë€. ê·žê²ì "ê³ ì ë¶ê°ë¥"ì ì믞íë ê²ìŽ ìëëŒ ê·ž ë°ëì ëë€. ê·žê²ìŽ ìµì¢ ê²°ì ìŽëŒë©Ž ìŒë§ íì ìµìíŽ ì§ ê² ê°ìµëë€.
ëìì ì ê° ë§ì§ë§ ì ìì í ììê² íŽì£Œìžì : ì¬ì€ ì ë ììì ìžêž í Detach
ëì¬ê° ë묎 ìŒë°ì ìŽì§ë§ ꜀ êŽì°®ë€ê³ ìê°í©ëë€. ëŽê° ë§íë¯ìŽ, ëë ììŽë¯ŒìŽ ìëêž° ë묞ì ë€ë¥ž ì¬ëë€ì ëë³ í ì ììµëë€. ê·žë¥ ìì ììŽëìŽë¡ ëŽì£Œìžì.
ëë ìì í ë¶ëŠ¬í ê³ ì ëì¶ë¶ì ëíŽ ìê°íê³ ììê³ ê·žê²ì ê°ë¥íê² í ììŽëìŽë¥Œ ìê°íŽ ëìµëë€. ê³ ì ë ê°ë³ lvalueì ëí ìŒì¹ë¥Œ ì뮬ë ìŽì íë 맀í¬ë¡ ì ëë€. ìŽ ë§€í¬ë¡ë¥Œ ì¬ì©íì¬
pin_proj! { let MyStruct { field1, field2 } = a_pinned_mutable_reference; }
Pin<&mut MyStruct>
륌 íëì ëí ê³ ì ë ê°ë³ ì°žì¡°ë¡ ë¶íŽí©ëë€.
ìŽë¥Œ ìì íê³ ì ì©íê² ë§ë€ë €ë©Ž ë€ë¥ž ë ê°ì§ê° íìí©ëë€.
Unpin
"íë륌 íìíë Kite
ì íUnpin
ìì íì§ ìê² ë§ë€êž°íìë íë¡ì ì
ì ìì ì ìíŽ íìí©ëë€. ìŽê²ìŽ ììŒë©Ž "ê³ ì ë íë¡ì ì
ìŒë¡ Kite
"륌 ìì íê² ì ì í ì ììµëë€. ìŽê²ì ì€ì ë¡ ì못ë ê²ì
ëë€.
ìŽë¥Œ ìŒëìëê³ ë€ë¥ž ì ì©í ìì
ì ìì íê² í ììë ì¬ì§ë¥Œ ëšê²šëêž° ìíŽ ìì í ì ì Unpin
ìì íì§ ìê² ë§ë€ ê²ì ì ìí©ëë€.
ê·žê²ì ë³ŽìŠ ê³ ì ìë° ì íì ëíŽ ê·žê²ì ì륌 @qnighy Drop
íê² êµ¬í, Drop
ì ëë±íê² ê°ë ¥í륌 Unpin
. Unpin
ìì íì§ ìê² ë§ë€ë©Ž ì¶ê° ìœëê° ìì íì§ ììµëë€. Drop
ë ìì íê³ ë³ê²œí ì ìêž° ë묞ì
ëë€. ì°ëŠ¬ë ì¶ì 묞ì ì ëíŽ ë§ìŽ ìŽìŒêž°íìŒë©°ìŽ ì€ë ëììë ìžêžíìµëë€.
귌볞ì ìŒë¡, ì€ëë Rustìì ííí ììë í¹ì ìì 겜ê³ë¥Œ 죌ì¥íë ë¥ë ¥ ììŽë í í¬ìì ìì íê² ë§ë€ ì ììµëë€.
ë¿¡ë¿¡
ëìì ì ê° ë§ì§ë§ ì ìì í ììê² íŽì£Œìžì. ì¬ì€ ì ë ììì ìžêž í Detach ëì¬ê° ë묎 ìŒë°ì ìŽì§ë§ ꜀ êŽì°®ë€ê³ ìê°í©ëë€. ëŽê° ë§íë¯ìŽ, ëë ììŽë¯ŒìŽ ìëêž° ë묞ì ë€ë¥ž ì¬ëë€ì ëë³ í ì ììµëë€. ê·žë¥ ìì ììŽëìŽë¡ ëŽì£Œìžì.
Detachë Move ë° Relocateì ê°ì ìŽëŠë³Žë€ íšì¬ ëì 볎ìŽì§ë§, ë¶ëŠ¬ ìì ì ë€ë¥ž ê°ë¥í ì¬ì©ê³Œ 충ëíë ê² ê°ìµëë€ (Escapeê° "íì¶ ë¶ì"ë±ê³Œ 충ë í ììë ë°©ë²ê³Œ ì ì¬ íš). ë°ìŽí°ê° 컎íší° 곌íìì ë€ë¥ž ë°ìŽí°ì ìŽë»ê² êŽë š ë ì ìëì§ì ëí ìì ê° ë묎ë ë§êž° ë묞ì Unpinì ë ë€ë¥ž ìë¡ìŽ ìŽì ì ìê°íê²ë©ëë€. "ê³ ì "ìì 륌 ëšëší 쪌ê°ë©Ž 믞ëì ìì ì ìžìŽë¥Œìí ê³µê°ì ì°šì§íì§ ììµëë€. Detach, Escape ëë Relocateì ê°ì ë€ë¥ž 목ì ìŒë¡ ì¬ì©íŽìŒ í ìë ììµëë€.
@withoutboats ëëìŽ Detach
ë€ë¥ž 목ì ì 묎ìì
ëê¹ (ì¶ë¡ íë€ë©Ž ...)?
@Centril ëë ëª íí ì¬ì© ì¬ë¡ë¥Œ ìŒëì ëì§ ìì§ë§ ì륌 ë€ìŽ
@withoutboats ë§ìì. 걎배!
@withoutboats ëëíì§ ìëì§ íìž ìí€ ë±ë§ ì¬ì í목ì ìŽëŠ ì ë¹ííë ê°ì¥ ì¢ì ëêž° ë¶ì¬ì ê²œì° íŽì Unpin
ì¬ì©íë €ë©Ž move from a pin
. 묌늬ì íí ìì ë Rustë¡ ìŽëíë ê²ìŽ ìžê³ì ëìì ì ê±°íì§ ìëë€ë ì¬ì€ë¡ ìžíŽ ìŽë €ìì 겪ìµëë€. ë ì ííê² ë§íë©Ž, ê³ ì ë í¬ìží°ë¥Œ 'upinning'íë©Ž ì°žì¡° ë ë©ëªšëŠ¬ë¥Œ ì ìŽ í ì ììµëë€. T
ì ê°ì²Ž ííìŒë¡ í ë¹ ë° ì íšì±ìŽ ì¬ì í íìíë©° í¬ìží° ì믞 첎ê³ì ìíŽ ë³Žì¥ë©ëë€. ë°ëŒì ê³ ì íŽì ë unboxingì²ëŒ T
ì ìì í ì ìŽ ë ííì ì ê³µíì§ ììµëë€. ê·žëŠ¬ê³ , ì¬ì íëª©ìŽ ì ì unpinning
ìž¡ë©Žìì moving
ë ê°ì ìŽëŠì ì ë¹ì±ë³Žë€ íŒëì ì¬ì€ ë¶ë¶ì ììµëë€.
ì ì ë APIìì ìŽë€ ë°©ë²ë ê·žë¬í íšê³Œê° ììµëë€ (íì ë²ììë í¬íšëì§ ìì). ì륌 ë€ìŽ Pin<Box<T>>
ìì Box<T>
(ë° T
ë¡ íì¥)ë¡ ì ííë ìì í ë°©ë²ìŽ ììŒë©° Unpin
ìŽ ê°ë ¥í ê°ë¥ì±ìŽ ììµëë€. 몚ë ì°šìŽê° ìŽëìžì§ ì íí ëªšë¥Žê² ìµëë€. ê·žë¬ë ëŽê° ìŽíŽíë í, Pin
ë ìŒë¶ ë©ëªšëŠ¬ ìì¹ì ì ì©ëë ë°ë©Ž Unpin
ë T
ííìì í 볎ì¥ì ìì¡Žíë ê²ìŽ ììì 볎ì¥í©ëë€. ê·žë¬ë ê·žê²ì êž°ìµì ìì í ë¹Œê³ ìì ììë ê²ê³Œ ê°ìê¹ì? ëë ê·žë ê² ìê°íì§ ìëë€. ì¢ ë 구첎ì ìž ì륌 ìê°íŽ ë³Žê² ìµëë€.
ížì§ : ë 구첎ì ìŒë¡ 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=dec6f6c6d2c0903d87a4a9cefe50a0ca êž°ì¡Ž ë©ì»€ëìŠì íµíŽ ì§ë¬žì íšê³Œì ìŒë¡ ëëµíì§ë§ ìë íëë¡ ìëí©ëê¹?
ìë§ë IgnorePin
? T
ìŽ IgnorePin
Pin<Box<T>>
륌 &mut T
íì¬ Pin
ì ì¡Žì¬ë¥Œ 볞ì§ì ìŒë¡ 묎ìí ì ììµëë€ (AIUIë Box
ë 묎ì íš). IgnorePin
ê° ìëëŒê³ ìê°íì§ë§ ê·žê²ìŽ 묎ììžì§ ì ëªšë¥Žê² ìµëë€. IgnorePin
ë íì©ëë ê²ì ì€ëª
íê³ ì íì ì ì©ëë ì ìœ ì¡°ê±Žì ì€ëª
íì§ë ìì§ë§ Unpin
ë ë§ì°¬ê°ì§ì
ëë€.
@wmanley ëë ìì ìŒë¶ 죌ììì ElidePin
ë§€ì° ì ì¬í ììŽëìŽë¥Œ ê°ì§ê³ ììì§ë§ ê·ž ë¹ììë ì ê·žê²ìŽ ë ì ííë€ê³ ëêŒëì§ êµ¬ì²Žì ìŒë¡ ííí ì ìììµëë€. íì§ë§ 'íëì ëì¬'ê° Rust ë§ì»€ í¹ì±ì ëí ì€íìŒ ê°ìŽëëŒë ì ì ëìí©ëë€. !ElidePin
/ !IgnorePin
íììŒë¡ ë ìì°ì€ë¬ìŽ ë¶ì ì íì©íëëŒë ìµì ì ìëëë€.
@withoutboats íì ì§ë¬ž : íìŽ êž°ë³ž ë©ëªšëŠ¬ ìž¡ë©Žìì ì§ì ë ê²ì²ëŒ Pinned
ê° ZSTìŽêž° ë묞ì ZSTë Unpin
ìë ìê³ ìë ìë ììµëë€. ëë ì§êŽì ìŒë¡ ê·ž ë©ëªšëŠ¬ ííìŽ ê³µìì ìŒë¡ 묎íšíëì§ ììŒë¯ë¡ T::drop(&mut self)
ížì¶ í íìê° ìë€ê³ ì§êŽì ìŒë¡ ë§í ê²ì
ëë€. ì륌 ë€ìŽ ì ì¶ ë Box
ìì &mut 'static _
ë©ëªšëŠ¬ìì íì ë§ë€ ììë ë°©ë²ê³Œ ë§€ì° ì ì¬í©ëë€ Box
ëìì, ê·žê²ì 몚ë íë žì ì ììŒë©° ë€ë¥ž íŽììŽ ìŽë»ê² ê°ë¥í ê²ìžì§ë¥Œ ëŽ
ëë€. ìŽ ì€ì ì 묞ììì 죌목í ê°ì¹ê° ìë€ê³ ìê°í©ëë€.
T: !Unpin
륌 ì¬ì©íì¬ Pin<P<T>>
륌 ìì± í ë€ì ê³ ì ì êŽì°° í ê²ìŽ ìë€ê³ 볎ì¥ëë ê²œì° ìŠì ê° ê³ ì ì íŽì íë ê²ìŽ ìì í©ëê¹? ê³ ì ë ê°ìŽ poll-like ë©ìëê° ížì¶ ë í ìŽëëë 겜ì°ìë§ ì ìëì§ ìì ëìì
ëê¹?
@HeroicKatora ë¶ííë, ì ë€ëŠìŒë¡ ìžíŽ !Unpin
ê° ë ììë ì íì ëíŽ Drop
륌 구ííë ê²ìŽ ì€ë ê°ë¥í©ëë€. ì :
struct S<T>(T); // `!Unpin` if `T: !Unpin`
impl<T> Drop for S<T> { ... }
@cramertj ê°ì¬í©ëë€.
@cramertj ê·žëì ì°ëŠ¬ë ì ë€ëŠ 겜ê³ìì T: ?Unpin
Ʞ볞 ì€ì ë©ëê¹? Sized
ì ê°ì êž°ì¡Ž ì íì ëíŽ T: Unpin
륌 Ʞ볞ê°ìŒë¡ ì€ì íì§ ìë ë ë€ë¥ž ìŽì ê° ììµëê¹? ê·žê²ì ì§ìŠëê² ì격í ëª ê°ì§ ìžì€íŽì€ë¥Œ ì ê³µíì§ë§ ì¶ê° ìë ë°ìžë©ìŒë¡ ìžíŽ íê·ê° ë°ìí ì ììµëê¹?
@HeroicKatora íì€ ëŒìŽëžë¬ëŠ¬ì 몚ë ì í곌 Unpin
ì ëíŽ ì í ì 겜 ì°ì§ ìë ìœë 묶ìì ?Unpin
겜ê³ë¥Œ ë¿ë €ìŒ í©ëë€.
Drop +! Unpin ì íì ë§ëë ë ë€ë¥ž ë°©ë²ìŒë¡ PhantomPinned íë륌 ì¶ê°íë ê²ë ìì í©ëë€.
T : êž°ì¡Ž ì íì ëíŽ ê³ ì íŽì 륌 Ʞ볞ê°ìŒë¡ ì€ì íì§ ìì ë ë€ë¥ž ìŽì ê° ììµëê¹?
ê³ ì íŽì ë 볎ëŽêž° ë° ëêž°íì ê°ì ìë í¹ì± ìŒ ë¿ìŽë©°ìŽ ì ììë ìë¡ìŽ ìžìŽ êž°ë¥ìŽ í¬íšëì§ ììµëë€. ë°ëŒì ìë í¹ì±ìŽ ìŽë¯ž ì ìëìŽìë ê²ê³Œ ëìŒí ì믞륌 ê°ìµëë€. ìŠ, Ʞ볞ì ìŒë¡ ì ë€ëŠì ì ì©ëì§ ìëë€ë ê²ì ëë€ (ìë í¹ì±ìŽ ìëëŒ ì»ŽíìŒë¬ì ëŽì¥ ë í¹ì± ìž Sizedì ë¬ëŠ¬).
ê³ ì ë ê°ìŽ poll-like ë©ìëê° ížì¶ ë í ìŽëëë 겜ì°ìë§ ì ìëì§ ìì ëìì ëê¹?
ì¬êž°ì ì°ëŠ¬ëìŽ ë§¥ëœìì ì ìëì§ ìì ëììŽ ì€ì ë¡ ì íµì ìž UB ì íìŽ ìëëŒë ì ì ë¶ëª ííŽìŒí©ëë€. ì€íë € íŽë¹ ìœëë Pinì ì íì êŽì°°íì¬ íŽë¹ ê°ì ìì ê¶ ìë¯žë¡ ì ëíŽ ê°ì í ì ììµëë€ (ìŠ, Unpinì 구ííì§ ììŒë©Ž ìë©žìê° ì€íë ëê¹ì§ ë€ì ìŽëëê±°ë 묎íšíëì§ ììµëë€). 컎íìŒë¬ê° ê²°ìœ ë°ìíì§ ìëë€ê³ ê°ì íë€ë ì믞ìì UBê° ìëëë€ (컎íìŒë¬ë PinìŽ ë¬Žììžì§ ëªšëŠ ëë€).
ê·žë ìµëë€. ê·íê° ì ê³µ í 볎ìŠì ìì¡Žíë ìœëê° ììì íìží ì ìë€ë ì믞ì ëë€. ê·žë¬ë ìœëê° ì íìŽ ê³ ì ë ê²ì êŽì°° í ì ìêž° ë묞ì ë¹ì ìŽ í ìŒì íì€í 묎ì믞í©ëë€.
@cramertj ëë ì¡°êž ë¶í í ê²ì
ëë€. ì¬ìììë Drop
ìì Pin
ìíž ìì©ì ìœê° ë¶ížíì§ë§ ìžìŽìë ììµëë€. ìží°íìŽì€ ì íì±, ì ì©ì± ë° ê°ê¹ìŽ ì¥ëì ì¶ìíë ê² ì¬ìŽì ìë¹í ì충ë©ëë€. ìì ížì§ 2ì ëí ì€ëª
ì ì»ì ì ììµëê¹?
Rc륌 ì¬ì©íë©Ž Pin <& T>륌 êŽì°° í ì ìì§ë§ Tì ê²œì° Unpinì ìë ë©ëªšëŠ¬ ìì¹ìì ëë¡ìŽ ížì¶ëì§ ììµëë€. í ìžë¶ìì 찞조륌 íì± ìíë¡ ì ì§ í ë€ì íìŽ ìì ë í Rc :: try_unwrapìŒë¡ ìŽëí ì ììµëë€. https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=dec6f6c6d2c0903d87a4a9cefe50a0ca
@HeroicKatora ìœëì 묞ì ë Mem<'a>: Unpin
ìŽì§ë§ ì¬ì©íë ìì íì§ ìì ìœë ì€ì Unpin
구ííì§ ìë ì íìë§ ì ì©ëë ê°ì ì ìì¡Ží©ëë€. ê·ž ìŠê±° í¬íšíëë¡ ìì ì ížì§ í Mem<'a>: Unpin
: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=201d1ae382f590be8c5cac13af279aff륌
Pin::new
륌 ížì¶ í ë Unpin ë°ìŽëì ìì¡Žíë©°, ëììŽ 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 ê·ž êž°ë¥ìŽ ìì íë€ë ê²ìŽ ë§ìµëë€. ì¶ê°íŽë êŽì°®ì§ ë§ìŽ ì€ë ëë ìŽë¯ž ìë°± ê°ì 죌ììŽ ìêž° ë묞ì íì¬ ìì íì€ìž API륌 íì¥íì§ ììŒë € ê³ í©ëë€. 몚ë íì€ APIì ë§ì°¬ê°ì§ë¡ íìì ë°ëŒ ëì€ì ìžì ë ì§ ì¶ê° í ì ììµëë€.
Unpin
ì ìŽëŠ ì§ì 곌 êž°ë¥ ëªšë converse ë©ìë륌 ì¬ì© íë©Ž íšì¬ ë ìŽíŽíêž° ìœìµëë€. ê·žëŠ¬ê³ Pin
볎ì¥ìŽ ì€ì ë¡ T: !Unpin
ì íëë€ë ê²ì ìê³ ììµëë€. ê·žê²ì ê°ë¥ì±ì 볎ì¬ì£Œêž° ìíŽ íì¶ íŽì¹ë¥Œ ë§ëë ëì ê·žë¬í ë°©ë²ì ì¡Žì¬ì ìíŽ ì§ì ì ìŒë¡ ì
ìŠ ë ê²ì
ëë€. : smile :. ê·žëŠ¬ê³ ê·ž 묞ìë ì í ì¬íì ì€ëª
(ëë í ë² ë ì°ê²°)íêž°ì ì벜í ì¥ìê° ë ê²ì
ëë€. (íëë ì¬ì§ìŽ ê·žê²ì ëª
ëª
íë ê²ìŽ ì¢ìµëë€ 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 ìì ììíì¬ ê°ë° ë ëêžìŽ 묞ìë¡ ë³íëëë¡ ì¶ì íë êž°ë¥ìŽ ìëì? ë² íê° ë¶ëŠ¬ ëìêž° ë묞ì ì°ëŠ¬ë ìŽë¯ž ì¶ìì ë묎 ëŠì ê² ê°ìµëë€ ...
ìì§ ìŽë €ìë ìŽì ê° ììµëê¹? @Centril ë¹ì ìŽ ìŽê²ì ë«ìë€ê° ë€ì ìŽììµëë€.
@RalfJung FCP륌 ì·šìíë €ê³ íì§ë§ ë£ì§ ìììµëë€. @alexcrichton FCP륌 ì·šì í ì ììµëê¹?
ìŽê²ì ìì ì ìŽë¯ë¡ ë«íëë€.
ê°ì¥ ì ì©í ëêž
ëêµ°ê° ë¯žëì ëí ë žë¯ž ìœ ì±í°ë¥Œ ìì±íê³ ì¶ìµëê¹? ìŽê²ìŽ ìŒë§ë 믞ë¬í ì§ ê°ìí ë ìì²ëê² íìí ê² ê°ìµëë€. í¹í ëë ì, í¹í ë²ê·žê°ìë / ëì 구íì ìì ê·žê²ìŽ ìŽë»ê² ë¶ê±Žì íì§ ì ì ìë€ê³ ìê°í©ëë€.