Avalikustatud programmeerimiskeele Rust 1.89 versioon, mille on loonud projekt Mozilla, kuid mida praegu arendab sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keele fookus on mĂ€lu ohutus ja see pakub tööriistu ĂŒlesannete kĂ”rge paralleelse tĂ€itmise saavutamiseks, ilma et oleks vaja prĂŒgikorjajat ja runtime'i (runtime piirdub pĂ”hialuste initsialiseerimise ja standardraamatukogu hooldamisega).
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:
- Antud on vĂ”imalus kasutada sĂŒmbolit â_â ĂŒldiste parameetrite argumentidena mĂ€rgiga âconstâ, et tuletada nende parameetrite vÀÀrtusi ĂŒmbritseva konteksti pĂ”hjal. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
- Lisatud uus lint-hoiatuse âmismatched_lifetime_syntaxesâ lahendamiseks, et kohtuda mitteilmselge eluea mÀÀratlemise probleemiga funktsioonide allkirjades, kasutades âeluea elimineerimiseâ mehhanismi (automaatne eluea tuvastamine linkides, vĂ”imaldades vĂ€ltida selle kĂ€sitsi mÀÀramist). Hoiatus kontrollib, et funktsiooni sisend- ja vĂ€ljundparameetrid kuuluvad ĂŒhte ja samasse tĂŒĂŒpide rĂŒhma. RĂŒhmad moodustatakse, tuginedes eluea selge mÀÀramise ja kompilaatori automaatse eluea tuletamise toele (nĂ€iteks tĂŒĂŒpides â&âa Tâ ja âContainsLifetime<âa>â vĂ”ib eluea mÀÀramine olla selge, kuid kompilaator ei pruugi automaatselt eluea tuletada, samas kui tĂŒĂŒpides â&Tâ, â&â_ Tâ ja âContainsLifetime<â_>â on lubatud nii selge mÀÀramine kui ka automaatne tuletamine).
- Attribuudis âtarget_featureâ x86 sĂŒsteemide jaoks on rakendatud vĂ”imalus kontrollida laiendatud kĂ€su komplektide sha512, sm3, sm4, kl ja widekl ning ka eraldi funktsioonide avx512 toetust. #[target_feature(enable = âavx512bwâ)] pub fn cool_simd_code(/* .. */) -> /* ⊠*/ { /* ⊠*/ }
- Tagatud on doctesti (dokumentatsiooni sisse ehitatud testid) kĂ€ivitamine mitte ainult praeguse sihtplatvormi jaoks, vaid ka muude platvormide jaoks, mis on mÀÀratud paketihalduri âcargoâ kĂ€ivitamisel (âcargo test âdoc âtarget other_targetâ).
- C funktsioonide âextern âCââ koostamisel sihtplatvormile âwasm32-unknown-unknownâ on rakendatud C ABI standard WebAssembly jaoks.
- MĂ”ningate tĂŒĂŒbikooskĂ”lastuse kohustuslike tingimustega on lubatud kasutada tĂŒĂŒpe i128 ja u128 vĂ€listes C funktsioonides (extern âCâ), mille puhul on varem esitatud lint-hoiatus âimproper_ctypes_definitionsâ.
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
- Paljusid kompilaatorisse sisseehitatud funktsioone (Intrinsics) x86 protsessori jaoks, sealhulgas AVX512, SHA512, SM3 ja SM4 funktsioone.
- NonZero<char>
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
MĂ€rkus 'const' rakendatud funktsioonides:
- <[T; N]>::as_mut_slice
- <[u8]>::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Alustati sihtplatvormi âx86_64-apple-darwinâ ĂŒleviimise protsessi esimesest toetuse tasemest teisele (Apple kavatseb lĂ”petada x86_64 arhitekti toetamise). Esimene toetuse tase eeldab binaarsete kogudeks koostamist, detailset testimist ja kĂ”rgeima toe garantii andmist platvormile â iga kompilaatori muudatus kontrollitakse tĂ€ieliku testikomplekti lĂ€bimisega. Teine toetuse tase tĂ€hendab kokkulepet kogumise osas, kuid testikomplekti lĂ€bimisel ei anta toetust.
- Kehtestatud on kolmas toetuse tase platvormidele âloongarch32-unknown-noneâ ja âloongarch32-unknown-none-softfloatâ. Kolmas tase tĂ€histab pĂ”hitoetust, kuid ilma automatiseeritud testimise, ametlike kogude avaldamise ja koodi komplekteerimise vĂ”imaluse kontrollita.
Lisaks on mĂ€rkimisvÀÀrsed Rusti seotud sĂŒndmused ja projektid:
- Avalikustatud Rusti pakettide seisundi aruanne Debianis. MĂ€rgitakse, et Debian Unstable (Sid) haru puhul umbes 8% src-pakettidest peavad olema seotud vĂ€hemalt ĂŒhe paketti âlibrust-*â ehitus sĂ”ltuvusteks. Debian 12 puhul oli selliseid pakette 4.5%. Samuti on tĂ”detud, et enam kui 3000 paketti sisaldavad Rusti keeles kirjutatud koodi, mis on eraldatud paketiks librust-..-dev, ning 150 src-paketid tarnivad kompileeritud tĂ€itmisfailid vĂ”i Rusti teegid.
Debianile huvi pakkuvatest pakettidest on mainitud sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d ja fish. Rusti valikuline toetus on rakendatud APT-s, QEMU (virtiofsd), Linuxi tuumas ja Mesas, ning oodatakse ka LibreOfficeâis. Crate-pakettide muundamise jaoks src-pakettide Debianisse on rakendatud debcargo tööriistakomplekt.
- Esitatud on projekt tmux-rs, mis arendab terminali multiplexeri tmuxi klooni (konsooliakende haldur), mis on kirjutatud Rustis C keelest.
- Collabora ettevÔtte draiveri Tyr arendaja avaldas artikli GPU level-i draiverite seadmetest ja Rusti keeles selliste draiverite arendamise pÔhimÔtetest.
- Esitletud on universaalne rakendus Rust keeles, mis suudab töötada nii CPU-l kui ka erinevatel GPU platvormidel: CUDA NVIDIA-le, SPIR-V Vulkan'i toetavatele GPU-dele, Metal Apple'ile, DirectX 12 Windows'ile, WebGPU brauseritele.
Allikas: opennet.ru
