ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช Rust 1.51

ืคื•ืจืกื ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช ื”ืžืขืจื›ืชื™ืช Rust 1.51, ืฉื”ื•ืงืžื” ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ ืžื•ื–ื™ืœื”, ืืš ืคื•ืชื—ื” ื›ืขืช ื‘ื—ืกื•ืช ื”ืขืžื•ืชื” ื”ืขืฆืžืื™ืช Rust Foundation. ื”ืฉืคื” ืžืชืžืงื“ืช ื‘ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ, ืžืกืคืงืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ ืื•ื˜ื•ืžื˜ื™, ื•ืžืกืคืงืช ืืช ื”ืืžืฆืขื™ื ืœื”ืฉื’ืช ืžืงื‘ื™ืœื™ื•ืช ืžืฉื™ืžื•ืช ื’ื‘ื•ื”ื” ืœืœื ืฉื™ืžื•ืฉ ื‘ืืกืคืŸ ืืฉืคื” ืื• ื–ืžืŸ ืจื™ืฆื” (ื–ืžืŸ ื”ืจื™ืฆื” ืžืฆื˜ืžืฆื ืœืืชื—ื•ืœ ื•ืชื—ื–ื•ืงื” ื‘ืกื™ืกื™ื™ื ืฉืœ ื”ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช).

ื ื™ื”ื•ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืื•ื˜ื•ืžื˜ื™ ืฉืœ Rust ืžื‘ื˜ืœ ืฉื’ื™ืื•ืช ื‘ืขืช ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืฆื‘ื™ืขื™ื ื•ืžื’ืŸ ืžืคื ื™ ื‘ืขื™ื•ืช ื”ื ื•ื‘ืขื•ืช ืžืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ื–ื™ื›ืจื•ืŸ ื‘ืจืžื” ื ืžื•ื›ื”, ื›ื’ื•ืŸ ื’ื™ืฉื” ืœืื–ื•ืจ ื–ื™ื›ืจื•ืŸ ืœืื—ืจ ืฉื—ืจื•ืจื•, ื”ืคื ื™ื™ืช ืžืฆื‘ื™ืข ืืคืกื™ืช, ื—ืจื™ื’ื•ืช ืžืื’ืจ ื•ื›ื•'. ื›ื“ื™ ืœื”ืคื™ืฅ ืกืคืจื™ื•ืช, ืœื”ื‘ื˜ื™ื— ื”ืจื›ื‘ื” ื•ืœื ื”ืœ ืชืœื•ืช, ื”ืคืจื•ื™ืงื˜ ืžืคืชื— ืืช ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช Cargo. ืžืื’ืจ crates.io ื ืชืžืš ืœืื™ืจื•ื— ืกืคืจื™ื•ืช.

ื—ื™ื“ื•ืฉื™ื ืขื™ืงืจื™ื™ื:

  • ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืงืฉื•ืจื” ืœืฉื™ืžื•ืฉ ื‘ื’ื ืจื™ื•ืช ืงื‘ื•ืขื•ืช ืงื™ื‘ืœื” ืžืขืžื“ ืฉืœ ืžื•ืฆืจ ืžื™ื ื™ืžืœื™ ื‘ืจ-ืงื™ื™ืžื (MVP), ืžื” ืฉื ื•ืชืŸ ืื•ืจ ื™ืจื•ืง ืœืฉื™ืžื•ืฉ ื ืจื—ื‘. Const ื’ื ืจื™ื•ืช ืžืืคืฉืจื•ืช ืœื”ื›ืœื™ืœ ื˜ื™ืคื•ืกื™ื ืœืขืจื›ื™ื ืงื‘ื•ืขื™ื, ื›ืœื•ืžืจ. ื”ืฉืชืžืฉ ื‘ืืจื’ื•ืžื ื˜ื™ื ื’ื ืจื™ื™ื ื”ืžื•ื’ื‘ืœื™ื ืœื˜ื•ื•ื— ืฉืœ ืขืจื›ื™ื ืงื‘ื•ืขื™ื, ืœื ืกื•ื’ื™ื ืื• ืชืงื•ืคื•ืช ื—ื™ื™ื. ืชื›ื•ื ื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื”ืฉืชืžืฉ ื‘ืกื•ื’ื™ื ื•ื‘ื”ืคืฉื˜ื” ืขื ืคืจืžื˜ืจื™ื ืฉืœืžื™ื ื‘ืขืช ื™ืฆื™ืจืช ืชื›ื•ื ื•ืช ืขื‘ื•ืจ ืžืขืจื›ื™ื ื‘ื›ืœ ื’ื•ื“ืœ ืžื‘ืœื™ ืœื™ืฆื•ืจ ืกื•ื’ ื ืคืจื“ ืขื‘ื•ืจ ื›ืœ ื˜ื•ื•ื— ืฉืœ ืขืจื›ื™ื ื—ื•ืงื™ื™ื ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉืื™ืŸ ื”ืชืจื—ืฉื•ื™ื•ืช ืžื—ื•ืฅ ืœืชื—ื•ื.

    ื”ื—ืœ ืžื”ื’ืจืกื” ื”ื ื•ื›ื—ื™ืช, ืขื‘ื•ืจ ืžืขืจื›ื™ื ืขื ืกื•ื’ "[T; N]" (ืกื•ื’ T ื•ื’ื•ื“ืœ N) ืžืกืคืง ืืช ื”ื™ื›ื•ืœืช ืœื”ืคืฉื˜ ืกื•ื’ ื•ื’ื•ื“ืœ ื‘ืืžืฆืขื•ืช ืขืจื›ื™ื ืขื ื›ืœ ืกื•ื’ื™ ืžืกืคืจ ืฉืœื, ื‘ื•ืœื™ืื ื™ ื•ืชื•ื•ื™ื (ืกื•ื’ื™ struct ื•-enum ืื™ื ื ื ืชืžื›ื™ื ืขื“ื™ื™ืŸ). ื’ื ืจื™ื•ืช ืงื‘ื•ืขื•ืช ืžืคืฉื˜ื•ืช ืžืื•ื“ ืืช ืคื™ืชื•ื— ื”ืกืคืจื™ื™ื”; ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืžืขืจืš ืฉืื™ื ื• ืงืฉื•ืจ ืœืกื•ื’ ื•ื’ื•ื“ืœ ืกืคืฆื™ืคื™ื™ื, ื ื™ืชืŸ ืœืฆื™ื™ืŸ: struct Array { // ^^^^^^^^^^^^^^^^^^^^ ื”ื’ื“ืจื” ืฉืœ ืจืฉื™ืžื” ื’ื ืจื™ืช ืงื‘ื•ืขื”: [T; LENGTH] // ^^^^^^ ื”ืฉื™ืžื•ืฉ ืฉืœื• }

    ื›ืืฉืจ ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ ื‘ืคื•ืขืœ ืขื ื”ื”ื’ื“ืจื” ื”ื–ื• ืฉืœ "ืžืขืจืš ยป ื”ืžื”ื“ืจ ื™ืคื™ืง ื’ืจืกื” ืžื•ื ื•ืžื•ืจืคื™ืช ืฉืœ Array: struct Array { ืจืฉื™ืžื”: [u8; 32] }

  • ื”-std::array::IntoIter API, ื”ืžื‘ื•ืกืก ืขืœ ื’ื ืจื™ื•ืช ืงื‘ื•ืขื•ืช, ื™ื•ืฆื‘, ื‘ืขื–ืจืชื• ื ื™ืชืŸ ืœื™ืฆื•ืจ ืื™ื˜ืจื˜ื•ืจื™ื ืœืคื™ ืขืจืš ืขื‘ื•ืจ ื›ืœ ืžืขืจืš: fn main() { let array = [1, 2, 3, 4, 5] ; // ื‘ืขื‘ืจ, ื›ื“ื™ ืœื—ื–ื•ืจ ืขืœ ืขืจืš, ื”ื™ื™ืช ืฆืจื™ืš ืœืงืจื•ื ืœืžืชื•ื“ื” .iter() ืขื‘ื•ืจ ืคืจื™ื˜ ื‘-array.iter().copied() { println!("{}", item); } // ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืขื‘ื•ืจ ืคืจื™ื˜ ื‘-std::array::IntoIter::new(array) { println!("{}", item); } }
  • ืžื ื”ืœ ื—ื‘ื™ืœื•ืช ื”ืžื˜ืขืŸ ืชื•ืžืš ื›ืขืช ื‘ืฉื“ื” ืคื•ืชืจ ื—ื“ืฉ ื‘-Cargo.toml, ืฉื‘ื• ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื’ืจืกื” ื”ืฉื ื™ื™ื” ืฉืœ ืคื•ืชืจ ื”ืชื›ื•ื ื•ืช. ื”ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ื”ืžื’ื“ื™ืจ ื ืžื ืขืช ืžืฉื™ืœื•ื‘ ืฉืœ ืชื›ื•ื ื•ืช ืชืœื•ืช ื”ืžืคื•ืจื˜ื•ืช ื‘ืกืขื™ืฃ "[ืชื›ื•ื ื•ืช]", ื›ืืฉืจ ื”ื™ื ืื™ื ื” ืžืชืื™ืžื”, ืœืžืฉืœ, ื›ืืฉืจ ื”ื›ืœืœืช ืชืœื•ืช ื”ืžื‘ืงืฉืช ืชื›ื•ื ื” ืกื˜ื ื“ืจื˜ื™ืช ื›ืœืฉื”ื™ ื‘ืกืงืจื™ืคื˜ื™ื ื•ืคืงื•ื“ื•ืช ืžืืงืจื•, ืืš ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืชื›ื•ื ื” ืœื ืกื˜ื ื“ืจื˜ื™ืช. ื‘ืงื•ื‘ืฅ ื”ื”ืคืขืœื” ืฉื”ืชืงื‘ืœ.

    ืขื“ ื›ื” ืฉื•ืœื‘ื• ื”ื™ื›ื•ืœื•ืช ืฉืœ ื—ื‘ื™ืœื” ืฉื”ื•ื–ื›ืจื” ืžืกืคืจ ืคืขืžื™ื ื‘ื’ืจืฃ ื”ืชืœื•ืช. ืœื“ื•ื’ืžื”, ืื ืคืจื•ื™ืงื˜ ื›ื•ืœืœ foo ืชืœื•ืช ืฉืžื’ื“ื™ืจ ืืช ื”ื™ื›ื•ืœื•ืช A ื•-B, ื•ื—ื‘ื™ืœื” ื–ื• ืžืฉืžืฉืช ื‘ื—ื‘ื™ืœื•ืช ื”ืื—ืจื•ืช bar ื•-baz, ืœืžืจื•ืช ืฉ-bar ืชืœื•ื™ ื‘-foo ืขื ืชื›ื•ื ื” A, ื•ื‘ืื– ืชืœื•ื™ ื‘-foo ืขื ืชื›ื•ื ื” B, ืื– ื”ืชื•ืฆืื” ืชื”ื™ื” cargo ื™ืฉืœื‘ ืืช ื”ืชื›ื•ื ื•ืช ื”ืœืœื• ื•ื™ืงืžืคืœ ืืช foo ืขื ืชื›ื•ื ื•ืช A ื•- B. ืฉื™ื˜ื” ื–ื• ืขืฉื•ื™ื” ืœื’ืจื•ื ืœืชื›ื•ื ื” ื”ืžืื•ืคืฉืจืช ืขืงื‘ ืชืœื•ืช ืžืกื•ื™ืžืช ืฉืื™ื ื” ืชื•ืืžืช ืœืžืขืจื›ืช ื”ื™ืขื“ ืฉืขื‘ื•ืจื” ื ื•ืฆืจ ื”-build ื”ืžืชืงื‘ืœ. ืœื“ื•ื’ืžื”, ื›ืืฉืจ ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘ื’ืจืกื” ืฉืœ foo ืขื "#![no_std]" ื‘ืงื•ื‘ืฅ ื”ืคืขืœื” ืฉื ื‘ื ื” ืขื "#![no_std]", ื•ื‘ืžืงื‘ื™ืœ ืœื”ืฉืชืžืฉ ื‘-foo ืขื "std" ื‘ืžื”ืœืš ื”-build in. rs. ื›ืืฉืจ ืžืฆื™ื™ื ื™ื ืืช resolver="2" ื‘-Cargo.toml, ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช ื™ื ืกื” ืœื˜ืคืœ ื›ืจืื•ื™ ื‘ื”ืชื ื’ืฉื•ืช ื–ื•, ืชื•ืš ื”ืคืจื“ื” ื‘ื™ืŸ ืชืœื•ืช ืฉืœ ืžืคืชื—, ืžืืจื— ื•ื™ืขื“.

  • Cargo ืžื™ื™ืฉืžืช ืืช ืืคืฉืจื•ืช ื”ืคื™ืฆื•ืœ-debuginfo, ื”ืžื•ื’ื“ืจืช ื‘ืกืขื™ืฃ "[ืคืจื•ืคื™ืœ]", ื•ืืช ื”ื“ื’ืœ ื”ืžืชืื™ื "-Csplit-debuginfo=unpacked" ื‘-rustc, ื•ืžืฆื™ืขื” ื”ื˜ืžืขื” ืฉืœ ืฉื™ื˜ื” ื—ื“ืฉื” ืœืฉืžื™ืจืช ืžื™ื“ืข ื‘ืื’ื™ื, ืฉืžื™ื™ืชืจืช ืืช ื”ืฆื•ืจืš ืงืจื ืœื›ืœื™ ื”ืฉื™ืจื•ืช dsymutil ื•ืžืื™ืฅ ืžืฉืžืขื•ืชื™ืช ืืช ืชื”ืœื™ืš ื‘ื ื™ื™ืช ื”ืชื”ืœื™ืš ืขื ืžื™ื“ืข ื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘-macOS.
  • makos ืžื™ื•ืฆื‘ "ptr::addr_of!" ื•-"ptr::addr_of_mut!", ื”ืžืืคืฉืจื™ื ืœืš ืœื™ืฆื•ืจ ืžืฆื‘ื™ืขื™ื ื’ื•ืœืžื™ื™ื ืขื‘ื•ืจ ืฉื“ื•ืช ืœื ืžื™ื•ืฉืจื™ื. ื”ืฉืชืžืฉ ื‘-std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // &packed.f2 ื™ื™ืฆื•ืจ ืžืฆื‘ื™ืข ืœื ืžื™ื•ืฉืจ ื”ืžื•ื‘ื™ืœ ืœื”ืชื ื”ื’ื•ืช ืœื ืžื•ื’ื“ืจืช let raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
  • ื—ืœืง ื—ื“ืฉ ืฉืœ ื”-API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื™ืช ื”ื™ืฆื™ื‘ื”, ื›ื•ืœืœ ื”ืฉื™ื˜ื•ืช ื”ื‘ืื•ืช ื”ืชื™ื™ืฆื‘ื•:
    • Arc::decrement_strong_count
    • Arc::increment_strong_count
    • Once::call_once_force
    • ืœื”ืฆืฆื”::next_if_eq
    • ืœื”ืฆืฆื”::next_if
    • Seek::stream_position
    • array::IntoIter
    • panic::panic_any
    • ptr::addr_of!
    • ptr::addr_of_mut!
    • ืคืจื•ืกื”::fill_with
    • slice::split_inclusive_mut
    • ืคืจื•ืกื”::split_inclusive
    • slice::strip_prefix
    • slice::strip_suffix
    • str::split_inclusive
    • sync::OnceState
    • ืžืฉื™ืžื”::ื”ืชืขื•ืจืจ
  • ืจืžืช ื”ืชืžื™ื›ื” ื”ืฉืœื™ืฉื™ืช ื™ื•ืฉืžื” ืขื‘ื•ืจ ื”ืคืœื˜ืคื•ืจืžื•ืช i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 ื•-aarch64_be-unknown-linux-gnu_ilp32 . ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ื›ื•ืœืœืช ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช, ืคืจืกื•ื ื‘ื•ื ื™ื ืจืฉืžื™ื™ื ืื• ื‘ื“ื™ืงื” ืื ื ื™ืชืŸ ืœื‘ื ื•ืช ืืช ื”ืงื•ื“.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”