Käesolev versioon 1.63 on avaldatud Mozilla algatatud üldotstarbelise programmeerimiskeele Rust kohta, mille arendust toetab nüüd sõltumatu mittetulundusühing Rust Foundation. Keele fookus on mälu ohutu haldamine ja see pakub abinõusid kõrge paralleelsuse saavutamiseks ilma jäätmeprügimisse ja käitusajani (runtime, mis piirdub põhialuste initsialiseerimise ja standardraamatukogu haldamisega).
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 API std::thread::scope, mis võimaldab luua niidi seoseid nähtuse ulatuses (Scoped threads). Erinevalt varem saadaval olnud niitidest lubab uus API std::thread::scope edastada laenatud (borrowing) staatilisi andmeid, samas kui klassikalise API std::thread::spawn abil loodud niidid pidid omama kõiki edastatavaid argumente ja ei saanud vastu võtta laenatud muutujaid. API std::thread::scope tagab, et kõik loodud niidid lõpetatakse enne andmete tagastamist, tagades laenamise mehhanismi jaoks vajaliku turvalisuse.
- Uued failidesse kuvamise tüübid — BorrowedFd ja OwnedFd, mis tagavad laenamise ja omamise. Tüübid on märgistatud „#[repr(transparent)]”, mis võimaldab neid otse kasutada välistes C sidudes omamise arvestusega.
- Pakutakse võimalust kutsuda Condvar::new, Mutex::new ja RwLock::new konstandi kontekstis, et luua globaalsed staatilised väärtused Mutex, RwLock ja Condvar ilma lazy_static paketita.
- Funktsioonide jaoks, nagu fn foo(value: T, f: impl Copy), on lubatud kasutada süntaksit „foo::(3, 3)”, määrates selgelt generatsiooni tüübi.
- On lõpetatud üleminek NLL (Non-Lexical Lifetimes) tehnika kasutamisele muutuja laenamisprobleemide tuvastamiseks. NLL jälgib näitajate kogumist täitmisgraafikus, mis võimaldab parandada muutuja laenamise kontrolli (borrow checker) kvaliteeti ja lubada teatud tüüpi korrektsel koodil töötada, mille kasutamine varem põhjustas vea. Vanade mehhanismide, mis kasutasid lexikaalset taseme eluaegse seose sidet, tugi on nüüd rustc-st täielikult eemaldatud ning uut NLL on rakendatud laialdaselt.
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- array::from_fn
- Box::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- Path::try_exists
- Ref::filter_map
- RefMut::filter_map
- NonNull::::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
Allikas: opennet.ru
