Rust 1.58 programmeerimiskeele väljalase

Ilmus Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all arendatud üldotstarbelise programmeerimiskeele Rust 1.58 väljalase. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja pakub vahendeid ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata (käitusaeg taandub 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.

Peamised uuendused:

  • Reavormingu plokkides rakendatakse lisaks varem kättesaadavale võimalusele asendada rea ​​järel selgesõnaliselt loetletud muutujaid numbri ja nime järgi, võimalus asendada suvalisi identifikaatoreid, lisades reale avaldise “{identifier}”. Näiteks: // Varem toetatud konstruktsioonid: println!("Tere, {}!", get_person()); println!("Tere, {0}!", get_person()); println!("Tere, {inimene}!", inimene = hanki_inimene()); // nüüd saab määrata let person = get_person(); println!("Tere, {inimene}!");

    Identifikaatoreid saab määrata ka otse vormindamisvalikutes. let (laius, täpsus) = get_format(); for (nimi, tulemus) in get_scores() { println!("{nimi}: {score:width$. precision$}"); }

    Uus asendus töötab kõigis makrodes, mis toetavad stringivormingu määratlust, välja arvatud makro "paanika!". Rust keele 2015. ja 2018. aasta versioonides, milles paanikat!("{ident}") käsitletakse tavalise stringina (Rust 2021-s asendus toimib).

  • Windowsi platvormi std::process::käsustruktuuri käitumist on muudetud nii, et käskude täitmisel ei otsita turvakaalutlustel enam praegusest kataloogist käivitatavaid faile. Praegune kataloog on välistatud, kuna seda võidakse kasutada pahatahtliku koodi käivitamiseks, kui programme käitatakse ebausaldusväärsetes kataloogides (CVE-2021-3013). Uus käivitatava tuvastamise loogika hõlmab otsingut Rust kataloogidest, rakenduste kataloogist, Windowsi süsteemikataloogist ja PATH keskkonnamuutujas määratud kataloogidest.
  • Standardne teek on suurendanud funktsioonide arvu, mis on tähistatud "#[must_use]", et anda hoiatus, kui tagastatavat väärtust ignoreeritakse, mis aitab tuvastada vigu, mis on põhjustatud sellest, et funktsioon muudab väärtusi, mitte ei tagasta uut väärtust.
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • Metaandmed::is_symlink
    • Path::is_symlink
    • {täisarv}::küllastav_div
    • Valik::unwrap_unchecked
    • Tulemus::unwrap_unchecked
    • Tulemus::unwrap_err_unchecked
  • Funktsioonides kasutatakse atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis:
    • Kestus::uus
    • Kestus::kontrollitud_lisa
    • Kestus::küllastav_lisa
    • Kestus::checked_sub
    • Kestus::saturating_sub
    • Kestus::checked_mul
    • Kestus::saturating_mul
    • Kestus::checked_div
  • Lubatud "*const T" osutite viitamise tühistamine "const" kontekstis.
  • Cargo paketihalduris on paketi metaandmetele lisatud rust_version väli ja käsku “cargo install” valik “--message-format”.
  • Kompilaator toetab CFI (Control Flow Integrity) kaitsemehhanismi, mis lisab enne iga kaudset kõnet kontrolli, et tuvastada teatud määratlemata käitumise vorme, mis võivad potentsiaalselt viia tavapärase täitmisjärjekorra (juhtvoo) rikkumiseni. ärakasutamiste kasutamine, mis muudavad funktsioonide mällu salvestatud viiteid.
  • Kompilaator on lisanud toe LLVM-i leviala võrdlusvormingu versioonidele 5 ja 6, mida kasutatakse testimise ajal koodi katvuse hindamiseks.
  • Kompilaatoris tõstetakse LLVM-i miinimumversiooni nõuded tasemele LLVM 12.
  • Rakendatud on x86_64-unknown-none platvormi kolmas tugitase. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järelversioonide avaldamise või koodi loomiseta.

Lisaks võime märkida Microsofti väljaande Rust for Windows 0.30 teekide väljalaske kohta, mis võimaldab teil kasutada Rust keelt Windows OS-i rakenduste arendamiseks. Komplektis on kaks kastipaketti (windows ja windows-sys), mille kaudu pääseb Rust programmides ligi Win API-le. API-toe kood genereeritakse dünaamiliselt API-d kirjeldavate metaandmete põhjal, mis võimaldab teil rakendada tuge mitte ainult olemasolevatele Win API-kõnedele, vaid ka tulevikus ilmuvatele kõnedele. Uus versioon lisab UWP (Universal Windows Platform) sihtplatvormi toe ning rakendab Handle- ja Silumistüüpe.

Allikas: opennet.ru

Lisa kommentaar