Rust 1.34 programmēŔanas valodas izlaidums

notika sistēmas programmÄ“Å”anas valodas izlaidums 1.34. rÅ«sa, ko izstrādājis Mozilla projekts. 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. Tiek izstrādāts pakotņu pārvaldnieks, lai izplatÄ«tu bibliotēkas, nodroÅ”inātu montāžu un pārvaldÄ«tu projekta atkarÄ«bas. krava, kas ļauj ar vienu klikŔķi iegÅ«t programmai nepiecieÅ”amās bibliotēkas. Repozitorijs tiek atbalstÄ«ts bibliotēku mitināŔanai crates.io.

Galvenais jauninājumiem:

  • 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ējos reģistrus failam .cargo/config (atrodas $HOME vai pakotņu direktorijā)
    nodroÅ”ināta sadaļā ā€œ[reÄ£istri]ā€, un, lai izmantotu ārējo reÄ£istru, katras atkarÄ«bas aprakstā Cargo.toml ir parādÄ«jusies opcija ā€œreÄ£istrsā€. 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. testos doktesti, ļaujot kā testus izmantot parauga kodu no dokumentācijas. 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āgotos atribÅ«tos, kas definēti, izmantojot procesuālos makro nodroÅ”ināta iespēja 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)]ā€;
  • Stabilizētie veidi (Ä«paŔība) Mēģiniet no Šø TryInto, kas ļauj veikt tipu konvertÄ“Å”anu 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 tipa u8 uz u32), ir pievienots kļūdas veids Nevainojams, kas nodroÅ”ina caurspÄ«dÄ«gu lietoÅ”anu
    TryFrom visām esoŔajām "From" implementācijām;

  • Funkcija ir novecojusi CommandExt::before_exec, kas ļāva izpildÄ«t apstrādātāju pirms exec palaiÅ”anas, 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Ŕu funkciju CommandExt::pre_exec.

  • Stabilizēti ar parakstu un neparakstÄ«tu atomu veselu skaitļu veidi, kuru izmērs ir no 8 lÄ«dz 64 bitiem (piemēram, AtomicU8), kā arÄ« parakstÄ«tos veidus NonZeroI[8|16|32|64|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ā€.

Avots: opennet.ru

Pievieno komentāru