IznÄkusi Mozilla projekta izstrÄdÄtÄ sistÄmas programmÄÅ”anas valoda Rust 1.34. Valoda koncentrÄjas uz atmiÅas droŔību, nodroÅ”ina automÄtisku atmiÅas pÄrvaldÄ«bu un nodroÅ”ina iespÄju sasniegt augstu uzdevumu paralÄlismu, neizmantojot atkritumu savÄcÄju vai izpildlaiku.
Rust automÄtiskÄ atmiÅas pÄrvaldÄ«ba atbrÄ«vo izstrÄdÄtÄju no manipulÄcijÄm ar rÄdÄ«tÄju un aizsargÄ pret problÄmÄm, kas rodas no zema lÄ«meÅa atmiÅas manipulÄcijÄm, piemÄram, pÄc brÄ«vas piekļuves atmiÅai, nulles rÄdÄ«tÄja atsauÄu, bufera pÄrtÄriÅu un tamlÄ«dzÄ«gi. BibliotÄku izplatÄ«Å”anai, komplektÄÅ”anas nodroÅ”inÄÅ”anai un atkarÄ«bu pÄrvaldÄ«bai projektÄ tiek izstrÄdÄts Cargo pakotÅu pÄrvaldnieks, kas ļauj ar vienu klikŔķi iegÅ«t programmai nepiecieÅ”amÄs bibliotÄkas. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
Galvenie jauninÄjumi:
- Cargo pakotÅu pÄrvaldnieks ir pievienojis rÄ«kus darbam ar alternatÄ«viem pakotÅu reÄ£istriem, kas var pastÄvÄt kopÄ ar crates.io publisko reÄ£istru. PiemÄram, patentÄtu lietojumprogrammu izstrÄdÄtÄji tagad var izmantot savu privÄto reÄ£istru, ko var izmantot, uzskaitot atkarÄ«bas Cargo.toml, un piemÄrot saviem produktiem versiju veidoÅ”anas modeli, kas ir lÄ«dzÄ«gs crates.io, kÄ arÄ« norÄdÄ«t atkarÄ«bas uz abÄm kastÄm. io un savÄ reÄ£istrÄ.
Lai pievienotu ÄrÄju reÄ£istru ~/.cargo/config
sadaÄ¼Ä ā[reÄ£istri]ā ir nodroÅ”inÄta jauna opcija āmans reÄ£istrsā, un ir pievienota opcija āOther-crateā, lai pieminÄtu ÄrÄjo reÄ£istru Cargo.toml atkarÄ«bu sadaÄ¼Ä ā[atkarÄ«bas]ā. Lai izveidotu savienojumu ar papildu reÄ£istru, vienkÄrÅ”i ievietojiet autentifikÄcijas pilnvaru failÄ ~/.cargo/credentials un palaidiet komandu
"kravas login --registry=my-registry" un lai publicÄtu paketi -
"kravas publicÄt -reÄ£istrs=mans-reÄ£istrs"; - Pievienots pilns atbalsts operatora ā?ā izmantoÅ”anai. doctests, kas ļauj izmantot paraugkodu no dokumentÄcijas kÄ testus. IepriekÅ” operators
"?" var izmantot, lai apstrÄdÄtu kļūdas testa izpildes laikÄ tikai funkcijas āfn main()ā klÄtbÅ«tnÄ vai funkcijÄs ā#[test]ā; - PielÄgotajos atribÅ«tos, kas definÄti, izmantojot procesuÄlos makro, ir iespÄjams izmantot patvaļīgas marÄ·ieru kopas (ā#[attr($tokens)]ā, ā#[attr[$tokens]] un #[attr{$tokens}]ā). IepriekÅ” elementus varÄja norÄdÄ«t tikai koka/rekursÄ«vÄ formÄ, izmantojot virknes literÄļus, piemÄram, ā#[foo(bar, baz(quux, foo = ābarā)]ā, bet tagad ir iespÄjams izmantot uzskaitÄ«jumus (' #[diapazons(0. .10)]') un tÄdas konstrukcijas kÄ ā#[bound(T: MyTrait)]ā;
- TryFrom un TryInto iezÄ«mes ir stabilizÄtas, ļaujot pÄrveidot tipus ar kļūdu apstrÄdi. PiemÄram, tÄdas metodes kÄ from_be_bytes ar veselu skaitļu tipiem izmanto masÄ«vus kÄ ievadi, taÄu dati bieži tiek iegÅ«ti Slice veidÄ, un manuÄli konvertÄt starp masÄ«viem un slÄÅiem ir problemÄtiski. Ar jaunu pazÄ«mju palÄ«dzÄ«bu norÄdÄ«to darbÄ«bu var veikt lidojumÄ, izmantojot izsaukumu uz .try_into(), piemÄram, ālet num = u32::from_be_bytes(slice.try_into()?)ā. ReklÄmguvumiem, kas vienmÄr ir veiksmÄ«gi (piemÄram, no u8 lÄ«dz u32), ir pievienots kļūdas veids NekļūdÄ«gs, lai nodroÅ”inÄtu pÄrredzamu
TryFrom visÄm esoÅ”ajÄm "From" implementÄcijÄm; - Novecojusi funkcija CommandExt::before_exec, kas ļÄva izpildÄ«t apstrÄdÄtÄju pirms exec, kas tika izpildÄ«ts bÄrna procesa kontekstÄ, kas tika izveidots pÄc fork() izsaukuma. Å Ädos apstÄkļos daži vecÄkprocesa resursi, piemÄram, failu deskriptori un kartÄtÄs atmiÅas apgabali, var tikt dublÄti, kas var izraisÄ«t nedefinÄtu darbÄ«bu un nepareizu bibliotÄku darbÄ«bu.
Pirms_exec vietÄ ieteicams izmantot nedroÅ”o funkciju CommandExt::pre_exec. - StabilizÄtu zÄ«mju un nepazÄ«mju atomu veselu skaitļu tipi, kuru izmÄrs ir no 8 lÄ«dz 64 bitiem (piemÄram, AtomicU8), kÄ arÄ« zÄ«mju tipi NonZeroI[8|16|32|54|128].
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] un SystemTime metodes ir stabilizÄtas ::checked_[add|sub]. Funkcijas iter::from_fn un iter::successors ir stabilizÄtas;
- Visiem veselu skaitļu veidiem ir ieviestas metodes checked_pow, saturating_pow, wrapping_pow un overflowing_pow;
- Pievienota iespÄja iespÄjot optimizÄciju saistÄ«Å”anas posmÄ, norÄdot bÅ«vÄÅ”anas opciju ā-C linker-plugin-ltoā (rustc apkopo Rust kodu LLVM bitkodÄ, kas ļauj izmantot LTO optimizÄciju).
Avots: opennet.ru