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

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

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

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

  • ์ž„์˜ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํŠน์„ฑ ์ง€์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋ชจ๋“  ์ •์ˆ˜ ๊ฐ’์— ๋Œ€ํ•ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ตœ๋Œ€ 32๊ฐœ ์š”์†Œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋งŒ ๋‚ด์žฅ ํŠน์„ฑ ์ง€์›์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค(๊ฐ ํฌ๊ธฐ์— ๋Œ€ํ•œ ํŠน์„ฑ์€ ์ •์ ์œผ๋กœ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค). const ์ œ๋„ค๋ฆญ ๊ธฐ๋Šฅ์˜ ์ƒ์„ฑ ๋•๋ถ„์— ๋ชจ๋“  ๋ฐฐ์—ด ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๊ตฌํ˜„๋˜๊ณ  ํ˜„์žฌ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์•„์ง ์–ธ์–ด์˜ ์•ˆ์ •์ ์ธ ๊ธฐ๋Šฅ์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํฌ๊ธฐ์˜ ๋ฐฐ์—ด ์œ ํ˜•์— ๋Œ€ํ•ด.
    ์˜ˆ๋ฅผ ๋“ค์–ด Rust 1.47์˜ ๋‹ค์Œ ๊ตฌ์„ฑ์€ ๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ:

fn ๋ฉ”์ธ() {
xs = [0; 34];
println!("{:?}", xs);
}

  • ๋” ์งง์€ ์ถ”์ (์—ญ์ถ”์ ) ์ถœ๋ ฅ, ๊ธด๊ธ‰ ์ƒํ™ฉ ์ถœ๋ ฅ ์ œ๊ณต. ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ๊ด€์‹ฌ์ด ์—†์ง€๋งŒ ์ถœ๋ ฅ์„ ์–ด์ง€๋Ÿฝํžˆ๊ณ  ๋ฌธ์ œ์˜ ์ฃผ์š” ์›์ธ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์š”์†Œ๋Š” ์ถ”์ ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ถ”์ ์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ "RUST_BACKTRACE=full"์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ

fn ๋ฉ”์ธ() {
๊ณตํ™ฉ!();
}

์ด์ „์—๋Š” ํŠธ๋ ˆ์ด์Šค๊ฐ€ 23๋‹จ๊ณ„๋กœ ์ถœ๋ ฅ๋˜์—ˆ์œผ๋‚˜ ์ด์ œ๋Š” 3๋‹จ๊ณ„๋กœ ์ถ•์†Œ๋˜์–ด ๋ณธ์งˆ์„ ์ฆ‰์‹œ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ 'main'์ด '๋ช…์‹œ์ ์ธ ํŒจ๋‹‰'์— ํŒจ๋‹‰ ์ƒํƒœ์— ๋น ์กŒ์Šต๋‹ˆ๋‹ค, src/main.rs:2:5
์Šคํƒ ์—ญ์ถ”์ :
0: ํ‘œ์ค€::ํŒจ๋‹‰::begin_panic
/rustc/dโ€ฆd75a/library/std/src/panicking.rs:497์—์„œ
1: ๋†€์ดํ„ฐ::๋ฉ”์ธ
./src/main.rs:2์—์„œ
2: ์ฝ”์–ด::ops::ํ•จ์ˆ˜::FnOnce::call_once
/rustc/dโ€ฆd75a/library/core/src/ops/function.rs:227์—์„œ

  • Rustc ์ปดํŒŒ์ผ๋Ÿฌ๋Š” LLVM 11์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(Rust๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋กœ LLVM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). ๋™์‹œ์— ์ด์ „ LLVM(๋ฒ„์ „ 8๊นŒ์ง€)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์œ ์ง€๋˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ(rust-lang/llvm-project์—์„œ) LLVM 11์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. LLVM 11์˜ ์ถœ์‹œ๋Š” ํ–ฅํ›„์— ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋‚ .
  • Windows ํ”Œ๋žซํผ์—์„œ Rustc ์ปดํŒŒ์ผ๋Ÿฌ๋Š” "-C control-flow-guard" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”๋˜๋Š” ์ œ์–ด ํ๋ฆ„ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ(Control Flow Guard)๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ˜„์žฌ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์•ˆ์ •ํ™”๋œ Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, ํฌ์ธํ„ฐ::offset_from์„ ํฌํ•จํ•˜์—ฌ API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ •์ ์ธ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค. , f32::TAU ๋ฐ f64::TAU.
  • ์ƒ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” "const" ์†์„ฑ์€ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • XNUMX์ด ์•„๋‹Œ ๋ชจ๋“  ์ •์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” new์ž…๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ์ •์ˆ˜์— ๋Œ€ํ•œcheck_add,checked_sub,checked_mul,checked_neg,check_shl,checked_shr, saturating_add, saturating_sub ๋ฐ saturating_mul;
    • char ๋ฐ u8 ์œ ํ˜•์˜ ๊ฒฝ์šฐ is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punkation, is_ascii_graphic, is_ascii_whitespace ๋ฐ is_ascii_control.
  • FreeBSD์˜ ๊ฒฝ์šฐ FreeBSD 11.4์˜ ํˆดํ‚ท์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(FreeBSD 10์€ LLVM 11์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์—์„œ ๊ฐ€์ ธ์˜จ opennet.ru

์ถœ์ฒ˜ : linux.org.ru

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