Avaldatud on programmeerimiskeele Rust 1.93 versioon, mille arendas vĂ€lja Mozilla, kuid mida arendab praegu sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keele fookus on mĂ€lu ohutusel ja see pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, vĂ€ltides samas prĂŒgi kogumise ja runtime'i (runtime piirdub pĂ”hialgse initsialiseerimise ja standardsed teegi hoidmisega).
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:
- Rusti vaikekomplektis on standardne C-kogumik Musl, mida kasutatakse staatilisel sidumisel sihttöötlusplatvormidele "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl jne) sĂŒsteemide puhul, kus Musl pole olemas, uuendatud versioonini 1.2.5. Minimum toetatav Musl versioon dĂŒnaamilisel sidumisel on samuti tĂ”stetud vĂ€ljaandele 1.2.5. Varasemalt kasutati Rustis Musl versiooni 1.2.3, milles esines DNS-resolveri rakendamise probleeme. Musl versioonis 1.2.4 lisati DNS-resolverisse vĂ”imalus edastada pĂ€ring TCP kaudu, kui UDP pĂ€ring ei Ă”nnestunud, mis lahendas probleemid suurte DNS-kirjete pĂ€rimisega ja parandas ĂŒhilduvust rekursiivsete DNS-serveritega, mis ei toeta osalise vastuse edastamist katkestatud UDP-vastustes. Musl versioonis 1.2.5 on DNS-resolveris rakendatud pika CNAME-jĂ€rjestuste vastuste töötlemine ja lahendatud probleem, mille tĂ”ttu lĂŒkati tagasi mĂ”ned suured vastused, mida edastati TCP kaudu.
- Standardteek on ĂŒmber töötatud, et lahendada probleemid, mis on seotud reenteraabiliteediga globaalsete mĂ€luallocatorite, mis on kirjutatud Rustis, std::thread_local! makrode ja std::thread::current funktsiooni kasutamisel, mis pĂ”hjustasid lĂ”pmatuid rekursioone. Olukorra vĂ€ltimiseks, kus std::thread_local! ja std::thread::current kutsusid mĂ€lu jagajat, milles nad olid kasutusel, rakendatakse nĂŒĂŒd otse sĂŒsteemi mĂ€lu eraldamise mehhanismi.
- Asm!-blokkide sees, kus on assemblerikood, on lubatud kasutada attribuutide «cfg», mis nÀiteks vÔimaldab hallata CPU laiendatud kÀskude komplektide aktiveerimist eraldi vÀljendite kontekstis asm-blokis (varem said atribuudid «cfg» olla mÀÀratud ainult kogu asm-bloki jaoks). asm!( // vÔi global_asm! vÔi naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // ⊠#[cfg(target_feature = "sse2")] a = const 123, // kasutatakse ainult sse2 );
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
- <[MaybeUninit]>::assume_init_drop
- <[MaybeUninit]>::assume_init_ref
- <[MaybeUninit]>::assume_init_mut
- <[MaybeUninit]>::write_copy_of_slice
- <[MaybeUninit]>::write_clone_of_slice
- String::into_raw_parts
- Vec::into_raw_parts
- ::unchecked_neg
- ::unchecked_shl
- ::unchecked_shr
- ::unchecked_shl
- ::unchecked_shr
- ::as_array
- ::as_array_mut
- ::as_array
- ::as_mut_array
- VecDeque::pop_front_if
- VecDeque::pop_back_if
- Duration::from_nanos_u128
- char::MAX_LEN_UTF8
- char::MAX_LEN_UTF16
- std::fmt::from_fn
- std::fmt::FromFn
- Sihtplatvorm «riscv64a23-unknown-linux-gnu» on tÔlgitud teisele toetuse tasemele, kus garantiiks on kompileerimise garantii, kuid pole garantiisid testide lÀbimise osas.
Lisaks vÔib nimetada mitmeid Rustiga seotud projekte:
- Linuxi tuumale arendatakse Rexi raamistikku, mis vÔimaldab luua tÀiustusi Linuxi tuumale Rusti keeles, mida saab kasutada tuuma funktsionaalsuse laiendamiseks, asendades eBPF. Rex pakub samu turvalisuse tagatisi nagu eBPF, kuid kasutab turvalisuse ja isolatsiooni tagamiseks Rusti keele vÔimalusi ning kerget kÀitusaja keskkonda. Selliste programmide puhul ei rakendata valideerijat ning programmid kompileeritakse Rusti kompilaatoriga masinakoodiks.
Rex-programmides on lubatud kasutada Rusti keele alammeetodit, mis tagab turvalisuse. Praegu toetatakse 5 tĂŒĂŒpi eBPF programme: kprobe, perf_event, tracepoint, xdp ja tc. On vĂ”imalik kutsuda eBPF abifunktsioone, suhelda eBPF map-struktuuridega, hallata tuuma ressursse, töödelda erandeid ning kasutada tuuma struktuuride peal abstraktsioone.
- Saadaolev on Fjall 3, Rustis kirjutatud manustatud salvestus, mis töötab vÔtme-vÀÀrtuse formaadis. Andmete salvestamine toimub logi kujul LSM-puu (Log-Structured-Merge) kasutamisega, nagu RocksDB-s, kus muudatused salvestatakse andmete lisamisega faili lÔppu. Andmebaasi juurde pÀÀsemiseks pakutakse BTreeMap stiilis API-d. Toetatakse selliseid funktsioone nagu nimedekonsoolid, otsing otse- ja tagasiviidelt vahemike kaupa, sisseehitatud kokkusurumine, seeriatavad tehingud, vÔtmete ja nendega seotud vÀga suurte vÀÀrtuste eraldi salvestamine ning automaatne andmebaasi taustahooldus. Kood on avatud Apache 2.0 litsentsi alusel.
- Tor projekti on avaldanud Arti 1.9.0 versiooni, mis on Tor tööriista rakendus, kirjutatud Rust keeles. Kui Arti kood saavutab taseme, mis suudab tĂ€ielikult asendada C keeles kirjutatud variandi, kavatsevad Tor arendajad anda Artile Tor'i peamise rakenduse staatuse ja jĂ€rk-jĂ€rgult lĂ”petada C variandi hooldamise. Uues versioonis jĂ€tkub funktsionaalsuse rakendamine reljee ja serverite direktorite (Directory Authority) jaoks, on paranenud tugi dĂŒnaamiliselt mÀÀratud portidele (proxy.socks_listen = "auto"), lisatud eksperimentaalne API onion-teenuste vĂ”tmete haldamiseks.
Allikas: opennet.ru
