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

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

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

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

  • ์†์„ฑ ๋‚ด์— ํ•จ์ˆ˜ํ˜• ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค("macro_rules!" ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ ˆ์ฐจ์  ๋งคํฌ๋กœ ๋ฐ ๋งคํฌ๋กœ). ์ด๋Ÿฌํ•œ ๋งคํฌ๋กœ๋Š” "!" ๊ธฐํ˜ธ๋กœ ๊ธฐ๋Šฅ๊ณผ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„ ๋’ค์— (macro!(...)) ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ๋งคํฌ๋กœ ์†Œ์Šค ํ…์ŠคํŠธ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ ๋‚ด์—์„œ ๋งคํฌ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฌธ์„œํ™” ์ฃผ์„์— ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด README ํŒŒ์ผ์˜ ๋‚ด์šฉ๊ณผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #![doc = include_str!("README.md")] #[path = concat!(env!("OUT_DIR "), "/generated.rs" )] ๋ชจ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • wasm32 ํ”Œ๋žซํผ์šฉ ๋‚ด์žฅ ์ปดํŒŒ์ผ๋Ÿฌ ๊ธฐ๋Šฅ(Intrinsics)์ด ์•ˆ์ •ํ™”๋˜์–ด WebAssembly์—์„œ SIMD ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v128_bitselect์™€ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ํ•จ์ˆ˜๋Š” "์•ˆ์ „" ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฌ์ธํ„ฐ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์ผ๋ถ€ ํ•จ์ˆ˜(์˜ˆ: v128_load)๋Š” "์•ˆ์ „ํ•˜์ง€ ์•Š์€" ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์ฆ๋ถ„ ์ปดํŒŒ์ผ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ด ๋ฐ˜ํ™˜๋˜์–ด ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ ํ›„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ๋•Œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋‹จ์ถ•๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ๋“œ๋Ÿฌ๋‚œ ์ˆจ๊ฒจ์ง„ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฆด๋ฆฌ์Šค 1.52.1์—์„œ๋Š” ์ฆ๋ถ„ ์ปดํŒŒ์ผ์ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•ˆ์ •ํ™”๋œ API๋ฅผ ํฌํ•จํ•˜์—ฌ API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ •์ ์ธ ๋ฒ”์ฃผ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      BTreeMap::into_keys
    • BTreeMap::into_values
    • HashMap::into_keys
    • HashMap::into_values
    • ์•„์น˜::wasm32
    • VecDeque::binary_search
    • VecDeque::binary_search_by
    • VecDeque::binary_search_by_key
    • VecDeque::partition_point
  • ์˜ต์…˜์ด ํ™”๋ฌผ ํŠธ๋ฆฌ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ โ€œโ€”prune โ€, ์ข…์†์„ฑ ํŠธ๋ฆฌ์—์„œ ์ง€์ •๋œ ์ค‘์ฒฉ ์ˆ˜์ค€์˜ ์š”์†Œ๋งŒ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ โ€œโ€”๊นŠ์ดโ€, โ€œโ€”edges no-proc- ๋งคํฌ๋กœโ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ์ฐจ์  ๋งคํฌ๋กœ์˜ ์ข…์†์„ฑ์„ ์ˆจ๊น๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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