Rust 1.45 programmeerimiskeele väljalase

avaldatud süsteemi programmeerimiskeele versioon 1.45 Rust, mille asutas Mozilla projekt. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja pakub tööriistu ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat ja runtime.

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. Arendatakse paketihaldurit teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks projekti kaudu. last, mis võimaldab hankida programmi jaoks vajalikud teegid ühe klõpsuga. Hoidlat toetatakse teekide hostimiseks crates.io.

Kõik uuendused:

  • Pikaajaline elimineeritud viga täisarvude ja ujukomaarvude teisendamisel. Kuna Rusti kompilaator kasutab taustaprogrammina LLVM-i, viidi tüübiteisendustoimingud läbi LLVM-i vahepealsete koodikäskude, näiteks fptoui, millel on üks oluline tunnus – määratlemata käitumine, kui saadud väärtus ei sobi sihttüübiga. Näiteks ujukväärtuse 300 tüübiga f32 teisendamisel täisarvu tüübiks u8 on tulemus ettearvamatu ja võib erinevates süsteemides erineda. Probleem on selles, et see funktsioon kuvatakse koodis, mis pole märgitud kui "ebaturvaline".

    Alates versioonist Rust 1.45 on tüübi suuruse ületäitumise käitumine rangelt reguleeritud ja teisendusoperatsioon "as" kontrollib ületäitumist ja sunnib teisendatava väärtuse sihttüübi maksimaalseks või minimaalseks väärtuseks (ülaltoodud näite puhul väärtus 300 teisendataks 255-ks). Selliste kontrollide keelamiseks pakutakse täiendavaid API kutseid „{f64, f32}::to_int_unchecked”, mis töötavad ebaturvalises režiimis.

    fn cast(x: f32) -> u8 {
    x nagu u8
    }

    fn main() {
    las liiga_suur = 300.0;
    olgu liiga_väike = -100.0;
    olgu nan = f32::NAN;

    olgu x: f32 = 1.0;
    las y: u8 = ebaturvaline { x.to_int_unchecked() };

    println!("liiga_suur_valatud = {}", cast(liiga_suur)); // väljund 255
    println!("too_small_casted = {}", cast(liiga_small)); // väljund 0
    println!("not_a_number_casted = {}", cast(nan)); // väljund 0
    }

  • Kasutage stabiliseeritult protseduurilised makrodfunktsioonilaadsed avaldised, mallid ja laused. Varem ei saanud selliseid makrosid igal pool välja kutsuda, vaid ainult teatud osades koodist (eraldi kõnena, mitte põimituna muu koodiga). Makrode kutsumisviisi laiendamine sarnaselt funktsioonidega oli üks veebiraamistiku toimimise nõudeid Rocket Rusti stabiilsetes väljaannetes. Varem oli Rocketis töötlejate määratlemisel täiendava paindlikkuse saavutamiseks vaja lubada eksperimentaalne funktsioon nimega "proc_macro_hygiene", mis pole Rusti stabiilsetes versioonides saadaval. See funktsioon on nüüd sisse ehitatud keele stabiilsetesse versioonidesse.
  • Lubatud kasutada vahemikke tüübiga „char”, et korrata vahemiku väärtusi (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    ch in ‘a’..=’z’ {
    print!("{}", ch);
    }
    println!(); // Trükib "abcdefghijklmnopqrstuvwxyz"

  • Uus osa API-sid on üle viidud stabiilsesse kategooriasse, sealhulgas stabiliseeritud
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Nõrk::as_ptr,
    rc::Nõrk::from_raw,
    rc::Nõrk::toores,
    str::riba_prefiks,
    str::riba_sufiks,
    sünkroonimine::Nõrk::as_ptr,
    sünkroonimine::Nõrk::from_raw,
    sünkroonimine::Nõrk::toores,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::protsess::CommandExt::arg0.

  • Rustc-kompilaator on lisanud toe erinevate sihtplatvormi funktsioonide alistamiseks, kasutades lipu "target-feature", näiteks "-C target-feature=+avx2,+fma". Lisatud on ka uued lipud:
    "force-unwind-tables" lahtikerimise kõnetabelite genereerimiseks, olenemata krahhi käsitlemise strateegiast; "embed-bitcode", et juhtida, kas LLVM-bitikood kaasatakse genereeritud rlib-idesse. Lipp "embed-bitcode" on Cargos vaikimisi lubatud, et optimeerida koostamisaega ja kettaruumi tarbimist.

  • Kolmas tugitase on pakutud platvormidele mipsel-sony-psp ja thumbv7a-uwp-windows-msvc. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimise ja ametlike ehituste avaldamiseta.

Lisaks võib märkida lugu kõige lihtsama loomise kohta rakendused Rust keeles, alustades süsteemi alglaaduri kasutamist ja valmis operatsioonisüsteemi asemel iseseisvaks laadimiseks.
Artikkel on esimene seeriast, mis on pühendatud madalatasemelise programmeerimise ja OS-i arendamisel nõutavate tehnikate tutvustamisele.

Allikas: opennet.ru

Lisa kommentaar