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

Mozilla ํ”„๋กœ์ ํŠธ์— ์˜ํ•ด ์„ค๋ฆฝ๋˜์—ˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ๋…๋ฆฝ์ ์ธ ๋น„์˜๋ฆฌ ์กฐ์ง์ธ Rust Foundation์˜ ํ›„์›์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Rust 1.56์˜ ์ถœ์‹œ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ ์™ธ์—๋„ ์ด ๋ฆด๋ฆฌ์Šค๋Š” Rust 2021๋กœ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ์ง€๋‚œ 2021๋…„ ๋™์•ˆ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์•ˆ์ •ํ™”๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Rust 2018์€ ๋˜ํ•œ ์ง€๋‚œ XNUMX๋…„ ๋™์•ˆ Rust XNUMX์˜ ์ถœ์‹œ๊ฐ€ ์–ธ์–ด ๊ฐœ๋ฐœ์˜ ๊ธฐ์ดˆ๊ฐ€ ๋œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ–ฅํ›„ XNUMX๋…„ ๋™์•ˆ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ดˆ ์—ญํ• ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์— "2015", "2018" ๋ฐ "2021" ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•œ Rust ์—๋””์…˜์— ํ•ด๋‹นํ•˜๋Š” ์–ธ์–ด ์ƒํƒœ ์กฐ๊ฐ์— ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋””์…˜์€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ โ€œ[ํŒจํ‚ค์ง€]โ€ ์„น์…˜์˜ โ€œ์—๋””์…˜โ€ ํ•„๋“œ๋ฅผ ํ†ตํ•ด ํ™”๋ฌผ ํŒจํ‚ค์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "2018" ๋ฒ„์ „์—๋Š” 2018๋…„ ๋ง์— ์•ˆ์ •ํ™”๋œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ˜ธํ™˜์„ฑ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๋ชจ๋“  ์ถ”๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. 2021 ๋ฒ„์ „์—๋Š” ํ˜„์žฌ 1.56 ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ์•ˆ๋˜๊ณ  ํ–ฅํ›„ ๊ตฌํ˜„์„ ์œ„ํ•ด ์Šน์ธ๋œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ๊นจ๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ์ง‘์ž๋Š” ์–ธ์–ด ์ž์ฒด ์™ธ์—๋„ ๋„๊ตฌ ๋ฐ ๋ฌธ์„œ์˜ ์ƒํƒœ๋„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

Rust 2021์— ๊ธฐ๋ก๋œ ์ฃผ์š” ๋น„ํ˜ธํ™˜์„ฑ:

  • ํด๋กœ์ €์—์„œ ๋ณ„๋„ ์บก์ฒ˜ - ํด๋กœ์ €๋Š” ์ด์ œ ์ „์ฒด ์‹๋ณ„์ž ๋Œ€์‹  ๊ฐœ๋ณ„ ํ•„๋“œ ์ด๋ฆ„์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "|| ax + 1"์€ "a" ๋Œ€์‹  "ax"๋งŒ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์˜ IntoIterator ํŠน์„ฑ: array.into_iter()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฐ’์œผ๋กœ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Macro_rules์—์„œ "|" ํ‘œํ˜„์‹ ์ฒ˜๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋ถ€์šธ OR) ํŒจํ„ด - ์ผ์น˜ ํ•ญ๋ชฉ์˜ ":pat" ์ง€์ •์ž๋Š” ์ด์ œ "A | ๋น„".
  • ์นด๊ณ  ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Rust 1.51์— ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ ํ™•์ธ์ž์˜ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • TryFrom, TryInto ๋ฐ FromIterator ํŠน์„ฑ์ด prelude ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Panic!(..) ๋ฐ Assert!(expr, ..) ๋งคํฌ๋กœ๋Š” ์ด์ œ println!()๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฌธ์ž์—ด ํ˜•์‹์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ format_args!(..)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ident#, identยป..." ๋ฐ ident'...' ํ‘œํ˜„์‹์€ ์–ธ์–ด ๊ตฌ๋ฌธ์— ์˜ˆ์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • bare_trait_objects ๋ฐ ellipsis_inclusive_range_patterns ๊ฒฝ๊ณ ๋ฅผ ์˜ค๋ฅ˜๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

Rust 1.56์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ:

  • Cargo.toml์˜ โ€œ[package]โ€ ์„น์…˜์— Rust-version ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒ์ž ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ง€์›๋˜๋Š” ์ตœ์†Œ Rust ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์ด ์ง€์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด Cargo๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ž‘๋™์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • "๋ฐ”์ธ๋”ฉ @ ํŒจํ„ด" ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ„ด ์ผ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ถ”๊ฐ€ ๋ฐ”์ธ๋”ฉ ์ง€์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค(์˜ˆ: "let Matrix @ Matrix { row_len, .. } = get_matrix();").
  • API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ •ํ™”๋œ ํŠน์„ฑ์˜ ๋ฉ”์„œ๋“œ ๋ฐ ๊ตฌํ˜„์„ ํฌํ•จํ•˜์—ฌ ์•ˆ์ •์ ์ธ ๋ฒ”์ฃผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • ๋ฌธ์ž์—ด::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • ์ƒ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” "const" ์†์„ฑ์€ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ํ‘œ์ค€::mem::๋ณ€ํ™˜
    • [T]::์ฒซ ๋ฒˆ์งธ
    • [T]::split_first
    • [T]::๋งˆ์ง€๋ง‰
    • [T]::split_last
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ LLVM ๋ฒ„์ „ 13์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • aarch64-apple-ios-sim ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ ์ˆ˜์ค€์˜ ์ง€์›๊ณผ powerpc-unknown-freebsd ๋ฐ riscv32imc-esp-espidf ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์„ธ ๋ฒˆ์งธ ์ˆ˜์ค€์˜ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ˆ˜์ค€์—๋Š” ๊ธฐ๋ณธ ์ง€์›์ด ํฌํ•จ๋˜์ง€๋งŒ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ๊ณต์‹ ๋นŒ๋“œ ๊ฒŒ์‹œ ๋˜๋Š” ์ฝ”๋“œ ๋นŒ๋“œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ์€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Rust๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์— ์ค‘์ ์„ ๋‘๊ณ  ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋‚˜ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ž‘์—… ์‹คํ–‰์—์„œ ๋†’์€ ๋ณ‘๋ ฌ์„ฑ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(๋Ÿฐํƒ€์ž„์€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™” ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋กœ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค).

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

์ถœ์ฒ˜ : opennet.ru

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