ProgrammēŔanas valodas Rust 1.75 un unikernel Hermit 0.6.7 izlaiŔana

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%.

    ProgrammēŔanas valodas Rust 1.75 un unikernel Hermit 0.6.7 izlaiŔana

  • 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

Pievieno komentāru