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

ื”ืชืจื—ืฉ ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช ืžืขืจื›ืช ื—ืœื•ื“ื” 1.34, ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ ืžื•ื–ื™ืœื”. ื”ืฉืคื” ืžืชืžืงื“ืช ื‘ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ, ืžืกืคืงืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ ืื•ื˜ื•ืžื˜ื™, ื•ืžืกืคืงืช ืืžืฆืขื™ ืœื”ืฉื’ืช ืžืงื‘ื™ืœื™ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ืžืฉื™ืžื•ืช ืœืœื ืฉื™ืžื•ืฉ ื‘ืื•ืกืฃ ืืฉืคื” ืื• ื–ืžืŸ ืจื™ืฆื”.

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

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

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

    ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืจื™ืฉื•ื ื—ื™ืฆื•ื ื™ ืœ-.cargo/config (ื”ืžืžื•ืงื ื‘-$HOME ืื• ื‘ืกืคืจื™ื™ืช ื”ื—ื‘ื™ืœื•ืช)
    ืžืกื•ืคืง ืกืขื™ืฃ "[ืจื™ืฉื•ื]", ื•ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืจื™ืฉื•ื ื—ื™ืฆื•ื ื™, ื”ืืคืฉืจื•ืช "ืจื™ืฉื•ื" ื”ื•ืคื™ืขื” ื‘ืชื™ืื•ืจ ืฉืœ ื›ืœ ืชืœื•ืช ื‘-Cargo.toml. ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœืจื™ืฉื•ื ื ื•ืกืฃ, ืคืฉื•ื˜ ื”ืฆื‘ ืืช ืืกื™ืžื•ืŸ ื”ืื™ืžื•ืช ื‘ืงื•ื‘ืฅ ~/.cargo/credentials ื•ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื”
    "login cargo --registry=my-registry" ื•ื›ื“ื™ ืœืคืจืกื ื—ื‘ื™ืœื” -
    "cargo publish -registry=my-registry";

  • ื ื•ืกืคื” ืชืžื™ื›ื” ืžืœืื” ื‘ืฉื™ืžื•ืฉ ื‘ืื•ืคืจื˜ื•ืจ "?". ื‘ืžื‘ื—ื ื™ื ื“ื•ืงื˜ื•ืจื˜ื•ืช, ื”ืžืืคืฉืจ ืœืš ืœื”ืฉืชืžืฉ ื‘ืงื•ื“ ืœื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“ ื›ื‘ื“ื™ืงื•ืช. ื‘ืขื‘ืจ ืžืคืขื™ืœ
    "?" ื™ื›ื•ืœ ืœืฉืžืฉ ืœื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ื‘ื“ื™ืงื” ืจืง ื‘ื ื•ื›ื—ื•ืช ื”ืคื•ื ืงืฆื™ื” "fn main()" ืื• ื‘ืคื•ื ืงืฆื™ื•ืช "#[test]";

  • ื‘ืžืืคื™ื™ื ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ื”ืžื•ื’ื“ืจื™ื ื‘ืืžืฆืขื•ืช ืคืงื•ื“ื•ืช ืžืืงืจื• ืคืจื•ืฆื“ื•ืจืœื™ื•ืช ืžึฐืื•ึผื‘ื˜ึธื— ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ืงื‘ื•ืฆื•ืช ืฉืจื™ืจื•ืชื™ื•ืช ืฉืœ ืืกื™ืžื•ื ื™ื ("#[attr($tokens)]", "#[attr[$tokens]] ื•-#[attr{$tokens}]"). ื‘ืขื‘ืจ, ื ื™ืชืŸ ื”ื™ื” ืœืฆื™ื™ืŸ ืืœืžื ื˜ื™ื ืจืง ื‘ืฆื•ืจืช ืขืฅ/ืจืงื•ืจืกื™ื‘ื™ืช ื‘ืืžืฆืขื•ืช ืžื™ืœื•ืœื™ื•ืช ืฉืœ ืžื—ืจื•ื–ื•ืช, ืœืžืฉืœ "#[foo(bar, baz(quux, foo = "bar"))]", ืืš ื›ืขืช ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืกืคื™ืจื•ืช (' #[range(0. .10)]') ื•ืงื•ื ืกื˜ืจื•ืงืฆื™ื•ืช ื›ืžื• "#[bound(T: MyTrait)]";
  • ื˜ื™ืคื•ืกื™ื ืžื™ื•ืฆื‘ื™ื (ืชื›ื•ื ื”) ื ืกื” ืžืืช ะธ TryInto, ื”ืžืืคืฉืจ ื”ืžืจื•ืช ืกื•ื’ื™ื ืขื ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช. ืœื“ื•ื’ืžื”, ืฉื™ื˜ื•ืช ื›ืžื• from_be_bytes ืขื ืกื•ื’ื™ ืžืกืคืจ ืฉืœื ืžืฉืชืžืฉื•ืช ื‘ืžืขืจื›ื™ื ื›ืงืœื˜, ืื‘ืœ ื”ื ืชื•ื ื™ื ืžื’ื™ืขื™ื ืœืจื•ื‘ ื‘ืกื•ื’ Slice, ื•ื”ื”ืžืจื” ื‘ื™ืŸ ืžืขืจื›ื™ื ืœืคืจื•ืกื•ืช ื”ื™ื ื‘ืขื™ื™ืชื™ืช ืœื‘ืฆืข ื‘ืื•ืคืŸ ื™ื“ื ื™. ื‘ืขื–ืจืช ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช, ื ื™ืชืŸ ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื” ืฉืฆื•ื™ื ื” ืชื•ืš ื›ื“ื™ ืงืจื™ืื” ืœ-.try_into(), ืœืžืฉืœ, "let num = u32::from_be_bytes(slice.try_into()?)". ืขื‘ื•ืจ ื”ืžืจื•ืช ืฉืชืžื™ื“ ืžืฆืœื™ื—ื•ืช (ืœื“ื•ื’ืžื”, ืžืกื•ื’ u8 ืœ-u32), ื ื•ืกืฃ ืกื•ื’ ืฉื’ื™ืื” ื‘ืœืชื™ ืžืชืงื‘ืœ ืขืœ ื”ื“ืขืช, ื”ืžืืคืฉืจ ืฉื™ืžื•ืฉ ืฉืงื•ืฃ
    TryFrom ืขื‘ื•ืจ ื›ืœ ื”ื”ื˜ืžืขื•ืช ื”ืงื™ื™ืžื•ืช ืฉืœ "ืžืืช";

  • ื”ืคื•ื ืงืฆื™ื” ื”ื•ืฆืื” ืžืฉื™ืžื•ืฉ CommandExt::before_exec, ืฉืื™ืคืฉืจ ืœื”ืคืขื™ืœ ืžื˜ืคืœ ืœืคื ื™ ื”ืคืขืœืช exec, ืืฉืจ ื‘ื•ืฆืข ื‘ื”ืงืฉืจ ืฉืœ ืชื”ืœื™ืš ื™ืœื“ ืฉื—ื•ืœืง ืœืื—ืจ ื”ืงืจื™ืื” fork() . ื‘ืชื ืื™ื ื›ืืœื”, ื›ืžื” ืžืฉืื‘ื™ื ืฉืœ ืชื”ืœื™ืš ื”ืื‘, ื›ื’ื•ืŸ ืžืชืืจื™ ืงื‘ืฆื™ื ื•ืื–ื•ืจื™ ื–ื™ื›ืจื•ืŸ ืžืžื•ืคื™ื, ืขืœื•ืœื™ื ืœื”ืฉืชื›ืคืœ, ืžื” ืฉืขืœื•ืœ ืœื”ื•ื‘ื™ืœ ืœื”ืชื ื”ื’ื•ืช ืœื ืžื•ื’ื“ืจืช ื•ืœืคืขื•ืœื” ืœื ื ื›ื•ื ื” ืฉืœ ืกืคืจื™ื•ืช.
    ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” ืœื ื‘ื˜ื•ื—ื” ื‘ืžืงื•ื before_exec CommandExt::pre_exec.

  • ืกื•ื’ื™ ืžืกืคืจื™ื ืฉืœืžื™ื ืื˜ื•ืžื™ื™ื ืžื™ื•ืฆื‘ื™ื ื•ื‘ืœืชื™ ืžืกื•ืžื ื™ื ื‘ื’ื•ื“ืœ ืฉืœ ื‘ื™ืŸ 8 ืœ-64 ืกื™ื‘ื™ื•ืช (ืœื“ื•ื’ืžื”, AtomicU8), ื›ืžื• ื’ื ืกื•ื’ื™ื ื—ืชื•ืžื™ื NonZeroI[8|16|32|64|128].
  • ื—ืœืง ื—ื“ืฉ ืฉืœ ื”-API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื” ื”ื™ืฆื™ื‘ื”, ื›ื•ืœืœ Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] ื•ืฉื™ื˜ื•ืช SystemTime ื”ืชื™ื™ืฆื‘ื• ::checked_[add|sub]. ื”ืคื•ื ืงืฆื™ื•ืช iter::from_fn ื•ื”-iter::successors ื”ืชื™ื™ืฆื‘ื•;
  • ืขื‘ื•ืจ ื›ืœ ืกื•ื’ื™ ื”ืžืกืคืจื™ื ื”ืฉืœืžื™ื, ื”ืฉื™ื˜ื•ืช checked_pow, saturating_pow, wrapping_pow ื•-overflowing_pow ืžื™ื•ืฉืžื•ืช;
  • ื”ื•ืกืคื” ืืช ื”ื™ื›ื•ืœืช ืœืืคืฉืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื‘ืฉืœื‘ ื”ืงื™ืฉื•ืจ ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ืืคืฉืจื•ืช ื”ื‘ื ื™ื™ื” "-C linker-plugin-lto".

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

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