Rust 1.36 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค

๊ฒŒ์‹œ ๋จ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค ๋…น 1.36, Mozilla ํ”„๋กœ์ ํŠธ์— ์˜ํ•ด ์„ค๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์— ์ค‘์ ์„ ๋‘๊ณ  ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋‚˜ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋†’์€ ์ž‘์—… ๋ณ‘๋ ฌ์„ฑ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Rust์˜ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํฌ์ธํ„ฐ ์กฐ์ž‘์œผ๋กœ๋ถ€ํ„ฐ ํ•ด๋ฐฉ๋˜๊ณ , After-Free ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค, ๋„ ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ, ๋ฒ„ํผ ์˜ค๋ฒ„๋Ÿฐ ๋“ฑ๊ณผ ๊ฐ™์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ž‘์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ๋ณ„ ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฑƒ์ง, ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. crates.io.

์ฃผ์š” ํ˜์‹ :

  • ํŠน์„ฑ์ด ์•ˆ์ •ํ™”๋จ ๋ฏธ๋ž˜, async / .await ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ํ‰๊ฐ€๊ฐ€ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Future๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋œ ๋น„๋™๊ธฐ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ ˆ๋“œ์—์„œ ์œ ์šฉํ•œ ์ž‘์—…์„ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๋™์‹œ์— ํŠน์ • ๊ฐ’์˜ ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•ˆ์ •ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๋ฐ ์ปฌ๋ ‰์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ std์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ๋‹ค์Œ ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฒก, alloc์—์„œ ๋‹ค์‹œ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. alloc์„ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ std์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ("#![no_std]")๋ฟ๋งŒ ์•„๋‹ˆ๋ผ std ์—†์ด ์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ’์˜ ์˜ฌ๋ฐ”๋ฅธ ์ดˆ๊ธฐํ™” ํ™•์ธ์„ ์šฐํšŒํ•˜๋ ค๋ฉด ์ œ์•ˆ ์ค‘๊ฐ„ ์œ ํ˜• ์•„๋งˆ๋„๋‹จ์œ„, mem::uninitialized ํ•จ์ˆ˜ ๋Œ€์‹  ๋” ์•ˆ์ „ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mem::uninitialized ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์„ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์ดˆ๊ธฐํ™”๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜คํ•ด๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ต๋‹ˆ๋‹ค. MaybeUninit์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Œ์„ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ , ์ด์™€ ๊ด€๋ จ๋œ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ๊ณ ๋ คํ•˜๊ณ , "maybe_t:" ๋ฐ ๋‹จ๊ณ„๋ณ„ ์ดˆ๊ธฐํ™”๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์™„๋ฃŒ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ".assume_init()" ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. MaybeUninit์˜ ์ถœํ˜„์œผ๋กœ mem::uninitialized ํ•จ์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋ฆฐ ๋ณ€์ˆ˜์˜ ์ˆ˜๋ช…์„ ๊ธฐ๋กํ•˜๋Š” ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•œ NLL(Non-Lexical Lifetimes) ๊ธฐ์ˆ ์ด Rust 2015 ์–ธ์–ด์—์„œ ์•ˆ์ •ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ดˆ๊ธฐ์—๋Š” Rust 2018์—์„œ๋งŒ NLL์„ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค). NLL์€ ์–ดํœ˜ ์ˆ˜์ค€์—์„œ ์ˆ˜๋ช…์„ ์ปค๋ฐ‹ํ•˜๋Š” ๋Œ€์‹  ์‹คํ–‰ ํ๋ฆ„ ๊ทธ๋ž˜ํ”„์˜ ํฌ์ธํ„ฐ ์ง‘ํ•ฉ ์ˆ˜์ค€์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜ ์ฐจ์šฉ ํ™•์ธ ํ’ˆ์งˆ(์ฐจ์šฉ ๊ฒ€์‚ฌ๊ธฐ)์„ ๋†’์ด๊ณ  ์ด์ „์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ผ๋ถ€ ์œ ํ˜•์˜ ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด ๋™์ž‘์œผ๋กœ ์ธํ•ด ๋””๋ฒ„๊น…์ด ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ด€ ๋ฐฐ์—ด์˜ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์ด ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ๋งต, ๊ตฌ์กฐ์˜ ์ ์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค์œ„์Šค ํ…Œ์ด๋ธ” (์ž๋™์œผ๋กœ ๋กœ๋“œ๋จ ํ•ด์‹œ๋ธŒ๋ผ์šด::ํ•ด์‹œ๋งต, ๋‹ฌ๋ฆฌ ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰๋˜์ง€ ์•Š๋Š” ํ•œ(์˜ˆ: SipHash 1-3์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” std::HashMap) ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ˆˆ์— ๋„๋Š” ์ฐจ์ด์ ์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ๊ฐ์†Œ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ํ™”๋ฌผ์—์„œ ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ ๋„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” "--offline" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์†์„ฑ ์„ค์น˜ ์‹œ ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์บ์‹œ๋œ ํŒจํ‚ค์ง€๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ๋กœ์ปฌ ์บ์‹œ์— ์—†์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์ „์— ์ข…์†์„ฑ์„ ๋กœ์ปฌ ์บ์‹œ์— ๋ฏธ๋ฆฌ ๋กœ๋“œํ•˜๋ ค๋ฉด "cargo fetch" ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งคํฌ๋กœ "dbg!"๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ธ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ƒ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” "const" ์†์„ฑ์€ ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    ๋ ˆ์ด์•„์›ƒ::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::๋งค๋‹ฌ๋ ค ์žˆ๊ณ 
    NonNull::์บ์ŠคํŠธ;

  • ์•ˆ์ •ํ™”๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ž‘์—…::์›จ์ด์ปค, ์ž‘์—…::์„ค๋ฌธ์กฐ์‚ฌ,
    VecDeque::rotate_left, VecDeque::rotate_right,
    ์ฝ๊ธฐ::์ฝ๊ธฐ_๋ฒกํ„ฐ, ์“ฐ๊ธฐ::์“ฐ๊ธฐ_๋ฒกํ„ฐ,
    ๋ฐ˜๋ณต์ž::๋ณต์‚ฌ๋จ,
    BorrowMut(๋ฌธ์ž์—ด์šฉ) ๋ฐ str::as_mut_ptr.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€