Avaldatud programmikeele Rust 1.93 versioon, mis pĂ”hineb Mozilla projektidel, kuid mida arendab nĂŒĂŒd sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keel keskendub mĂ€lu ohutule kasutamisele ja pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, samas ilma prĂŒgikoristaja ja ajaloo (runtime on piirdunud pĂ”hialustamise ja standardraamatukogu hooldusega) kasutamiseta.
MÀluga töötamise meetodid Rust'is vabastavad arendajad pointerite manipulatsiooni vigadest ja kaitsevad neid probleemide eest, mis tulenevad madala taseme mÀlu haldamisest, nagu mÀlualale pÀrast selle vabastamist juurdepÀÀs, null-pointerite dereferentseerimine, puhverserveri piiridest vÀljumine jne. Raamatukogude levitamiseks, kokkupaneku tagamiseks ja sÔltuvuste haldamiseks arendatakse paketihaldurit Cargo. Raamatukogude majutamiseks toetatakse repoturite crates.io.
MĂ€luhĂŒgieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jĂ€lgimise, objektide eluaja (vaateala) arvestamise ja mĂ€lule juurdepÀÀsu korrektuse hindamise kaudu koodi tĂ€itmise ajal. Rust pakub ka vahendeid tĂ€isarvude ĂŒlevoolude vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mĂ”istet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade vĂ€hendamiseks.
Peamised uuendused:
- Rustiga kaasasolev standardne C-raamatukogu Musl, mida kasutatakse staatiliseks sidumiseks sihtplatvormidele "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl jne) sĂŒsteemides, kus Musl ei ole paigaldatud, on uuendatud versioonile 1.2.5. MiinimumnĂ”uded Musl-i versioonile dĂŒnaamilise sidumise korral on samuti tĂ”stetud versioonile 1.2.5. Varem kasutati Rustis Musl versiooni 1.2.3, mis sisaldas DNS-resolvaatori rakenduse meetoditega seotud probleeme. Musl versioonis 1.2.4 lisati DNS-resolvaatorisse vĂ”imalus saata pĂ€ring TCP kaudu juhul, kui UDP pĂ€rimise katse ebaĂ”nnestus, lahendades probleemid suurte DNS-kirjete pĂ€rimisega ja luues ĂŒhilduvuse rekursiivsete DNS-serveritega, mis ei toeta osaliste tulemuste tagastamist kĂ€rbitud UDP-vastustes. Musli versioonis 1.2.5 rakendati DNS-resolvaatoris pikkade CNAME-jĂ€rjestustega vastuste töötlemine ning lahendati probleem, mille tĂ”ttu mĂ”ned suuri TCP kaudu edastatud vastuseid kĂ”rvaldatud.
- Standardraamatukogu on ĂŒmber töötatud, et lahendada reentereerimisega seotud probleeme, mida pĂ”hjustavad Rustis kirjutatud globaalsete mĂ€lupiirkondade allocateerijate, makrode std::thread_local! ja funktsiooni std::thread::current kasutamine, mis viis lĂ”putu rekurssi. Selle olukorra vĂ€ltimiseks, kus std::thread_local! ja std::thread::current pĂŒĂŒdsid mĂ€lu allocateerimise ajal kutsuda sama allocateerijat, milles nad töötavad, kasutatakse nĂŒĂŒd otseselt sĂŒsteemi mĂ€lu allocateerimise mehhanismi.
- Asm! blokis sees koodiga on lubatud kasutada âcfgâ atribuute, mis vĂ”imaldab nĂ€iteks haldada CPU laiendatud kĂ€skude komplektide aktiveerimise protsessi asm-bloki sees olevate ĂŒksikute avalduste kontekstis (varem vĂ”idi âcfgâ atribuute mÀÀrata ainult kogu asm-blokki 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 );
- Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒbispetsiifikatsioonide 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 viidud teise toetuse tasemele, mis eeldab kogumise garantii olemasolu, kuid ei garanteeri testikomplekti lĂ€bitulekut.
Lisaks vÔib mÀrkida mitmeid Rustiga seotud projekte:
- Linuxi tuuma jaoks arendatakse Rexi raamistikku, mis vÔimaldab luua tuuma laiendusi Rusti keeles, mida saab kasutada tuuma funktsionaalsuse laiendamiseks eBPFi asemel. Rex pakub samu turvalisuse tagamise garantiisid nagu eBPF, kuid kasutab Rusti keele vÔimalusi ja kerget Runtime'i isolatsiooniks ja turvalisuse tagamiseks. Selliste programmide jaoks ei rakendata valideerijat ning programmid kompileeritakse Rusti kompilaatoriga natiivseks koodiks.
Rexi programmides on lubatud kasutada Rusti keele alamkogumit, mis tagab turvalisuse. Praeguses versioonis toetatakse 5 eBPF programmi tĂŒĂŒpi: kprobe, perf_event, tracepoint, xdp ja tc. On vĂ”imalik kutsuda ĂŒles abifunktsioone eBPF, suhelda eBPF kaardistruktuuridega, juhtida tuuma ressursse, töötleda erandeid ja kasutada tuuma struktuuride kohalduse ja abstraktsioonide ĂŒmbriseid.
- Fjall 3, Rustis kirjutatud sisseehitatud salvestuslahendus, mis töötab vĂ”tme-vÀÀrtuse andmeformaadiga, on nĂŒĂŒd saadaval. Andmete salvestamine toimub logifaile kasutades LSM-puude (Log-Structured-Merge) meetodil, nagu RocksDB-s, kus muutused kirjutatakse andmete lisamise kaudu faili lĂ”ppu. Andmebaasile pÀÀseb ligi BTreeMap stiilis API kaudu. Toetatakse selliseid vĂ”imalusi nagu nimed, otse- ja tagasivaatamine vahemike kaupa, sisseehitatud tihendus, serialiseeritavad tehingud, eraldi vĂ”tmete ja nende vĂ€ga suurte seotud vÀÀrtuste salvestamine, automaatne taustteenindus andmebaasile. Kood on avatud Apache 2.0 litsentsi all.
- Tor projekti on vĂ€lja andnud Arti 1.9.0, Tor tööriistakasti teostuse, mis on kirjutatud Rustis. Kui Arti kood saavutab taseme, mis suudab tĂ€ielikult asendada C keeles variandi, kavatsevad Tor arendajad anda Artile peamise Tor teostuse staatuse ja jĂ€rk-jĂ€rgult lĂ”petada C keeles teostuse toetamise. Uues versioonis jĂ€tkatakse relayde ja serverid directory authority (Direktiivautentsus) funktsionaalsuse teostamist, parendatud on dĂŒnaamiliselt mÀÀratud portide (proxy.socks_listen = "auto") toetust, lisatud on eksperimentaalne API onion-teenuste vĂ”tmete haldamiseks.
Allikas: opennet.ru
