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

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

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

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

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

  • ื”ื“ืจื™ืฉื•ืช ืœืกื‘ื™ื‘ืช ืœื™ื ื•ืงืก ื‘ืงื•ืžืคื™ื™ืœืจ, ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช Cargo ื•ืกืคืจื™ื™ืช ื”ืชืงืŸ libstd ื”ื•ื’ื“ืœื• - ื”ื“ืจื™ืฉื•ืช ื”ืžื™ื ื™ืžืœื™ื•ืช ืœ-Glibc ื”ื•ืขืœื• ืžื’ืจืกื” 2.11 ืœ-2.17, ื•ืงืจื ืœ ืœื™ื ื•ืงืก ืžื’ืจืกื” 2.6.32 ืœ-3.2. ื”ื”ื’ื‘ืœื•ืช ื—ืœื•ืช ื’ื ืขืœ ืงื•ื‘ืฆื™ ื”ืคืขืœื” ืฉืœ ื™ื™ืฉื•ืžื™ Rust ืฉื ื‘ื ื• ืขื libstd. ืขืจื›ื•ืช ื”ื”ืคืฆื” RHEL 7, SLES 12-SP5, Debian 8 ื•ืื•ื‘ื•ื ื˜ื• 14.04 ืขื•ืžื“ื•ืช ื‘ื“ืจื™ืฉื•ืช ื”ื—ื“ืฉื•ืช. ืชื•ืคืกืง ื”ืชืžื™ื›ื” ืขื‘ื•ืจ RHEL 6, SLES 11-SP4, Debian 7 ื•-Ubuntu 12.04. ืžืฉืชืžืฉื™ื ืฉืžืฉืชืžืฉื™ื ื‘ืงื•ื‘ืฆื™ ื”ืคืขืœื” ืฉื ื‘ื ื• Rust ื‘ืกื‘ื™ื‘ื•ืช ืขื ืœื™ื‘ืช ืœื™ื ื•ืงืก ื™ืฉื ื” ื™ื•ืชืจ, ืžื•ืžืœืฅ ืœืฉื“ืจื’ ืืช ื”ืžืขืจื›ื•ืช ืฉืœื”ื, ืœื”ื™ืฉืืจ ื‘ืžื”ื“ื•ืจื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ ืฉืœ ื”ืžื”ื“ืจ, ืื• ืœืฉืžื•ืจ ืขืœ libstd fork ืžืฉืœื”ื ืขื ืฉื›ื‘ื•ืช ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ืชืื™ืžื•ืช.

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

  • ื”ืชื›ื•ื ื” IntoFuture ื”ืชื™ื™ืฆื‘ื”, ื”ื“ื•ืžื” ืœ-IntoIterator, ืืš ืฉื•ื ื” ืžื”ืื—ืจื•ืŸ ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืœื•ืœืื•ืช ".await" ื‘ืžืงื•ื "for ... in ...". ื‘ืฉื™ืœื•ื‘ ืขื IntoFuture, ืžื™ืœืช ื”ืžืคืชื— ".await" ื™ื›ื•ืœื” ืœืฆืคื•ืช ืœื ืจืง ืœืชื›ื•ื ื” ืขืชื™ื“ื™ืช, ืืœื ื’ื ืœื›ืœ ืกื•ื’ ืื—ืจ ืฉื ื™ืชืŸ ืœื”ืžื™ืจ ืœืขืชื™ื“.
  • ื›ืœื™ ื”ืขื–ืจ ืœื ืชื— ื—ืœื•ื“ื” ื›ืœื•ืœ ื‘ืื•ืกืฃ ื›ืœื™ ื”ืขื–ืจ ืฉืกื•ืคืงื• ืขื ืžื”ื“ื•ืจื•ืช ื—ืœื•ื“ื”. ื”ืฉื™ืจื•ืช ื–ืžื™ืŸ ื’ื ืœื”ืชืงื ื” ื‘ืืžืฆืขื•ืช Rustup (ืจื›ื™ื‘ ื”ื—ืœื•ื“ื” ื”ื•ืกืฃ ืžื ืชื— ื—ืœื•ื“ื”).
  • ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช Cargo ื›ื•ืœืœ ื”ื•ืจืฉืช ืกื‘ื™ื‘ืช ืขื‘ื•ื“ื” ื›ื“ื™ ืœืžื ื•ืข ื›ืคื™ืœื•ืช ืฉืœ ืขืจื›ื™ ืฉื“ื•ืช ื ืคื•ืฆื™ื ื‘ื™ืŸ ื—ื‘ื™ืœื•ืช, ื›ื’ื•ืŸ ื’ืจืกืื•ืช Rust ื•ื›ืชื•ื‘ื•ืช URL ืฉืœ ืžืื’ืจ. ื ื•ืกืคื” ื’ื ืชืžื™ื›ื” ื‘ื‘ื ื™ื™ื” ืขื‘ื•ืจ ืžืกืคืจ ืคืœื˜ืคื•ืจืžื•ืช ื™ืขื“ ื‘ื• ื–ืžื ื™ืช (ื›ืขืช ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื™ื•ืชืจ ืžืคืจืžื˜ืจ ืื—ื“ ื‘ืืคืฉืจื•ืช "--target").
  • ื—ืœืง ื—ื“ืฉ ืฉืœ ื”-API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื” ืฉืœ ื™ืฆื™ื‘, ื›ื•ืœืœ ื”ืฉื™ื˜ื•ืช ื•ื”ื™ื™ืฉื•ื ืฉืœ ืชื›ื•ื ื•ืช ื”ืชื™ื™ืฆื‘ื•:
    • future::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • ืกื•ื’ื™ื ืชื•ืืžื™ C, ืฉื™ื•ืฆื‘ื• ื‘ืขื‘ืจ ื‘ืžื•ื“ื•ืœ std::ffi, ื ื•ืกืคื• ืœืœื™ื‘ื” ื•ืœืกืคืจื™ื™ืช alloc:
    • core::ffi::CSr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CSstring
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • ืกื•ื’ื™ C ืฉื™ื•ืฆื‘ื• ื‘ืขื‘ืจ ื‘ืžื•ื“ื•ืœ std::os::raw ื ื•ืกืคื• ืœืžื•ื“ื•ืœ ื”ืœื™ื‘ื”::ffi ื•-std::ffi (ืœื“ื•ื’ืžื”, ืกื•ื’ื™ c_uint ื•-c_ulong ื”ื•ืฆืขื• ืขื‘ื•ืจ ืกื•ื’ื™ uint ื•-ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_short
  • ืžื˜ืคืœื™ื ื‘ืจืžื” ื ืžื•ื›ื” ื”ืชื™ื™ืฆื‘ื• ืœืฉื™ืžื•ืฉ ืขื ืžื ื’ื ื•ืŸ ื”- Poll (ื‘ืขืชื™ื“ ืžืชื•ื›ื ืŸ ืœืกืคืง API ืคืฉื•ื˜ ืฉืื™ื ื• ืžืฆืจื™ืš ืฉื™ืžื•ืฉ ื‘ืžื‘ื ื™ื ื‘ืจืžื” ื ืžื•ื›ื” ื›ื’ื•ืŸ Pull and Pin):

    • future::poll_fn
    • ืžืฉื™ืžื”::ืžื•ื›ื ื”!
  • ื”ืชื›ื•ื ื” "const", ื”ืงื•ื‘ืขืช ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื›ืœ ื”ืงืฉืจ ื‘ืžืงื•ื ื‘ืงื‘ื•ืขื™ื, ืžืฉืžืฉืช ื‘ืคื•ื ืงืฆื™ื” slice::from_raw_parts.
  • ืขืœ ืžื ืช ืœืื—ืกืŸ ื ืชื•ื ื™ื ื‘ืฆื•ืจื” ืงื•ืžืคืงื˜ื™ืช ื™ื•ืชืจ, ืคืจื™ืกืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื”ืžื‘ื ื™ื Ipv4Addr, Ipv6Addr, SocketAddrV4 ื•-SocketAddrV6 ืฉื•ื ืชื”. ื™ื™ืชื›ืŸ ืฉื™ืฉ ื‘ืขื™ื™ืช ืชืื™ืžื•ืช ืขื ื—ื‘ื™ืœื•ืช ืืจื’ื– ื‘ื•ื“ื“ ื”ืžืฉืชืžืฉื•ืช ื‘-std::mem::transmute ืขื‘ื•ืจ ืžื ื™ืคื•ืœืฆื™ื” ื‘ืจืžื” ื ืžื•ื›ื” ืฉืœ ืžื‘ื ื™ื.
  • ื‘ื ื™ื™ืช ืžื”ื“ืจ ื”ื—ืœื•ื“ื” ืœืคืœื˜ืคื•ืจืžืช Windows ืžืฉืชืžืฉืช ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืฉืœ PGO (ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžื•ื ื—ื™ืช ืคืจื•ืคื™ืœ), ืฉืื™ืคืฉืจื” ืœื”ื’ื“ื™ืœ ืืช ื‘ื™ืฆื•ืขื™ ื”ื™ื“ื•ืจ ื”ืงื•ื“ ื‘-10-20%.
  • ื”ืžื”ื“ืจ ื™ื™ืฉื ืื–ื”ืจื” ื—ื“ืฉื” ืœื’ื‘ื™ ืฉื“ื•ืช ืฉืื™ื ื ื‘ืฉื™ืžื•ืฉ ื‘ืžื‘ื ื™ื ืžืกื•ื™ืžื™ื.

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

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

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