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

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

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

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

  • Rustc ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ œ๊ณต๋œ ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ตœ์ ํ™” ์ง€์›(PGO, Profile-Guided Optimization),
    ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ˆ„์ ๋œ ํ†ต๊ณ„ ๋ถ„์„์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ณด๋‹ค ์ตœ์ ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด "-C profile-generate" ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ œ๊ณต๋˜๊ณ , ์–ด์…ˆ๋ธ”๋ฆฌ ์ค‘์— ํ”„๋กœํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด "-C profile-use"(์ฒ˜์Œ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ž˜๊ทธ๋กœ ์–ด์…ˆ๋ธ”๋˜๊ณ  ์‹คํ–‰๋˜๊ณ  ์ƒ์„ฑ๋œ ํ›„) ํ”„๋กœํ•„์€ ๋‘ ๋ฒˆ์งธ ํ”Œ๋ž˜๊ทธ๋กœ ๋‹ค์‹œ ์กฐ๋ฆฝ๋ฉ๋‹ˆ๋‹ค.

  • ์ฝ˜์†” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•  ๋•Œ ํŽธ๋ฆฌํ•œ '์นด๊ณ  ๋Ÿฐ' ๋ช…๋ น ์‹คํ–‰ ์‹œ, ํŒจํ‚ค์ง€์— ์‹คํ–‰ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์‹คํ–‰ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋๋‹ค. ์‹คํ–‰๋  ๊ธฐ๋ณธ ํŒŒ์ผ์€ ํŒจํ‚ค์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” [package] ์„น์…˜์˜ default-run ์ง€์‹œ๋ฌธ์„ ํ†ตํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด "cargo run"์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค "-bin" ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ๊ณต๋˜์—ˆ๋˜ "cargo Vendor" ๋ช…๋ น ๋ณ„๋„์˜ ํŒจํ‚ค์ง€. ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์†์„ฑ์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "cargo Vendor"๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์˜ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ crates.io์—์„œ ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋‹ค์šด๋กœ๋“œ๋˜๋ฉฐ, ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒ์ž์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ ๋„ ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. io(๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋นŒ๋“œ์— ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ํžŒํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค). ์ด ๊ธฐ๋Šฅ์€ ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ํ•˜๋‚˜์˜ ์•„์นด์ด๋ธŒ์— ๋ชจ๋“  ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง•ํ•˜์—ฌ Rustc ์ปดํŒŒ์ผ๋Ÿฌ ์ œ๊ณต์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์œ ํ˜• ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๊ฑฐํ˜• ์˜ต์…˜์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "fn increment_or_zero(x: ByteOption) ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์—์„œ "ByteOption::None => 0"์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ). MyType<.. >>>::option => N) ๋˜๋Š” ์ž์ฒด ์•ก์„ธ์Šค(c &self ๋ธ”๋ก์—์„œ "Self::Quarter => 25"๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ)
  • ๋งคํฌ๋กœ์— ์ด๋ฆ„ ์—†๋Š” ์ƒ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "const"์—์„œ ์š”์†Œ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๋Œ€์‹  ์ด์ œ "_" ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋˜์ง€ ์•Š๋Š” ์‹๋ณ„์ž๋ฅผ ๋™์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ๋งคํฌ๋กœ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ๋•Œ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ AlignN<T> ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ AlignN<MyEnum>์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๊ฑฐํ˜•๊ณผ ํ•จ๊ป˜ "#[repr(align(N))" ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • BufReader::buffer, BufWriter::buffer ๋ฐ
    ์…€::from_mut,
    ์…€::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    ์˜ต์…˜::xor
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits ๋ฐ
    ์Šฌ๋ผ์ด์Šค::copy_within.

์ถ”๊ฐ€์ ์œผ๋กœ ์ฃผ๋ชฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํ…Œ์ŠคํŠธ ์‹œ์ž‘ ๊ณ„ํš ๋น„๋™๊ธฐ ํ‘œ์ค€๋Š” Rust ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋น„๋™๊ธฐ ๋ณ€ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋น„๋™๊ธฐ ๋ฒ„์ „์œผ๋กœ ์ œ๊ณต๋˜๊ณ  async/await ๊ตฌ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋œ std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํฌํŠธ).

์ถœ์ฒ˜ : opennet.ru

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