Rust 1.34 Programming Language Release

Ang sistema sa programming language nga Rust 1.34, nga gimugna sa proyekto sa Mozilla, gipagawas na. Ang lengguwahe nagtutok sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag ug paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga walay paggamit ug tigkolekta sa basura o runtime.

Ang awtomatik nga pagdumala sa memorya ni Rust nagpalingkawas sa developer gikan sa pagmaniobra sa pointer ug nanalipod batok sa mga problema nga naggikan sa ubos nga lebel sa pagmaniobra sa memorya, sama sa human-free nga memory access, null pointer dereferences, buffer overruns, ug uban pa. Aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager, nga nagtugot kanimo sa pagkuha sa mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Panguna nga mga inobasyon:

  • Ang tagdumala sa pakete sa Cargo adunay dugang nga mga himan aron magtrabaho kauban ang mga alternatibong mga rehistro sa pakete nga mahimong mag-uban sa crates.io public registry. Pananglitan, ang mga nag-develop sa proprietary nga mga aplikasyon mahimo nang mogamit sa ilang kaugalingon nga pribado nga rehistro, nga magamit kung maglista sa mga dependency sa Cargo.toml, ug mag-aplay usa ka modelo sa bersyon nga parehas sa crates.io alang sa ilang mga produkto, ingon usab mag-refer sa mga dependency sa duha nga mga crates. io ug sa imong kaugalingong rehistro.

    Aron makadugang ug eksternal nga rehistro sa ~/.cargo/config
    usa ka bag-ong kapilian nga "akong-rehistro" gihatag sa seksyon nga "[mga rehistro]", ug usa ka kapilian nga "other-crate" ang gidugang aron hisgutan ang gawas nga rehistro sa mga dependency sa Cargo.toml sa seksyon nga "[dependencies]". Aron makonektar sa dugang nga rehistro, ibutang lang ang authentication token sa ~/.cargo/credentials file ug padagana ang command
    "cargo login --registry=my-registry" ug sa pagmantala sa usa ka package -
    "cargo publish -registry=my-registry";

  • Gidugang ang bug-os nga suporta sa paggamit sa "?" operator. sa doctests, nga nagtugot kanimo sa paggamit sa pananglitan nga code gikan sa dokumentasyon isip mga pagsulay. Operator kaniadto
    "?" mahimong gamiton sa pagdumala sa mga kasaypanan atol sa pagsulay sa pagpatuman lamang sa presensya sa "fn main()" function o sa "#[test]" function;

  • Sa custom attributes nga gipasabot gamit ang procedural macros, posible nga mogamit ug arbitraryong set sa mga token (β€œ#[attr($tokens)]”, β€œ#[attr[$tokens]] ug #[attr{$tokens}]”). Kaniadto, ang mga elemento mahimo ra nga ipiho sa usa ka kahoy / recursive nga porma gamit ang mga literal nga string, pananglitan "#[foo(bar, baz(quux, foo = "bar"))]", apan karon posible na nga mogamit mga enumerasyon (' #[range(0. .10)]') ug mga construction sama sa β€œ#[bound(T: MyTrait)]”;
  • Ang TryFrom ug TryInto nga mga kinaiya na-stabilize, nga nagtugot sa mga pagkakabig sa tipo nga adunay pagdumala sa sayup. Pananglitan, ang mga pamaagi sama sa from_be_bytes nga adunay mga tipo nga integer naggamit sa mga arrays isip input, apan ang datos kasagaran moabut sa usa ka Slice type, ug ang pag-convert tali sa mga arrays ug slices usa ka problema nga buhaton sa mano-mano. Uban sa tabang sa bag-ong mga kinaiya, ang espesipikong operasyon mahimo sa langaw pinaagi sa usa ka tawag sa .try_into(), pananglitan, β€œlet num = u32::from_be_bytes(slice.try_into()?)”. Alang sa mga pagkakabig nga kanunay molampos (pananglitan, gikan sa tipo nga u8 hangtod sa u32), usa ka dili masayop nga tipo sa sayup ang gidugang aron tugutan ang transparent nga paggamit sa
    TryFrom para sa tanan nga naglungtad nga pagpatuman sa "Gikan";

  • Giwagtang ang CommandExt::before_exec function, nga nagtugot sa pagpatuman sa usa ka handler sa wala pa ang exec nga gipatuman sa konteksto sa proseso sa bata nga gi-forked human sa fork() nga tawag. Ubos sa ingon nga mga kondisyon, ang pipila ka mga kapanguhaan sa proseso sa ginikanan, sama sa mga deskriptor sa file ug mga lugar sa memorya sa mapa, mahimong madoble, nga mahimong mosangput sa dili matino nga pamatasan ug dili husto nga operasyon sa mga librarya.
    Imbis before_exec, girekomenda nga gamiton ang dili luwas nga function CommandExt::pre_exec.

  • Gipalig-on nga gipirmahan ug wala gipirmahan nga mga tipo sa atomic integer gikan sa 8 hangtod 64 bits (pananglitan, AtomicU8), ingon man ang mga pinirmahan nga tipo nga NonZeroI[8|16|32|54|128].
  • Usa ka bag-ong bahin sa API ang gibalhin sa stable nga kategorya, lakip ang Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] ug SystemTime nga mga pamaagi gi-stabilize ::checked_[add|sub]. Ang iter::from_fn ug iter::successors function na-stabilize;
  • Alang sa tanang matang sa integer, ang checked_pow, saturating_pow, wrapping_pow ug overflowing_pow nga mga pamaagi gipatuman;
  • Gidugang ang abilidad sa pag-enable sa mga pag-optimize sa yugto sa pag-link pinaagi sa pagtino sa "-C linker-plugin-lto" nga kapilian sa pagtukod (rustc nag-compile sa Rust code ngadto sa LLVM bitcode, nga nagtugot sa LTO optimizations nga magamit).

Source: opennet.ru

Idugang sa usa ka comment