Rust 1.34 Programming Language Release

nahitabo pagpagawas sa pinulongan sa sistema sa programming Taya 1.34, gimugna sa proyekto sa Mozilla. 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. Usa ka manedyer sa pakete ang gipalambo aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency sa proyekto. Cargo, nga nagtugot kanimo nga makuha ang mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang usa ka repository sa pag-host sa mga librarya crates.io.

nag-unang 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 idugang ang mga eksternal nga rehistro sa .cargo/config (naa sa $HOME o sa direktoryo sa package)
    gihatag seksyon "[registry]", ug sa paggamit sa usa ka eksternal nga registry, ang "registry" nga kapilian nagpakita sa paghulagway sa matag dependency sa Cargo.toml. 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 mga pagsulay mga doctest, 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 naandan nga mga hiyas nga gihubit gamit ang mga macros sa pamaagi gihatag ang abilidad sa paggamit sa 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)]”;
  • Gipalig-on nga mga tipo (trait) SulayiGikan ΠΈ TryInto, 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 tipo sa sayup ang gidugang Dili masayop, nagtugot sa transparent nga paggamit
    TryFrom para sa tanan nga naglungtad nga pagpatuman sa "Gikan";

  • Ang function wala na gamita CommandExt::before_exec, nga nagtugot sa usa ka handler nga ipatuman sa dili pa modagan nga exec, nga gipatuman sa konteksto sa usa ka proseso sa bata nga na-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.
    Kini girekomendar sa paggamit sa usa ka dili luwas nga function kay sa before_exec 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 usab sa gipirmahan nga mga tipo Dili ZeroI[8|16|32|64|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 katakus aron mahimo ang mga pag-optimize sa yugto sa pag-link pinaagi sa pagtino sa kapilian sa pagtukod nga "-C linker-plugin-lto".

Source: opennet.ru

Idugang sa usa ka comment