Rust 1.58 Programming Language Release

Ang pagpagawas sa general-purpose programming language nga Rust 1.58, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag ug mga paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga walay paggamit ug tigkolekta sa basura o runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang awtomatik nga pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup kung nagmaniobra sa mga pointer ug nanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagmaniobra sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman pagkahuman na-freeze, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Panguna nga mga inobasyon:

  • Sa mga bloke sa pag-format sa linya, dugang pa sa naa na kaniadto nga abilidad sa pag-ilis sa mga variable nga klaro nga gilista pagkahuman sa linya sa numero ug ngalan, ang abilidad sa pag-ilis sa mga arbitraryong identifier pinaagi sa pagdugang sa ekspresyon nga "{identifier}" sa linya gipatuman. Pananglitan: // Gisuportahan kaniadto nga mga konstruksyon: println!("Hello, {}!", get_person()); println!("Kumusta, {0}!", get_person()); println!("Kumusta, {tawo}!", tawo = get_person()); // karon mahimo nimong ipiho ang let person = get_person(); println!("Hello, {tawo}!");

    Ang mga identifier mahimo usab nga ipiho direkta sa mga kapilian sa pag-format. let (lapad, katukma) = get_format(); kay (ngalan, score) sa get_scores() {println!("{ngalan}: {score:lapad$.precision$}"); }

    Ang bag-ong substitution naglihok sa tanang macros nga nagsuporta sa string format definition, gawas sa β€œpanic!” macro. sa 2015 ug 2018 nga bersyon sa Rust nga lengguwahe, diin ang kalisang!("{ident}") giisip nga usa ka regular nga string (sa Rust 2021 ang pag-ilis sa trabaho).

  • Ang kinaiya sa std::process::Command structure sa Windows platform giusab aron nga sa pagpatuman sa mga command, alang sa seguridad nga mga rason, dili na kini mangita alang sa executable files sa kasamtangan nga direktoryo. Ang kasamtangan nga direktoryo wala iapil tungod kay kini mahimong gamiton sa pagpatuman sa malisyosong code kon ang mga programa gipadagan sa dili kasaligang mga direktoryo (CVE-2021-3013). Ang bag-ong executable detection logic naglakip sa pagpangita sa Rust directory, application directory, Windows system directory, ug ang mga direktoryo nga gipiho sa PATH environment variable.
  • Ang standard nga librarya nagpalapad sa gidaghanon sa mga function nga gimarkahan nga "#[must_use]" aron mag-isyu og pasidaan kung ang pagbalik nga kantidad dili tagdon, nga makatabang sa pag-ila sa mga sayup nga gipahinabo sa paghunahuna nga ang usa ka function magbag-o sa mga kantidad imbis nga ibalik ang usa ka bag-ong kantidad.
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Opsyon::unwrap_unchecked
    • Resulta::unwrap_unchecked
    • Resulta::unwrap_err_unchecked
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbes nga mga constant, gigamit sa mga gimbuhaton:
    • Gidugayon::bag-o
    • Gidugayon::checked_add
    • Gidugayon::saturating_add
    • Gidugayon::checked_sub
    • Gidugayon::saturating_sub
    • Gidugayon::gisusi_mul
    • Gidugayon::saturating_mul
    • Gidugayon::checked_div
  • Gitugotan ang dereferencing sa "*const T" nga mga punto sa "const" nga konteksto.
  • Sa Cargo package manager, ang rust_version field gidugang sa package metadata, ug ang "--message-format" nga opsyon gidugang sa "cargo install" command.
  • Ang compiler nagpatuman sa suporta alang sa CFI (Control Flow Integrity) nga mekanismo sa pagpanalipod, nga nagdugang sa mga tseke sa dili pa ang matag dili direkta nga tawag aron mahibal-an ang pipila ka mga porma sa dili matino nga kinaiya nga posibleng mosangpot sa usa ka paglapas sa normal nga execution order (control flow) isip resulta sa paggamit sa mga pagpahimulos nga nagbag-o sa mga punto nga gitipigan sa memorya sa mga gimbuhaton.
  • Ang compiler adunay dugang nga suporta alang sa mga bersyon 5 ug 6 sa LLVM coverage nga format sa pagtandi, nga gigamit sa pagtimbang-timbang sa code coverage sa panahon sa pagsulay.
  • Sa compiler, ang mga kinahanglanon alang sa minimum nga bersyon sa LLVM gipataas ngadto sa LLVM 12.
  • Ang ikatulo nga lebel sa suporta alang sa x86_64-unknown-none nga plataporma gipatuman. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay, pagmantala sa opisyal nga pagtukod, o pagsusi kon ang code mahimo bang matukod.

Dugang pa, atong mamatikdan ang publikasyon sa Microsoft sa pagpagawas sa Rust alang sa Windows 0.30 nga mga librarya, nga nagtugot kanimo sa paggamit sa Rust nga pinulongan aron sa pagpalambo sa mga aplikasyon alang sa Windows OS. Ang set naglakip sa duha ka crate packages (windows ug windows-sys), diin imong ma-access ang Win API sa Rust nga mga programa. Ang code alang sa suporta sa API gihimo nga dinamikong gikan sa metadata nga naghulagway sa API, nga nagtugot kanimo sa pagpatuman sa suporta dili lamang alang sa kasamtangan nga mga tawag sa Win API, apan alang sa mga tawag nga makita sa umaabot. Ang bag-ong bersyon nagdugang suporta alang sa UWP (Universal Windows Platform) nga target nga plataporma ug nagpatuman sa mga tipo sa Handle ug Debug.

Source: opennet.ru

Idugang sa usa ka comment