Rust 1.61 programmeerimiskeele väljalase

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.61 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Põhifunktsioonist on võimalik defineerida oma tagastuskoodid. Algselt võis Rusti põhifunktsioon tagastada ainult tüübi "()" (ühik), mis näitas alati edukat väljumisolekut, välja arvatud juhul, kui arendaja nimetas selgelt funktsiooni "process::exit(code)". Versioonis Rust 1.26, kasutades põhifunktsioonis ebastabiilset lõpetamistunnust, oli võimalik tagastada väärtused “Ok” ja “Err”, mis vastavad C-programmide koodidele EXIT_SUCCESS ja EXIT_FAILURE. Versioonis Rust 1.61 on lõpetamistunnus muudetud stabiilseks ja konkreetse tagastuskoodi esindamiseks on pakutud välja eraldi tüüp ExitCode, mis võtab kokku platvormipõhised tagastustüübid, pakkudes nii eelmääratletud konstandid SUCCESS ja FAILURE, kui ka meetod From kohandatud tagastuskoodi tagastamiseks. kasuta std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Väljumiskood::SUCCESS }
  • Stabiliseeritud on avaldise “const fn” abil defineeritud funktsioonide lisavõimalused, mida ei saa nimetada mitte ainult tavalisteks funktsioonideks, vaid kasutada ka konstantide asemel mis tahes kontekstis. Neid funktsioone arvutatakse kompileerimise ajal, mitte käitusajal, seega kehtivad neile teatud piirangud, näiteks võimalus lugeda ainult konstantidest. Uues versioonis on põhitoimingud funktsiooniosutitega lubatud const funktsioonide sees (lubatud on osutite loomine, edastamine ja ülekandmine, kuid mitte osutiga funktsiooni kutsumine); tunnuspiirid const-funktsioonide üldiste parameetrite jaoks, nagu T: Kopeeri; dünaamiliselt edastatavad tunnused (dyn Trait); impl Funktsiooni argumentide ja tagastusväärtuste tunnuse tüübid.
  • Voog käsitleb Stdin, Stdout ja Stderr std::io-s on nüüd lukustatuna staatiline ("staatiline"), mis võimaldab selliseid konstruktsioone nagu "let out = std::io::stdout().lock();" käepideme saamisega ja luku seadmisega ühes väljendis.
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • Pin::static_mut
    • Pin::static_ref
    • Vana::retain_mut
    • VecDeque::retain_mut
    • Kirjuta kursori jaoks <[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::protsess::Lõpetamine
    • std::thread::JoinHandle::on_lõpetatud
  • Funktsioonides kasutatakse atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis:
    • <*const T>::offset ja <*mut T>::offset
    • <*const T>::wrapping_offset ja <*mut T>::wrapping_offset
    • <*const T>::add ja <*mut T>::add
    • <*const T>::sub ja <*mut T>::sub
    • <*const T>::wrapping_add ja <*mut T>::wrapping_add
    • <*const T>::wrapping_sub ja <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Lisaks võite märkida artiklit "Rust: kriitiline tagasivaade" koos Rusti keele muljete kokkuvõttega pärast seda, kui kirjutasite püsivaras kasutatava mikrokerneli operatsioonisüsteemi Xous väljatöötamise käigus sinna 100 tuhat koodirida. Puuduste hulka kuuluvad raskesti mõistetav süntaks, keele ebatäielikkus ja jätkuv arendamine, korratavate ehituste puudumine, tüüpilised probleemid Crates.io sõltuvuse usaldusega ja vajadus säilitada teatud distsipliini turvalise koodi kirjutamiseks. Funktsioonid, mis ületasid ootusi, hõlmavad tööriistu koodi ümberkujundamiseks ja kiire prototüüpimise käigus lisatud "häkkide" ümbertöötamiseks.

Allikas: opennet.ru

Lisa kommentaar