Rust 1.34 programmeerimiskeele väljalase

Välja on antud Mozilla projekti poolt välja töötatud süsteemi programmeerimiskeel Rust 1.34. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja vahendit ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata.

Rusti automaatne mäluhaldus vabastab arendaja osutiga manipuleerimisest ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu järelvabad juurdepääsud mälule, null-osuti viited, puhvri ülekoormus jms. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks arendatakse projektis Cargo paketihaldurit, mis võimaldab saada programmi jaoks vajalikud teegid ühe klõpsuga. Hoidlat crates.io toetatakse teekide majutamiseks.

Peamised uuendused:

  • Cargo paketihaldurisse on lisatud tööriistad alternatiivsete pakiregistritega töötamiseks, mis võivad koos eksisteerida avaliku registriga crates.io. Näiteks saavad erarakenduste arendajad nüüd kasutada oma privaatset registrit, mida saab kasutada Cargo.tomlis sõltuvuste loetlemisel, ja kasutada oma toodete jaoks crates.io-ga sarnast versioonimudelit, samuti viidata nii crates.io-le kui ka crates.io-le sõltuvustes. oma registrisse.

    Välise registri lisamiseks faili ~/.cargo/config
    jaotises "[registrid]" on uus valik "minu-register" ja "[sõltuvused]" jaotises on lisatud valik "muu kasti", et mainida Cargo.tomli sõltuvustes olevat välist registrit. Täiendava registriga ühenduse loomiseks sisestage lihtsalt autentimisluba faili ~/.cargo/credentials ja käivitage käsk
    "cargo login --registry=my-register" ja paketi avaldamiseks -
    "lasti avaldamine --register=minu-register";

  • Lisatud on täielik tugi operaatori “?” kasutamiseks. doctestides, mis võimaldavad kasutada testidena dokumentatsioonist pärit näidiskoodi. Varem operaator
    "?" saab kasutada vigade käsitlemiseks testi täitmise ajal ainult siis, kui oli olemas funktsioon "fn main()" või funktsioonides "#[test]";

  • Protseduurimakrode abil määratletud kohandatud atribuutides on võimalik kasutada suvalisi märkide komplekte (“#[attr($tokens)]”, “#[attr[$tokens]] ja #[attr{$tokens}]”). Kui varem sai elemente määrata ainult puu-/rekursiivsel kujul, kasutades stringiliteraale, näiteks “#[foo(bar, baz(quux, foo = “bar”)]”, kuid nüüd on võimalik kasutada loendeid (' #[vahemik(0. .10)]') ja konstruktsioone nagu “#[bound(T: MyTrait)]”;
  • TryFromi ja TryInto tunnused on stabiliseeritud, võimaldades tüübikonversioone koos vigade käsitlemisega. Näiteks täisarvu tüüpidega meetodid nagu from_be_bytes kasutavad sisendina massiive, kuid andmed tulevad sageli Slice-tüüpi ning massiivide ja lõikude vahel teisendamine on käsitsi problemaatiline. Uute tunnuste abil saab määratud toimingu sooritada käigu pealt läbi .try_into() väljakutse, näiteks “let num = u32::from_be_bytes(slice.try_into()?)”. Alati edukate konversioonide jaoks (nt tüübist u8 kuni u32) on lisatud veatüüp eksimatu, et võimaldada
    TryFrom kõigi olemasolevate "From" rakenduste jaoks;

  • Aegunud on funktsioon CommandExt::before_exec, mis lubas käitleja käivitada enne exec-i, mis käivitati alamprotsessi kontekstis, mis moodustati pärast fork() kutset. Sellistel tingimustel võivad mõned vanemprotsessi ressursid, nagu failikirjeldused ja kaardistatud mälupiirkonnad, dubleerida, mis võib põhjustada määratlemata käitumist ja teekide ebaõiget toimimist.
    Enne_exec asemel on soovitatav kasutada ebaturvalist funktsiooni CommandExt::pre_exec.

  • Stabiliseeritud märgiga ja märgita aatomitäisarvude tüübid suurusega 8–64 bitti (näiteks AtomicU8), samuti märgiga tüübid NonZeroI[8|16|32|54|128].
  • API uus osa on viidud kategooriasse stabiilne, sealhulgas meetodid Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add |sub] ja SystemTime on stabiliseeritud ::checked_[add|sub]. Funktsioonid iter::from_fn ja iter::järglased on stabiliseeritud;
  • Kõikide täisarvutüüpide puhul on rakendatud meetodid checked_pow, saturating_pow, wrapping_pow ja overflowing_pow;
  • Lisatud on võimalus lubada optimeerimisi linkimisetapis, määrates ehitusvaliku "-C linker-plugin-lto" (rustc kompileerib Rust koodi LLVM bitkoodiks, mis võimaldab rakendada LTO optimeerimisi).

Allikas: opennet.ru

Lisa kommentaar