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

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

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

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

  • "cargo check" ๋ฐ "cargo Clippy" ๋ช…๋ น ์‹คํ–‰ ์ˆœ์„œ์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” "ํ™”๋ฌผ ๊ฒ€์‚ฌ" ํ›„์— "ํ™”๋ฌผ Clippy"๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์ด๋Ÿฌํ•œ ๊ฒ€์‚ฌ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์บ์‹œ ๋ถ„๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ Clippy ์œ ํ‹ธ๋ฆฌํ‹ฐ(linter)๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉฐ "cargo Clippy" ๋ฐ "Cargo Check" ํ˜ธ์ถœ ์ˆœ์„œ๋Š” ๋” ์ด์ƒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์•ˆ์ •ํ™”๋œ ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์ธ์ˆ˜::as_str
    • ๋ฌธ์ž::MAX
    • ๋ฌธ์ž::REPLACEMENT_CHARACTER
    • ๋ฌธ์ž::UNICODE_VERSION
    • char::decode_utf16
    • ๋ฌธ์ž::from_digit
    • char::from_u32_unchecked
    • ๋ฌธ์ž::from_u32
    • ์Šฌ๋ผ์ด์Šค::partition_point
    • str::rsplit_once
    • str::split_once
  • ์ƒ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” "const" ์†์„ฑ์€ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • char::len_utf8
    • char::len_utf16
    • char::to_ascii_uppercase
    • char::to_ascii_lowercase
    • char::eq_ignore_ascii_case
    • u8::to_ascii_uppercase
    • u8::to_ascii_lowercase
    • u8::eq_ignore_ascii_case
  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜์— ์‚ฌ์šฉ๋œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฐํŠธ ๊ฒ€์‚ฌ unsafe_op_in_unsafe_fn์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด ์š”์†Œ์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ํ˜•์‹์œผ๋กœ ์บ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. let mut x: [์‚ฌ์šฉ; 2] = [0, 0]; p = &mut x as *mut usize; p = &mut x๋ฅผ *const usize๋กœ ๋‘์„ธ์š”;
  • Clippy(linter)์— 9๊ฐœ์˜ ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ™”๋ฌผ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ด์ œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด JSON์˜ "manifest_path" ํ•„๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. crates.io ์ €์žฅ์†Œ์— SPDX 3.11 ํ˜•์‹์˜ ๋ผ์ด์„ผ์Šค ์ •๋ณด ์ง€์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "cargo test - foo bar"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด "foo" ๋ฐ "bar" ๋งˆ์Šคํฌ์™€ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ LLVM ํˆดํ‚ท์ด LLVM 12๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ์ˆ˜์ค€์˜ ์ง€์›์€ s390x-unknown-linux-musl, riscv32gc-unknown-linux-musl, riscv64gc-unknown-linux-musl ๋ฐ powerpc-unknown-openbsd ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ˆ˜์ค€์—๋Š” ๊ธฐ๋ณธ ์ง€์›์ด ํฌํ•จ๋˜์ง€๋งŒ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ๊ณต์‹ ๋นŒ๋“œ ๊ฒŒ์‹œ ๋ฐ ์ฝ”๋“œ ๊ตฌ์ถ• ๊ฐ€๋Šฅ์„ฑ ํ™•์ธ์€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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