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

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

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

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

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

  • ืคื•ืจืžื˜ ื”ื”ื•ื“ืขื•ืช ืฉื”ื•ื ืคืงื• ืขืœ ื™ื“ื™ ืžื˜ืคืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ืชื•ื›ื ื™ืช (ืคืื ื™ืงื”) ืขื•ืฆื‘ ืžื—ื“ืฉ. ื”ื˜ืงืกื˜ ืฉืฆื•ื™ืŸ ื‘ืžืืงืจื• "ืคืื ื™ืงื”!" ืžื•ืฆื’ ื›ืขืช ื‘ืฉื•ืจื” ื ืคืจื“ืช ืœืœื ืžืจื›ืื•ืช, ืžื” ืฉืžืงืœ ืขืœ ื”ืงืจื™ืื” ืฉืœ ื”ื”ื•ื“ืขื” ื•ืžื‘ื˜ืœ ื‘ืœื‘ื•ืœ ื›ืืฉืจ ืžืจื›ืื•ืช ืžืงื•ื ื ื•ืช ืงื™ื™ืžื•ืช ืื• ืžืคื•ืฆืœื•ืช ืขืœ ืคื ื™ ืžืกืคืจ ืฉื•ืจื•ืช. fn main() { let file = "ferris.txt"; ืคืื ื™ืงื”!("ื”ื• ืœื! {ืงื•ื‘ืฅ:?} ืœื ื ืžืฆื!"); } ื”ื™ื” ืฉืจืฉื•ืจ 'ืจืืฉื™' ื‘ืคืื ื™ืงื” ื‘'ืื•ื™ ืœื! "ferris.txt" ืœื ื ืžืฆื!', src/main.rs:3:5 ื”ืฉืจืฉื•ืจ 'ืจืืฉื™' ื ื›ื ืก ืœืคืื ื™ืงื” ื‘-src/main.rs:3:5: ื”ื• ืœื! "ferris.txt" ืœื ื ืžืฆื!

    ื”ืคืœื˜ ืฉืœ ื”ื”ื•ื“ืขื•ืช ื”ืžื•ืฆื’ื•ืช ื›ืืฉืจ ืคืงื•ื“ื•ืช ื”ืžืืงืจื• "assert_eq" ื•-"assert_ne" ืžื•ืคืขืœื•ืช ื’ื ืขื•ื‘ื“ ืžื—ื“ืฉ. fn main() { assert_eq!("๐Ÿฆ€", "๐ŸŸ", "ืคืจื™ืก ื–ื” ืœื ื“ื’"); } ื”ื™ื” ืฉืจืฉื•ืจ 'ืจืืฉื™' ื‘ืคืื ื™ืงื” ื‘-'assertion failed: `(left == right)` left: `"๐Ÿฆ€"`, right: `"๐ŸŸ"`: ferris is not a fish', src/main.rs: 2:5 ื”ืฉืจืฉื•ืจ 'ืจืืฉื™' ื ื›ื ืก ืœืคืื ื™ืงื” ื‘-src/main.rs:2:5: ื”ื˜ืขื ื” `ืฉืžืืœ == ื™ืžื™ืŸ` ื ื›ืฉืœื”: ืคืจื™ืก ื–ื” ืœื ื“ื’ ืฉืžืืœื”: "๐Ÿฆ€" ืžื™ืžื™ืŸ: "๐ŸŸ"

  • ื‘ื”ืชืื ืœ-RFC 3184, ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœื‘ืฆืข ืžื ื™ืคื•ืœืฆื™ื” ื™ืฉื™ืจื” ืฉืœ ืžืคืชื—ื•ืช ืื—ืกื•ืŸ ืžืงื•ืžื™ื™ื (thread_local) ืฉืœ LocalKey > ื•-LocalKey > ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ืฉื™ื˜ื•ืช get(), set(), take() ื•-replace(), ื‘ืžืงื•ื ืฉื™ืžื•ืฉ ื‘ืกื’ื™ืจื” "with(|inner| ...)", ืžื” ืฉืžื‘ื˜ืœ ืืช ื”ืฆื•ืจืš ื‘ืงื•ื“ ืืชื—ื•ืœ ื ื•ืกืฃ ืขื‘ื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขืจื›ื™ื ืฉืฆื•ื™ื ื• ืขื‘ื•ืจ ืฉืจืฉื•ืจื™ื ื—ื“ืฉื™ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืžืืงืจื• "thread_local!" thread_local! { ื“ื‘ืจื™ื ืกื˜ื˜ื™ื™ื: ืชื > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // ื”ืคืš ืœ-THINGS.set(vec![3, 1, 2]); // ... // ื”ื™ื” ื ืชืŸ v = THINGS.with(|i| i.take()); // ื”ืคืš ืœืชืช v: Vec = THINGS.take(); }
  • ื—ืœืง ื—ื“ืฉ ืฉืœ ื”-API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื” ืฉืœ ื™ืฆื™ื‘, ื›ื•ืœืœ ื”ืฉื™ื˜ื•ืช ื•ื”ื™ื™ืฉื•ื ืฉืœ ืชื›ื•ื ื•ืช ื”ืชื™ื™ืฆื‘ื•:
    • ืœื ื—ืชื•ื {integer}::div_ceil
    • ืœื ื—ืชื•ื {integer}::next_multiple_of
    • ืœื ื—ืชื•ื {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::ืงื‘ืœ
    • LocalKey:: >::ืกื˜
    • LocalKey:: >::ืงื—
    • LocalKey:: >:: ืœื”ื—ืœื™ืฃ
    • LocalKey:: >::with_borrow
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::ืกื˜
    • LocalKey:: >::ืงื—
    • LocalKey:: >:: ืœื”ื—ืœื™ืฃ
  • ื”ืชื›ื•ื ื” "const", ื”ืงื•ื‘ืขืช ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื›ืœ ื”ืงืฉืจ ื‘ืžืงื•ื ื‘ืงื‘ื•ืขื™ื, ืžืฉืžืฉืช ื‘ืคื•ื ืงืฆื™ื•ืช:
    • rc::ื—ืœืฉ::ื—ื“ืฉ
    • sync::Weak::new
    • NonNull::as_ref
  • ื”ืžื”ื“ืจ ืžืกืคืง ื”ืงืœื˜ื” ืฉืœ โ€‹โ€‹ืžื™ื“ืข ื’ืจืกื” ื‘ืกืขื™ืฃ ".comment", ื‘ื“ื•ืžื” ืœ-GCC ื•-Clang.
  • ืจืžืช ื”ืชืžื™ื›ื” ื”ืฉืœื™ืฉื™ืช ื™ื•ืฉืžื” ืขื‘ื•ืจ ื”ืคืœื˜ืคื•ืจืžื•ืช aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ื•-x86_64-unknown-linux -ืื•ื”ืก. ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ื›ื•ืœืœืช ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช, ืคืจืกื•ื ื‘ื•ื ื™ื ืจืฉืžื™ื™ื ืื• ื‘ื“ื™ืงื” ืื ื ื™ืชืŸ ืœื‘ื ื•ืช ืืช ื”ืงื•ื“.
  • ื”ืจืžื” ื”ืฉื ื™ื™ื” ืฉืœ ืชืžื™ื›ื” ื‘ืคืœื˜ืคื•ืจืžืช ื”ื™ืขื“ wasm32-wasi-preview1-threads ื™ื•ืฉืžื”. ืจืžืช ื”ืชืžื™ื›ื” ื”ืฉื ื™ื™ื” ื›ืจื•ื›ื” ื‘ืขืจื‘ื•ืช ื”ืจื›ื‘ื”.

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

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