Rust 1.53 ืฉื•ื—ืจืจ. ื’ื•ื’ืœ ืชืžืžืŸ ื”ื•ืกืคืช ืชืžื™ื›ืช Rust ืœืงืจื ืœ ื”ืœื™ื ื•ืงืก

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

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

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

  • ืขื‘ื•ืจ ืžืขืจื›ื™ื, ื”ื•ื˜ืžืขื” ื”ืชื›ื•ื ื” IntoIterator, ื”ืžืืคืฉืจืช ืœืš ืœืืจื’ืŸ ืืช ื”ืื™ื˜ืจืฆื™ื” ืฉืœ ืจื›ื™ื‘ื™ ืžืขืจืš ืœืคื™ ืขืจื›ื™ื: ืขื‘ื•ืจ i ื‘-[1, 2, 3] { .. }

    ืืคืฉืจ ื’ื ืœื”ืขื‘ื™ืจ ืžืขืจื›ื™ื ืœืฉื™ื˜ื•ืช ืฉืžืงื‘ืœื•ืช ืื™ื˜ืจื˜ื•ืจื™ื, ืœืžืฉืœ: let set = BTreeSet::from_iter([1, 2, 3]); ืขื‘ื•ืจ (ื, ื‘) ื‘-some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    ื‘ืขื‘ืจ, IntoIterator ื™ื•ืฉื ืจืง ืขื‘ื•ืจ ื”ืคื ื™ื•ืช ืœืžืขืจืš, ื›ืœื•ืžืจ. ื›ื“ื™ ืœื—ื–ื•ืจ ืขืœ ืขืจื›ื™ื ื”ื™ื” ืฆื•ืจืš ืœื”ืฉืชืžืฉ ื‘ื”ืคื ื™ื•ืช ("&[1, 2, 3]") ืื• "[1, 2, 3].iter()". ื”ื”ื˜ืžืขื” ืฉืœ IntoIterator ืขื‘ื•ืจ ืžืขืจื›ื™ื ื ื‘ืœืžื” ืขืœ ื™ื“ื™ ื‘ืขื™ื•ืช ืชืื™ืžื•ืช ืฉื ื’ืจืžื• ืขืœ ื™ื“ื™ ื”ืžืจื” ืงื•ื“ืžืช ืฉืœ ืžื”ื“ืจ ืž-array.into_iter() ืœ-(&array).into_iter(). ื‘ืขื™ื•ืช ืืœื• ื ืคืชืจื• ื‘ืขื–ืจืช ืคืชืจื•ืŸ ืขื•ืงืฃ - ื”ืžื”ื“ืจ ื™ืžืฉื™ืš ืœื”ืžื™ืจ array.into_iter() ืœ-(&array).into_iter() ื›ืื™ืœื• ืœื ื”ื™ื” ื™ื™ืฉื•ื ืฉืœ ืชื›ื•ื ืช IntoIterator, ืืœื ืจืง ื›ืืฉืจ ื™ืงืจื ืœืžืชื•ื“ื” ื‘ืืžืฆืขื•ืช ื”-".into_iter() )" ืชื—ื‘ื™ืจ ื•ืžื‘ืœื™ ืœื’ืขืช ื‘ืงืจื™ืื•ืช ื‘ืฆื•ืจื” "ื‘-[1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • ืืคืฉืจ ืœืฆื™ื™ืŸ ื‘ื™ื˜ื•ื™ื™ื "|" (ืคืขื•ืœืช OR ืœื•ื’ื™ืช) ื‘ื›ืœ ื—ืœืง ืฉืœ ื”ืชื‘ื ื™ืช, ืœืžืฉืœ, ื‘ืžืงื•ื "Some(1) | Some(2)" ืืชื” ื™ื›ื•ืœ ื›ืขืช ืœื›ืชื•ื‘ "Some(1 | 2)": match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • ื”ืฉื™ืžื•ืฉ ื‘ืชื•ื•ื™ื ืฉืื™ื ื ASCII ื‘ืžื–ื”ื™ื ืžื•ืชืจ, ื›ื•ืœืœ ื›ืœ ื”ืชื•ื•ื™ื ื”ืœืื•ืžื™ื™ื ื”ืžื•ื’ื“ืจื™ื ื‘ืžืคืจื˜ Unicode UAX 31, ืืš ืœื ื›ื•ืœืœ ืชื•ื•ื™ ืืžื•ื’'ื™. ืื ืืชื” ืžืฉืชืžืฉ ื‘ืชื•ื•ื™ื ืฉื•ื ื™ื ืืš ื“ื•ืžื™ื, ื”ืžื”ื“ืจ ื™ืฉืœื— ืื–ื”ืจื”. const BLร…HAJ: &str = "๐Ÿฆˆ"; struct ไบบ { ๅๅญ—: ืžื—ืจื•ื–ืช, } ืชืŸ ฮฑ = 1; let's = 2; ืื–ื”ืจื”: ืฆืžื“ ืžื–ื”ื™ื ื ื—ืฉื‘ ืœื‘ืœื‘ื•ืœ ื‘ื™ืŸ '๏ฝ“' ืœ-'s'
  • ื—ืœืง ื—ื“ืฉ ืฉืœ ืžืžืฉืงื™ API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื™ืช ื”ื™ืฆื™ื‘ื•ืช, ื›ื•ืœืœ ื”ืชื™ื™ืฆื‘ื•ืช ื”ื‘ืื™ื:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • ืžืฉืš ื–ืžืŸ::ZERO
    • ืžืฉืš ื–ืžืŸ::MAX
    • ืžืฉืš ื–ืžืŸ::is_XNUMX
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator ืขื‘ื•ืจ ืžืขืจื›ื™ื
    • {integer}::BITS
    • io::ืฉื’ื™ืื”::ืœื ื ืชืžืš
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • ืืคืฉืจื•ืช::ื”ื›ื ืก
    • ื”ื–ืžื ื”::is_eq
    • ื”ื–ืžื ื”::is_ne
    • ื”ื–ืžื ื”::is_lt
    • ื”ื–ืžื ื”::is_gt
    • ื”ื–ืžื ื”::is_le
    • ื”ื–ืžื ื”::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_ืื•ืชื™ื•ืช ื’ื“ื•ืœื•ืช
    • OsStr::to_ascii_ืื•ืชื™ื•ืช ืงื˜ื ื•ืช
    • OsStr::to_ascii_ืื•ืชื™ื•ืช ื’ื“ื•ืœื•ืช
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • ืœื”ืฆืฆื”::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> ืขื‘ื•ืจ slice::IterMut
    • impl SliceIndex ืขื‘ื•ืจ (Bound , ื›ืจื•ืš )
    • Vec::extend_from_within
  • ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ืฉืœ ืชืžื™ื›ื” ื‘ืคืœื˜ืคื•ืจืžืช wasm64-unknown-unknown ื”ื•ื˜ืžืขื”. ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ื›ื•ืœืœืช ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช, ืคืจืกื•ื ื‘ื•ื ื™ื ืจืฉืžื™ื™ื ืื• ื‘ื“ื™ืงื” ืื ื ื™ืชืŸ ืœื‘ื ื•ืช ืืช ื”ืงื•ื“.
  • ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช ืฉืœ Cargo ื”ื•ืขื‘ืจ ืœื”ืฉืชืžืฉ ื‘ืฉื "ืจืืฉื™" ืขื‘ื•ืจ ื”ืกื ื™ืฃ ื”ืจืืฉื™ ืฉืœ ืžืื’ืจ Git (HEAD) ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืชืœื•ื™ื•ืช ื”ืžืชืืจื—ื•ืช ื‘ืžืื’ืจื™ื ื”ืžืฉืชืžืฉื™ื ื‘ืฉื main ื‘ืžืงื•ื master ื›ื‘ืจ ืœื ื“ื•ืจืฉื•ืช ื”ื’ื“ืจื” ืฉืœ branch = "main".
  • ื‘ืžื”ื“ืจ, ื”ื“ืจื™ืฉื•ืช ืœื’ืจืกื” ื”ืžื™ื ื™ืžืœื™ืช ืฉืœ LLVM ืžื•ืขืœื•ืช ืœ-LLVM 10.

ื‘ื ื•ืกืฃ, ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ืžืชืŸ ืžื™ืžื•ืŸ ืœืคื™ืชื•ื— ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก ืฉืœ ื›ืœื™ื ืœืคื™ืชื•ื— ืจื›ื™ื‘ื™ื ื‘ืฉืคืช Rust. ื”ืขื‘ื•ื“ื” ืชืชื‘ืฆืข ื‘ืžืกื’ืจืช ืคืจื•ื™ืงื˜ Prossimo ื‘ื—ืกื•ืช ืืจื’ื•ืŸ ISRG (Internet Security Research Group), ื”ืžื™ื™ืกื“ ืฉืœ ืคืจื•ื™ืงื˜ ื‘ื•ืื• ืœื”ืฆืคื™ืŸ ื•ืžืงื“ื HTTPS ื•ืคื™ืชื•ื— ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืœื”ื’ื‘ืจืช ื”ืื‘ื˜ื—ื” ืฉืœ ืžืจืฉืชืช. ื”ื›ืกืคื™ื ื™ืกื•ืคืงื• ืขืœ ื™ื“ื™ ื’ื•ื’ืœ, ืฉืชืฉืœื ืขื‘ื•ืจ ืขื‘ื•ื“ืชื• ืฉืœ ืžื™ื’ืœ ืื•ื’'ื“ื”, ืžื—ื‘ืจ ืคืจื•ื™ืงื˜ Rust-for-Linux. ื‘ืขื‘ืจ, ISRG ื•ื’ื•ื’ืœ ื›ื‘ืจ ืžื™ืžื ื• ืืช ื”ื™ืฆื™ืจื” ืฉืœ HTTP backend ื—ืœื•ืคื™ ืขื‘ื•ืจ ื›ืœื™ ื”ืฉื™ืจื•ืช curl ื•ืคื™ืชื•ื— ืฉืœ ืžื•ื“ื•ืœ TLS ื—ื“ืฉ ืขื‘ื•ืจ ืฉืจืช ื”-Apache http.

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

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

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

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