[Rust] lifetime: Higher Ranked trait bound (HRTB)

Rust์—์„œ๋Š” ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๋ผ์ดํ”„ํƒ€์ž„ ๋•Œ๋ฌธ์— ์ด๋ž˜์ €๋ž˜ ๊ผฌ์ผ ์ผ์ด ์žฆ๋‹ค.

higher-ranked ํŠธ๋ ˆ์ž‡ ๋ฐ”์šด๋“œ๋Š” ์ด๋Ÿฐ ์ผ€์ด์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์œ„ํ•œ ํŽธ์˜๊ธฐ๋Šฅ์ด๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.
์ผ๋‹จ ์ด๋Ÿฐ ํŠธ๋ ˆ์ž‡๊ณผ ๊ทธ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ตฌํ˜„์ฒด๋Š” &i32 ์ฐธ์กฐ๊ฐ’์„ ๋ฐ›์•„ ์ถœ๋ ฅ๋งŒ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ง€์—ญ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ฑฐ๊ธฐ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜ foo๋ฅผ ๊ตฌํ˜„ ํ›„, ํ˜ธ์ถœํ•ด๋ดค๋‹ค.

์ด๋Ÿฌ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

์–ด์ฐจํ”ผ do_something์ด ์ฐธ์กฐ๋ฅผ ๋ฐ›๋”๋ผ๋„ ์“ฐ๊ณ  ๋ฐ”๋กœ ๋ฒ„๋ฆฌ๋‹ˆ ๋กœ์ง์ƒ์œผ๋ก  ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, Rust๊ฐ€ ๊ทธ๊ฒƒ๊นŒ์ง€๋Š” ์™„์ „ํžˆ ์บ์น˜๋ฅผ ํ•˜์ง€ ๋ชปํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์•„๋งˆ ์ €๋•Œ Trait์˜ &i32 ๋ผ์ดํ”„ํƒ€์ž„์€ foo๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์˜ ๋ฐ”๊นฅ ๋ผ์ดํ”„ํƒ€์ž„์ธ๋ฐ, ํ›จ์”ฌ ์ข์€ ์ง€์—ญ๋ณ€์ˆ˜ ๋ผ์ดํ”„ํƒ€์ž„์„ ๊ตฌ๊ฒจ๋„ฃ์œผ๋ ค๊ณ  ํ•ด์„œ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋Ÿด๋•Œ ์‚ฌ์šฉํ• ๋งŒํ•œ๊ฒŒ higher-ranked ํŠธ๋ ˆ์ž‡ ๋ฐ”์šด๋“œ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด for<>๋กœ ๋ผ์ดํ”„ํƒ€์ž„์„ ์ง€์ •ํ•ด์ฃผ๊ณ , ๊ทธ๊ฑธ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์›๋ž˜ ๋ฐ”๊นฅ์˜ ๋ผ์ดํ”„ํƒ€์ž„์— ๊ณ ์ •๋˜์—ˆ๋˜ Trait์˜ &i32๊ฐ€ ํ˜„์žฌ ์•ˆ์ชฝ ๋ผ์ดํ”„ํƒ€์ž„์— ๋งž์ถฐ์งˆ ๊ฒƒ์ด๋‹ค. (์ถ”์ •)


์ด์ œ๋Š” ์ž˜ ๋œ๋‹ค.



์ฐธ์กฐ
https://doc.rust-lang.org/reference/trait-bounds.html#higher-ranked-trait-bounds
https://doc.rust-lang.org/nomicon/hrtb.html
https://stackoverflow.com/questions/35592750/how-does-for-syntax-differ-from-a-regular-lifetime-bound