Rust 1.34 programmēŔanas valodas izlaidums

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

Pievieno komentāru