PublicÄts vispÄrÄjas nozÄ«mes programmÄÅ”anas valodas Rust 1.64 izlaidums, kas dibinÄts ar Mozilla projektu, bet tagad izstrÄdÄts neatkarÄ«gÄs bezpeļÅas organizÄcijas Rust Foundation paspÄrnÄ. Valoda koncentrÄjas uz atmiÅas droŔību un nodroÅ”ina lÄ«dzekļus, lai sasniegtu augstu darba paralÄlismu, vienlaikus izvairoties no atkritumu savÄcÄja un izpildlaika izmantoÅ”anas (izpildlaiks tiek samazinÄts lÄ«dz standarta bibliotÄkas pamata inicializÄÅ”anai un uzturÄÅ”anai).
Rust atmiÅas apstrÄdes metodes pasargÄ izstrÄdÄtÄju no kļūdÄm, manipulÄjot ar rÄdÄ«tÄjiem, un aizsargÄ pret problÄmÄm, kas rodas zema lÄ«meÅa atmiÅas apstrÄdes dÄļ, piemÄram, piekļūŔana atmiÅas apgabalam pÄc tÄ atbrÄ«voÅ”anas, nulles rÄdÄ«tÄju atsauÄu atcelÅ”ana, bufera pÄrtÄriÅi utt. Lai izplatÄ«tu bibliotÄkas, nodroÅ”inÄtu bÅ«vÄjumus un pÄrvaldÄ«tu atkarÄ«bas, projekts izstrÄdÄ Cargo pakotÅu pÄrvaldnieku. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
AtmiÅas droŔība tiek nodroÅ”inÄta Rust kompilÄÅ”anas laikÄ, pÄrbaudot atsauces, sekojot lÄ«dzi objekta Ä«paÅ”umtiesÄ«bÄm, sekojot lÄ«dzi objektu kalpoÅ”anas laikam (tvÄrumam) un novÄrtÄjot atmiÅas piekļuves pareizÄ«bu koda izpildes laikÄ. RÅ«sa arÄ« nodroÅ”ina aizsardzÄ«bu pret veselu skaitļu pÄrpildÄ«Å”anu, pieprasa obligÄtu mainÄ«go vÄrtÄ«bu inicializÄciju pirms lietoÅ”anas, labÄk apstrÄdÄ kļūdas standarta bibliotÄkÄ, pÄc noklusÄjuma piemÄro nemainÄ«gu atsauÄu un mainÄ«go jÄdzienu, piedÄvÄ spÄcÄ«gu statisko rakstÄ«Å”anu, lai samazinÄtu loÄ£iskÄs kļūdas.
Galvenie jauninÄjumi:
- PaaugstinÄtas prasÄ«bas Linux videi kompilatorÄ, Cargo pakotÅu pÄrvaldniekÄ un libstd standarta bibliotÄkÄ - minimÄlÄs prasÄ«bas Glibc ir paaugstinÄtas no versijas 2.11 uz 2.17, bet Linux kodolam no versijas 2.6.32 uz 3.2. Ierobežojumi attiecas arÄ« uz Rust lietojumprogrammu izpildÄmajiem failiem, kas izveidoti ar libstd. IzplatÄ«Å”anas komplekti RHEL 7, SLES 12-SP5, Debian 8 un Ubuntu 14.04 atbilst jaunajÄm prasÄ«bÄm. RHEL 6, SLES 11-SP4, Debian 7 un Ubuntu 12.04 atbalsts tiks pÄrtraukts. LietotÄji, kuri izmanto Rust-built izpildÄmos failus vidÄs ar vecÄku Linux kodolu, tiek mudinÄti jauninÄt savas sistÄmas, izmantot vecÄkus kompilatora laidienus vai uzturÄt savu libstd fork ar slÄÅiem, lai saglabÄtu saderÄ«bu.
Viens no iemesliem vecÄku Linux sistÄmu atbalsta pÄrtraukÅ”anai ir ierobežoti resursi, lai turpinÄtu uzturÄt saderÄ«bu ar vecÄkÄm vidÄm. Lai atbalstÄ«tu mantoto Glibc, ir jÄizmanto mantotie rÄ«ki, veicot pÄrbaudi nepÄrtrauktas integrÄcijas sistÄmÄ, Åemot vÄrÄ pieaugoÅ”Äs versijas prasÄ«bas LLVM un savstarpÄjÄs kompilÄcijas utilÄ«tprogrammÄs. Kodola versijas prasÄ«bu pieaugums ir saistÄ«ts ar iespÄju izmantot jaunus sistÄmas izsaukumus libstd bez nepiecieÅ”amÄ«bas uzturÄt slÄÅus, lai nodroÅ”inÄtu saderÄ«bu ar vecÄkiem kodoliem.
- IntoFuture iezÄ«me ir stabilizÄta, kas atgÄdina IntoIterator, bet atŔķiras no pÄdÄjÄs, izmantojot ".await", nevis "for ... in ..." cilpas. KombinÄcijÄ ar IntoFuture atslÄgvÄrdam ".await" var bÅ«t ne tikai nÄkotnes iezÄ«me, bet arÄ« citi veidi, kurus var pÄrvÄrst par nÄkotni.
- RÅ«sas analizatora utilÄ«ta ir iekļauta Rust izlaidumu utilÄ«tu kolekcijÄ. LietderÄ«ba ir pieejama arÄ« instalÄÅ”anai, izmantojot rustup (rustup komponents pievieno rÅ«sas analizatoru).
- Cargo pakotÅu pÄrvaldniekÄ ir iekļauta darbvietas mantoÅ”ana, lai novÄrstu kopÄjo lauku vÄrtÄ«bu dublÄÅ”anos starp pakotnÄm, piemÄram, Rust versijÄm un repozitorija URL. Pievienots arÄ« atbalsts vairÄku mÄrÄ·a platformu veidoÅ”anai vienlaikus (tagad opcijÄ ā--targetā varat norÄdÄ«t vairÄk nekÄ vienu parametru).
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp ir stabilizÄtas pazÄ«mju metodes un ievieÅ”anas:
- nÄkotne::IntoFuture
- num::NonZero*::checked_mul
- num::NonZero*::checked_pow
- num::NonZero*::saturating_mul
- num::NonZero*::saturating_pow
- num::NonZeroI*::abs
- num::NonZeroI*::checked_abs
- num::NonZeroI*::overflowing_abs
- num::NonZeroI*::saturating_abs
- num::NonZeroI*::unsigned_abs
- num::NonZeroI*::wrapping_abs
- num::NonZeroU*::checked_add
- num::NonZeroU*::checked_next_power_of_dwo
- num::NonZeroU*::saturating_add
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- Ar C saderÄ«gi tipi, kas iepriekÅ” stabilizÄti modulÄ« std::ffi, ir pievienoti kodolam un alloc bibliotÄkai:
- kodols::ffi::CStr
- kodols::ffi::FromBytesWithNulError
- alloc::ffi::CString
- aloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- aloc::ffi::NulError
- C tipi, kas iepriekÅ” stabilizÄti std::os::raw modulÄ«, ir pievienoti kodolam::ffi un std::ffi moduļiem (piemÄram, uint un ulong C tipiem ir piedÄvÄti c_uint un c_ulong tipi):
- ffi::c_char
- ffi::c_double
- ffi::c_float
- ffi::c_int
- ffi::c_long
- ffi::c_longlong
- ffi::c_schar
- ffi::c_short
- ffi::c_uchar
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ushort
- Zema lÄ«meÅa apstrÄdÄtÄji ir stabilizÄti lietoÅ”anai ar Poll mehÄnismu (nÄkotnÄ plÄnots nodroÅ”inÄt vienkÄrÅ”otu API, kas neprasa izmantot zema lÄ«meÅa struktÅ«ras, piemÄram, Pull and Pin):
- nÄkotne::poll_fn
- uzdevums::gatavs!
- AtribÅ«ts āconstā, kas nosaka iespÄju to izmantot jebkurÄ kontekstÄ konstantu vietÄ, tiek izmantots funkcijÄ slice::from_raw_parts.
- Lai kompaktÄk uzglabÄtu datus, ir mainÄ«ts Ipv4Addr, Ipv6Addr, SocketAddrV4 un SocketAddrV6 struktÅ«ru atmiÅas izkÄrtojums. Var rasties saderÄ«bas problÄma ar vienas kastes pakotnÄm, kas izmanto std::mem::transmute zema lÄ«meÅa manipulÄcijÄm ar struktÅ«rÄm.
- RÅ«sas kompilatora bÅ«vniecÄ«bÄ Windows platformai tiek izmantota PGO optimizÄcija (profila vadÄ«ta optimizÄcija), kas ļÄva palielinÄt koda kompilÄcijas veiktspÄju par 10ā20%.
- Kompilators ir ieviesis jaunu brÄ«dinÄjumu par neizmantotiem laukiem noteiktÄs struktÅ«rÄs.
TurklÄt varat atzÄ«mÄt statusa ziÅojumu par Rust valodas kompilatora alternatÄ«vas ievieÅ”anas izstrÄdi, ko sagatavojis projekts gccrs (GCC Rust) un kas apstiprinÄts iekļauÅ”anai GCC. PÄc priekÅ”gala integrÄÅ”anas standarta GCC rÄ«kus var izmantot, lai kompilÄtu programmas Rust valodÄ bez nepiecieÅ”amÄ«bas instalÄt rustc kompilatoru, kas izveidots, izmantojot LLVM izstrÄdes. KamÄr attÄ«stÄ«ba norisinÄs un izslÄdzot neparedzÄtas problÄmas, Rust priekÅ”gals tiks integrÄts GCC 13 laidienÄ, kas paredzÄts nÄkamÄ gada maijÄ. Rust GCC 13 ievieÅ”ana bÅ«s beta statusÄ, bet pÄc noklusÄjuma vÄl nav iespÄjota.
Avots: opennet.ru