Programmeerimiskeele Rust 1.61 väljalaskmine

Üldotstarbelise programmeerimiskeele Rust 1.61 väljaanne, mis põhineb Mozilla projektil, kuid mille arendust juhib nüüd sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mäluga turvalisele töötlemisele ja pakub vahendeid kõrge üheaegse töötluse saavutamiseks, ilma et oleks vaja kasutusele võtta prügikoristajat ja runtime'i (runtime piirdub põhi-initialiseerimise ja standardraamatukogu toetamisega).

Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Põhilised uuendused:

  • Lisatud on võimalus määrata enda tagasikutsumise koode funktsioonist main. Alguses sai funktsioon main Rustis tagastada ainult tüüpi „()” (unit), mis alati näitas eduka lõpetamise staatust, kui arendaja ei kutsunud otseselt üles funktsiooni „process::exit(code)”. Rust 1.26 võimaldas ebastabiilse tüübi Termination abil funktsioonis main tagastada väärtusi „Ok” ja „Err”, mis vastavad EXIT_SUCCESS ja EXIT_FAILURE koodele C keeles. Rust 1.61 tõsteti tüüp Termination stabiilseks ning konkreetse tagasikutsumise koodi esitamiseks pakuti eraldi tüüpi ExitCode, mis abstraktsioneerib platvormispetsiifilised tagastatavad väärtused, pakkudes nii eelmääratletud konstante SUCCESS ja FAILURE kui ka meetodit From suvaliseks tagasikutsumise koodi tagastamiseks. use std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(42); } ExitCode::SUCCESS }
  • Lisafunktsioonide võimalused on stabiliseeritud, mis on määratletud väljendiga „const fn”, mida saab kutsuda mitte ainult tavapäraste funktsioonidena, vaid kasutada ka igas kontekstis konstantide asemel. Need funktsioonid arvutatakse koostamise etapis, mitte käitamise ajal, seetõttu kehtivad neile teatud piirangud, nagu näiteks ainult konstantidest lugemise võimalus. Uues versioonis on const-funktsioonide sees lubatud põhioperatsioonid funktsiooni pointeritega (lubatud on luua, edastada ja konverteerida pointereid, kuid funktsioonide kutsumine pointeri kaudu ei ole lubatud); tüübi piirangud (trait bounds) const-funktsioonide geneeriliste parameetrite osas, nagu T: Copy; dünaamiliselt hallatavad tüübid (dyn Trait); impl Trait tüübid funktsiooni argumentide ja tagastatud väärtuste jaoks.
  • Stdin, Stdout ja Stderr voogude deskriptorid std::io-s omavad nüüd staatilist eluiga („‘static”) lukustamisel, mis võimaldab kasutada struktuure nagu „let out = std::io::stdout().lock();” deskriptorite saamiseks ja lukustamise rakendamiseks ühes väljendis.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Write for Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Termination
    • std::thread::JoinHandle::is_finished
  • Konstantse märgendiga `const`, mis määrab võimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
    • ::offset ja ::offset
    • ::wrapping_offset ja ::wrapping_offset
    • ::add ja ::add
    • ::sub ja ::sub
    • ::wrapping_add ja ::wrapping_add
    • ::wrapping_sub ja ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

Lisaks võib mainida artiklit «Rust: A Critical Retrospective», mis kajastab muljeid Rusti keelest pärast 100 000 koodi rea kirjutamist mikrokernelilist operatsioonisüsteemi Xous arendamise käigus, mida kasutatakse püsivara. Puudusteks on keeruline süntaks, keele verbaalne lõpetamine ja edasiarendamine, korduvate kogumite puudumine, tüüpilised usaldusprobleemid Crates.io sõltuvustega, vajadus järgida kindlaid distsipliinine nõudeid turvalise koodi kirjutamiseks. Oodatust paremad võimalused on koodi refaktoreerimise tööriistad ja „hakkide“ ümbertegemine, mis on lisatud kiire prototüüpide loomise käigus.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster