PublicÄts vispÄrÄjas nozÄ«mes programmÄÅ”anas valodas Rust 1.75 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:
- Pievienota iespÄja izmantot āasync fnā un apzÄ«mÄjumu ā->impl Traitā privÄtajÄs pazÄ«mÄs. PiemÄram, izmantojot ā->impl Traitā, varat uzrakstÄ«t pazÄ«mju metodi, kas atgriež iteratoru: trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }
Varat arÄ« izveidot pazÄ«mes, izmantojot "async fn": iezÄ«me HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // tiks paplaÅ”inÄts lÄ«dz: // fn fetch(&self, url: Url) -> impl Future; }
- Pievienots API baitu nobÄ«des aprÄÄ·inÄÅ”anai attiecÄ«bÄ pret rÄdÄ«tÄjiem. StrÄdÄjot ar tukÅ”iem rÄdÄ«tÄjiem (ā*const Tā un ā*mut Tā), var bÅ«t nepiecieÅ”amas darbÄ«bas, lai rÄdÄ«tÄjam pievienotu nobÄ«di. IepriekÅ” Å”im nolÅ«kam bija iespÄjams izmantot tÄdu konstrukciju kÄ ā::add(1)ā, pievienojot baitu skaitu, kas atbilst āsize_of::()ā izmÄram. JaunÄ API vienkÄrÅ”o Å”o darbÄ«bu un ļauj manipulÄt ar baitu nobÄ«dÄm, vispirms neapraidot tipus uz "*const u8" vai "*mut u8".
- rÄdÄ«tÄjs::baits_pievienot
- rÄdÄ«tÄjs::baitu_nobÄ«de
- pointer::byte_offset_from
- rÄdÄ«tÄjs::byte_sub
- rÄdÄ«tÄjs::wrapping_byte_add
- rÄdÄ«tÄjs::wrapping_byte_offset
- rÄdÄ«tÄjs::wrapping_byte_sub
- TurpinÄja darbu, lai palielinÄtu rustc kompilatora veiktspÄju. Pievienots BOLT optimizÄtÄjs, kas darbojas pÄcsaites posmÄ un izmanto informÄciju no iepriekÅ” sagatavota izpildes profila. Izmantojot BOLT, varat paÄtrinÄt kompilatora izpildi par aptuveni 2%, mainot bibliotÄkas koda librustc_driver.so izkÄrtojumu, lai efektÄ«vÄk izmantotu procesora keÅ”atmiÅu.
Iekļauts rustc kompilatora izveide ar opciju "-Ccodegen-units=1", lai uzlabotu optimizÄcijas kvalitÄti LLVM. Veiktie testi uzrÄda veiktspÄjas pieaugumu ā-Ccodegen-units=1ā bÅ«vÄjuma gadÄ«jumÄ par aptuveni 1.5%. PievienotÄs optimizÄcijas pÄc noklusÄjuma ir iespÄjotas tikai x86_64-unknown-linux-gnu platformai.
IepriekÅ” minÄtÄs optimizÄcijas Google testÄja, lai samazinÄtu Rust valodÄ rakstÄ«to Android platformas komponentu bÅ«vÄÅ”anas laiku. Izmantojot ā-C codegen-units=1ā, veidojot Android, ļÄva mums samazinÄt rÄ«kkopas izmÄru par 5.5% un palielinÄt tÄ veiktspÄju par 1.8%, savukÄrt paÅ”as rÄ«kkopas izveides laiks gandrÄ«z dubultojÄs.
IespÄjojot saiÅ”u laika atkritumu savÄkÅ”anu (ā--gc-sectionsā), veiktspÄja tika palielinÄta lÄ«dz 1.9%, iespÄjota saites laika optimizÄcija (LTO) lÄ«dz 7.7% un uz profilu balstÄ«ta optimizÄcija (PGO) lÄ«dz 19.8%. FinÄlÄ tika veikta optimizÄcija, izmantojot utilÄ«tu BOLT, kas ļÄva palielinÄt veidoÅ”anas Ätrumu lÄ«dz 24.7%, bet rÄ«kkopas izmÄrs palielinÄjÄs par 10.9%.
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp ir stabilizÄtas pazÄ«mju metodes un ievieÅ”anas:
- Atomic*::from_ptr
- FileTimes
- FileTimesExt
- Fails::set_modified
- Fails::set_times
- IpAddr::to_canonical
- Ipv6Addr::to_canonical
- Opcija::as_slice
- Opcija::as_mut_slice
- rÄdÄ«tÄjs::baits_pievienot
- rÄdÄ«tÄjs::baitu_nobÄ«de
- pointer::byte_offset_from
- rÄdÄ«tÄjs::byte_sub
- rÄdÄ«tÄjs::wrapping_byte_add
- rÄdÄ«tÄjs::wrapping_byte_offset
- rÄdÄ«tÄjs::wrapping_byte_sub
- AtribÅ«ts "const", kas nosaka iespÄju to izmantot jebkurÄ kontekstÄ konstantu vietÄ, tiek izmantots funkcijÄs:
- Ipv6Addr::to_ipv4_mapped
- MaybeUninit::assume_init_read
- MaybeUninit::nulle
- mem::diskriminants
- mem::nulle
- TreÅ”ais atbalsta lÄ«menis ir ieviests platformÄm csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd un mipsel-unknown-netbsd. TreÅ”ais lÄ«menis ietver pamata atbalstu, taÄu bez automatizÄtas testÄÅ”anas, oficiÄlu bÅ«vÄjumu publicÄÅ”anas un koda izveides pÄrbaudes.
TurklÄt mÄs varam atzÄ«mÄt jaunu projekta Hermit versiju, kas izstrÄdÄ specializÄtu kodolu (unikernel), kas rakstÄ«ts Rust valodÄ, nodroÅ”inot rÄ«kus autonomu lietojumprogrammu veidoÅ”anai, kas var darboties virs hipervizora vai tukÅ”as aparatÅ«ras bez papildu slÄÅiem. un bez operÄtÄjsistÄmas. Kad lietojumprogramma ir izveidota, tÄ ir statiski saistÄ«ta ar bibliotÄku, kas neatkarÄ«gi ievieÅ” visu nepiecieÅ”amo funkcionalitÄti, nesaistoties ar OS kodolu un sistÄmas bibliotÄkÄm. Projekta kods tiek izplatÄ«ts saskaÅÄ ar Apache 2.0 un MIT licencÄm. MontÄža tiek atbalstÄ«ta Rust, Go, Fortran, C un C++ valodÄ rakstÄ«tu lietojumprogrammu atseviŔķai izpildei. Projekts arÄ« izstrÄdÄ savu sÄknÄÅ”anas programmu, kas ļauj palaist Hermit, izmantojot QEMU un KVM.
Avots: opennet.ru