Programmeerimiskeele Rust 2021 väljalase (1.56)

Ilmus Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all arendatud süsteemi programmeerimiskeele Rust 1.56 väljalase. Lisaks tavalisele versiooninumbrile on väljalase nimetus ka Rust 2021 ja see tähistab viimase kolme aasta jooksul kavandatud muudatuste stabiliseerumist. Rust 2021 on ka aluseks funktsionaalsuse suurendamisele järgmise kolme aasta jooksul, sarnaselt sellele, kuidas Rust 2018 väljalaskmine sai viimase kolme aasta jooksul keele arendamise aluseks.

Ühilduvuse säilitamiseks saavad arendajad kasutada oma programmides silte "2015", "2018" ja "2021", mis võimaldab programme linkida valitud Rusti väljaannetele vastavate keeleosudega. Väljaanded tutvustati ühildumatute muudatuste eraldamiseks ja konfigureeritakse kaubapakkide metaandmetes jaotise „[pakk]” välja „väljaanne” kaudu. Näiteks sisaldab 2018. aasta väljaanne funktsionaalsust, mis on stabiliseeritud 2018. aasta lõpu seisuga, ja hõlmab ka kõiki edasisi muudatusi, mis ei riku ühilduvust. 2021. aasta väljaanne sisaldab lisaks koostalitlusvõimet kahjustavaid funktsioone, mis on välja pakutud praeguses versioonis 1.56 ja heaks kiidetud tulevaseks rakendamiseks. Lisaks keelele endale võtavad toimetajad arvesse ka tööriistade ja dokumentatsiooni seisukorda.

Rust 2021 registreeritud peamised sobimatused:

  • Eraldi hõivamine sulgemistel – sulgemised saavad nüüd kogu identifikaatori asemel jäädvustada üksikute väljade nimesid. Näiteks "|| ax + 1" hõivab "a" asemel ainult "ax".
  • IntoIteratori tunnus massiivide jaoks: array.into_iter() võimaldab teil itereerida massiivi elemente väärtuste, mitte viidete järgi.
  • Avaldiste „|” töötlemist on makro_reeglites muudetud (Tõve VÕI) mustrites – vastete spetsifikaator ":pat" arvestab nüüd "A | B".
  • Kaubapaketi haldur sisaldab vaikimisi funktsioonide lahendaja teist versiooni, mille tugi ilmus versioonis Rust 1.51.
  • Eelmängu standardse teegi moodulisse on lisatud tunnused TryFrom, TryInto ja FromIterator.
  • Panic!(..) ja assert!(expr, ..) makrod kasutavad nüüd stringide vormindamiseks alati form_args!(..) sarnaselt println!()-ga.
  • Avaldised ident#, ident»..." ja ident'...' on keele süntaksis reserveeritud.
  • Teisaldati hoiatused bare_trait_objects ja ellipsis_inclusive_range_patterns vigadesse.

Uus versioonis Rust 1.56:

  • Cargo.tomli jaotisesse “[pakett]” on lisatud rooste versiooni väli, mille kaudu saate määrata kastipaketi jaoks minimaalselt toetatud Rusti versiooni. Kui praegune versioon ei vasta määratud parameetrile, lõpetab Cargo töö ja veateate.
  • Mustri sobitamisel "binding @ pattern" avaldiste abil pakutakse täiendavate sidumiste määramist (näiteks "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vana::kahaneb
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Funktsioonides kasutatakse atribuuti “const”, mis määrab võimaluse kasutada konstantide asemel mis tahes kontekstis
    • std::mem::transmute
    • [T]::esimene
    • [T]::jaga_esimene
    • [T]::viimane
    • [T]::lõigatud_viimane
  • Kompilaator on lülitatud kasutama LLVM-i versiooni 13.
  • Teine tugitase on rakendatud platvormidele aarch64-apple-ios-sim ja kolmas tase powerpc-unknown-freebsd ja riscv32imc-esp-espidf platvormidele. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järelversioonide avaldamise või koodi loomiseta.

Tuletame meelde, et Rust on keskendunud mälu ohutusele, pakub automaatset mäluhaldust ja vahendit töö teostamisel suure paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti automaatne mäluhaldus välistab osutitega manipuleerimisel tekkivad vead ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu mälupiirkonnale juurdepääs pärast selle vabastamist, null-osuti viited, puhvri ületamised jne. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks arendatakse projektis Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Allikas: opennet.ru

Lisa kommentaar