[Rust] async recursion

Rust의 async function은 ꡬ쑰의 λ³΅μž‘ν•¨ λ•Œλ¬Έμ— λͺ‡κ°€μ§€ 번거둜운 μ œμ•½μ„ λ– μ•ˆκ³  μžˆμ—ˆλ‹€. async ν•¨μˆ˜μ˜ μž¬κ·€ 호좜 λ˜ν•œ λ§ˆμ°¬κ°€μ§€λ‹€.

async ν•¨μˆ˜λŠ” Future νŠΈλ ˆμž‡ 기반의 값을 λ°˜ν™˜ν•˜λŠ”λ°, μ• μ΄ˆμ— νŠΈλ ˆμž‡ μžμ²΄κ°€ λΌμ΄ν”„νƒ€μž„μ— λ―Όκ°ν•œ 속성을 κ°–κ³  있기 λ•Œλ¬Έμ΄μ—ˆλ‹€.

일단, async ν•¨μˆ˜λŠ” 일반 ν•¨μˆ˜μ™€ μ™„μ „νžˆ λ™μΌν•œ ν˜•νƒœλ‘œ μž¬κ·€ν˜ΈμΆœμ„ ν•  μˆ˜λŠ” μ—†λ‹€.

뭐라고 κΆμ‹œλ λŒ„λ‹€.

버전에 λ”°λΌμ„œ μ‚¬μš©ν•  수 μžˆλŠ” 방법이 λ‹€λ₯΄λ‹€.




1.77 버전 이후

1.77 버전 μ΄ν›„λΆ€ν„°λŠ” async ν•¨μˆ˜μ— λŒ€ν•œ μž¬κ·€μ  호좜이 λͺ…μ‹œμ μœΌλ‘œ μ§€μ›λœλ‹€.

λ¬Όλ‘  μ•½κ°„μ˜ μ œμ•½μ‚¬ν•­μ΄ μžˆλŠ”λ°, μž¬κ·€ν˜ΈμΆœμ„ ν•˜κΈ° 전에 Future 값을 Box::pin으둜 κ³ μ •ν•΄μ€˜μ•Ό ν•œλ‹€λŠ” 점 ν•˜λ‚˜λ‹€.
그러면 κΈ°λŒ€ν•œλŒ€λ‘œ λ§€λ„λŸ½κ²Œ λ™μž‘ν•œλ‹€.


잘 λˆλ‹€.




1.77 버전 이전

1.77 버전 μ΄μ „μ—λŠ” async ν•¨μˆ˜μ— 직접 κ±°λŠ” 것이 λΆˆκ°€λŠ₯ν•˜κ³ , Futureλ₯Ό λ°˜ν™˜ν•˜λŠ” 일반 ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œλ§Œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν–ˆλ‹€.

그게 μ‹«λ‹€λ©΄ async-recursion 같은 맀크둜둜 ν‘œν˜„μ„±μ„ μ œκ³΅ν•˜λ©΄ λœλ‹€.

그럼 이런 μ‹μœΌλ‘œ μ“Έ 수 μžˆλŠ”λ°

사싀 μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό λ³€ν™˜ν•  뿐이닀.