Izdaja programskega jezika Rust 1.58

Izšla je izdaja splošnega programskega jezika Rust 1.58, ki ga je zasnoval projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralnika smeti ali izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred napakami pri manipulaciji s kazalci in ščiti pred težavami, ki nastanejo zaradi manipulacije s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Glavne novosti:

  • V blokih za oblikovanje vrstic je poleg predhodno razpoložljive zmožnosti zamenjave spremenljivk, izrecno navedenih za vrstico s številko in imenom, implementirana možnost zamenjave poljubnih identifikatorjev z dodajanjem izraza "{identifier}" v vrstico. Na primer: // Prej podprte konstrukcije: println!("Pozdravljeni, {}!", get_person()); println!("Pozdravljeni, {0}!", get_person()); println!("Pozdravljeni, {oseba}!", oseba = get_person()); // zdaj lahko določite let person = get_person(); println!("Pozdravljeni, {oseba}!");

    Identifikatorje je mogoče določiti tudi neposredno v možnostih oblikovanja. let (širina, natančnost) = get_format(); za (ime, rezultat) v get_scores() { println!("{name}: {score:width$.precision$}"); }

    Nova zamenjava deluje v vseh makrih, ki podpirajo definicijo zapisa niza, z izjemo makra »panic!«. v različicah jezika Rust 2015 in 2018, v katerih je panic!("{ident}") obravnavan kot običajni niz (v Rust 2021 zamenjava deluje).

  • Vedenje strukture std::process::Command na platformi Windows je bilo spremenjeno tako, da pri izvajanju ukazov iz varnostnih razlogov ne išče več izvršljivih datotek v trenutnem imeniku. Trenutni imenik je izključen, ker bi se lahko uporabil za izvajanje zlonamerne kode, če se programi izvajajo v nezaupljivih imenikih (CVE-2021-3013). Nova logika zaznavanja izvršljivih datotek vključuje iskanje po imenikih Rust, imeniku aplikacij, sistemskem imeniku Windows in imenikih, navedenih v spremenljivki okolja PATH.
  • Standardna knjižnica je razširila število funkcij, označenih z "#[must_use]", da izdajo opozorilo, če je vrnjena vrednost prezrta, kar pomaga prepoznati napake, ki nastanejo zaradi domneve, da bo funkcija spremenila vrednosti, namesto da bi vrnila novo vrednost.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Rezultat::unwrap_unchecked
    • Rezultat::unwrap_err_unchecked
  • Atribut "const", ki določa možnost uporabe v katerem koli kontekstu namesto konstant, se uporablja v funkcijah:
    • Trajanje::novo
    • Trajanje::preverjeno_dodaj
    • Trajanje::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Trajanje::preverjeno_mul
    • Trajanje::saturating_mul
    • Trajanje::preverjeno_div
  • Dovoljeno dereferenciranje kazalcev "*const T" v kontekstih "const".
  • V upravitelju paketov Cargo je bilo polje rust_version dodano v metapodatke paketa, možnost »--message-format« pa je bila dodana ukazu »cargo install«.
  • Prevajalnik implementira podporo za zaščitni mehanizem CFI (Control Flow Integrity), ki dodaja preverjanja pred vsakim posrednim klicem za odkrivanje nekaterih oblik nedefiniranega vedenja, ki bi lahko povzročilo kršitev običajnega vrstnega reda izvajanja (pretok nadzora) kot rezultat uporaba podvigov, ki spreminjajo kazalce, shranjene v pomnilniku, na funkcije.
  • Prevajalnik je dodal podporo za različici 5 in 6 formata primerjave pokritosti LLVM, ki se uporablja za ocenjevanje pokritosti kode med testiranjem.
  • V prevajalniku so zahteve za minimalno različico LLVM povišane na LLVM 12.
  • Implementirana je tretja raven podpore za platformo x86_64-unknown-none. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.

Poleg tega lahko opazimo, da je Microsoft objavil izdajo knjižnic Rust za Windows 0.30, ki vam omogočajo uporabo jezika Rust za razvoj aplikacij za operacijski sistem Windows. V kompletu sta dva crate paketa (windows in windows-sys), preko katerih lahko dostopate do Win API v programih Rust. Koda za podporo API-ju se generira dinamično iz metapodatkov, ki opisujejo API, kar vam omogoča implementacijo podpore ne samo za obstoječe klice API-ja Win, ampak tudi za klice, ki se bodo pojavili v prihodnosti. Nova različica dodaja podporo za ciljno platformo UWP (Universal Windows Platform) in izvaja vrste Handle in Debug.

Vir: opennet.ru

Dodaj komentar