Rust 1.58 programavimo kalbos leidimas

Paskelbtas bendros paskirties programavimo kalbos Rust 1.58, įkurtos „Mozilla“ projekto, tačiau dabar sukurtos nepriklausomos ne pelno organizacijos „Rust Foundation“ globoje, leidimas. Kalba orientuota į atminties saugą, suteikia automatinį atminties valdymą ir suteikia priemones pasiekti aukštą užduočių lygiagretumą nenaudojant šiukšlių rinktuvo ar vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ automatinis atminties valdymas pašalina klaidas manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., prieigos prie atminties srities, kai ji buvo išlaisvinta, nulinių rodyklės nuorodų, buferio viršijimo ir kt. Bibliotekoms platinti, surinkimui užtikrinti ir priklausomybėms valdyti projekte kuriama Krovinių paketų tvarkyklė. Crates.io saugykla palaikoma bibliotekų prieglobai.

Pagrindinės naujovės:

  • Eilučių formatavimo blokuose, be anksčiau galimos galimybės pakeisti kintamuosius, aiškiai išvardytus po eilutės pagal skaičių ir pavadinimą, yra įdiegta galimybė pakeisti savavališkus identifikatorius, į eilutę įtraukiant išraišką „{identifikatorius}“. Pavyzdžiui: // Anksčiau palaikomos konstrukcijos: println!("Sveiki, {}!", get_person()); println!("Sveiki, {0}!", get_person()); println!("Sveikas, {asmuo}!", asmuo = get_person()); // dabar galite nurodyti leisti asmeniui = get_person(); println!("Sveikas, {asmuo}!");

    Identifikatorius taip pat galima nurodyti tiesiogiai formatavimo parinktyse. tegul (plotis, tikslumas) = ​​get_format(); for (vardas, balas) in get_scores() { println!("{name}: {score:width$.precision$}"); }

    Naujasis pakeitimas veikia visose makrokomandose, kurios palaiko eilutės formato apibrėžimą, išskyrus makrokomandą „panikos!“. 2015 ir 2018 m. Rust kalbos versijose, kuriose panika!("{ident}") traktuojama kaip įprasta eilutė (Rust 2021 pakeitimas veikia).

  • std::process::Command struktūra Windows platformoje buvo pakeista taip, kad vykdydama komandas saugumo sumetimais ji nebeieško vykdomųjų failų esamame kataloge. Dabartinis katalogas neįtraukiamas, nes jis gali būti naudojamas kenkėjiškam kodui vykdyti, jei programos vykdomos nepatikimuose kataloguose (CVE-2021-3013). Naujoji vykdomosios programos aptikimo logika apima Rust katalogų, programų katalogo, Windows sistemos katalogo ir PATH aplinkos kintamajame nurodytų katalogų paiešką.
  • Standartinė biblioteka išplėtė funkcijų, pažymėtų „#[must_use]“, skaičių, kad būtų pateiktas įspėjimas, jei grąžinama reikšmė nepaisoma, o tai padeda nustatyti klaidas, atsirandančias dėl to, kad funkcija pakeis reikšmes, o ne grąžins naują reikšmę.
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • Metaduomenys::is_symlink
    • Kelias::yra_symlink
    • {integer}::sotinantis_div
    • Parinktis::unwrap_unchecked
    • Rezultatas::unwrap_unchecked
    • Rezultatas::unwrap_err_unchecked
  • Atributas "const", kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijose:
    • Trukmė::nauja
    • Trukmė::checked_add
    • Trukmė::sotinamas_pridėjimas
    • Trukmė::checked_sub
    • Trukmė::sotinantis_sub
    • Trukmė::checked_mul
    • Trukmė::sotinamasis_mul
    • Trukmė::checked_div
  • Leidžiamas „*const T“ rodyklių nuorodų panaikinimas „const“ kontekstuose.
  • Krovinių paketų tvarkyklėje laukelis rust_version buvo įtrauktas į paketo metaduomenis, o parinktis „--message-format“ buvo įtraukta į komandą „cargo install“.
  • Kompiliatorius įgyvendina CFI (Control Flow Integrity) apsaugos mechanizmo palaikymą, kuris prideda patikrinimus prieš kiekvieną netiesioginį iškvietimą, kad nustatytų kai kurias neapibrėžtos elgsenos formas, kurios gali sukelti įprastos vykdymo tvarkos (valdymo srauto) pažeidimą dėl išnaudojimų, kurie keičia funkcijų atmintyje saugomas rodykles, naudojimas.
  • Kompiliatorius pridėjo LLVM aprėpties palyginimo formato 5 ir 6 versijų palaikymą, naudojamą kodo aprėpčiai įvertinti testavimo metu.
  • Kompiliatoriuje minimalios LLVM versijos reikalavimai pakelti iki 12 LLVM.
  • Įdiegtas trečiasis x86_64-unknown-none platformos palaikymo lygis. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo, oficialių versijų paskelbimo ar patikrinimo, ar kodą galima sukurti.

Be to, galime atkreipti dėmesį į Microsoft paskelbtą Rust for Windows 0.30 bibliotekų leidimą, leidžiantį naudoti Rust kalbą kuriant programas, skirtas Windows OS. Rinkinyje yra du dėžių paketai (windows ir windows-sys), per kuriuos galite pasiekti Win API Rust programose. API palaikymo kodas generuojamas dinamiškai iš API aprašančių metaduomenų, o tai leidžia įdiegti palaikymą ne tik esamiems Win API skambučiams, bet ir skambučiams, kurie pasirodys ateityje. Naujoji versija prideda UWP (Universal Windows Platform) tikslinės platformos palaikymą ir įdiegia Handle ir Debug tipus.

Šaltinis: opennet.ru

Добавить комментарий