Rust 1.58 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.58, fondita de la projekto Mozilla, sed nun disvolvita sub la aŭspicioj de la sendependa senprofita organizaĵo Rust Foundation, estis publikigita. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas la rimedojn por atingi altan taskoparalelecon sen uzado de rubkolektilo aŭ rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La aŭtomata memoradministrado de Rust eliminas erarojn dum manipulado de montriloj kaj protektas kontraŭ problemoj ekestiĝantaj de malalt-nivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Por distribui bibliotekojn, certigi kunigon kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Ĉefaj novigoj:

  • En linioformataj blokoj, krom la antaŭe havebla kapablo anstataŭigi variablojn eksplicite listigitajn post linio per nombro kaj nomo, la kapablo anstataŭigi arbitrajn identigilojn aldonante la esprimon "{identigilo}" al la linio estas efektivigita. Ekzemple: // Antaŭe subtenataj konstruoj: println!("Saluton, {}!", get_person()); println!("Saluton, {0}!", get_person()); println!("Saluton, {persono}!", person = get_person()); // nun vi povas specifi let person = get_person(); println!("Saluton, {persono}!");

    Identigiloj ankaŭ povas esti specifitaj rekte en formatopcioj. let (larĝo, precizeco) = get_format(); por (nomo, poentaro) en get_scores() { println!("{nomo}: {score:width$.precicision$}"); }

    La nova anstataŭigo funkcias en ĉiuj makrooj, kiuj subtenas difinon de ŝnuroformato, escepte de la makroo "paniko!" en la 2015 kaj 2018 versioj de la Rust-lingvo, en kiu paniko! ("{ident}") estas traktata kiel regula ĉeno (en Rust 2021 la anstataŭigo funkcias).

  • La konduto de la std::process::Komandstrukturo sur la Vindoza platformo estis ŝanĝita tiel ke dum plenumado de komandoj, pro sekurecaj kialoj, ĝi ne plu serĉas ruleblajn dosierojn en la nuna dosierujo. La nuna dosierujo estas ekskludita ĉar ĝi povus esti uzata por efektivigi malican kodon se programoj estas rulitaj en nefidindaj dosierujoj (CVE-2021-3013). La nova plenumebla detekta logiko implikas serĉi la Rust-dosierujojn, la aplikaĵan dosierujon, la Vindozan sisteman dosierujon kaj la dosierujojn specifitajn en la PATH-mediovariablo.
  • La norma biblioteko vastigis la nombron da funkcioj markitaj "#[devas_uzi]" por doni averton se la revena valoro estas ignorita, kio helpas identigi erarojn kaŭzitajn de supozado, ke funkcio ŝanĝos valorojn prefere ol redonos novan valoron.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • Metadatenoj::is_simligo
    • Path::is_simbolligo
    • {entjero}::saturating_div
    • Opcio::unwrap_unchecked
    • Rezulto::unwrap_unchecked
    • Rezulto::unwrap_err_unchecked
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcioj:
    • Daŭro::nova
    • Daŭro::checked_add
    • Daŭro::saturating_add
    • Daŭro::checked_sub
    • Daŭro::saturating_sub
    • Daŭro::checked_mul
    • Daŭro::saturating_mul
    • Daŭro::checked_div
  • Permesita dereferencing de "*const T" montriloj en "const" kuntekstoj.
  • En la administranto de Cargo-pakaĵo, la kampo rust_version estis aldonita al la metadatumoj de la pakaĵo, kaj la opcio "--message-format" aldoniĝis al la komando "kargo instali".
  • La kompililo efektivigas subtenon por la CFI (Control Flow Integrity) protekta mekanismo, kiu aldonas kontrolojn antaŭ ĉiu nerekta voko por detekti iujn formojn de nedifinita konduto kiu eble povus konduki al malobservo de la normala ekzekutordono (kontrolfluo) kiel rezulto de la uzo de ekspluatoj kiuj ŝanĝas montrilojn konservitajn en memoro pri funkcioj.
  • La kompililo aldonis subtenon por versioj 5 kaj 6 el la LLVM-priraportada komparformato, uzita por taksi kodpriraportadon dum testado.
  • En la kompililo, la postuloj por la minimuma versio de LLVM estas levitaj al LLVM 12.
  • La tria nivelo de subteno por la platformo x86_64-unknown-none estis efektivigita. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruaĵoj aŭ kontrolado ĉu la kodo povas esti konstruita.

Aldone, ni povas noti la publikigon de Mikrosofto de la liberigo de Rust por Vindozo 0.30-bibliotekoj, kiuj ebligas al vi uzi la Rust-lingvon por evoluigi aplikojn por la Vindoza OS. La aro inkluzivas du kestajn pakaĵojn (fenestroj kaj windows-sys), per kiuj vi povas aliri la Win API en Rust-programoj. Kodo por API-subteno estas generita dinamike de metadatenoj priskribantaj la API, kio ebligas al vi efektivigi subtenon ne nur por ekzistantaj Win API-vokoj, sed por vokoj, kiuj aperos estonte. La nova versio aldonas subtenon por la celplatformo UWP (Universala Vindoza Platformo) kaj efektivigas la Tenilon kaj Sencimigajn tipojn.

fonto: opennet.ru

Aldoni komenton