Lansarea limbajului de programare Rust 1.75 și unikernel Hermit 0.6.7

A fost publicată lansarea limbajului de programare de uz general Rust 1.75, fondat de proiectul Mozilla, dar dezvoltat acum sub auspiciile organizației independente non-profit Rust Foundation. Limbajul se concentrează pe siguranța memoriei și oferă mijloacele pentru a obține un paralelism ridicat al jobului, evitând în același timp utilizarea unui colector de gunoi și a unui timp de rulare (timpul de rulare este redus la inițializarea de bază și întreținerea bibliotecii standard).

Metodele de manipulare a memoriei Rust salvează dezvoltatorul de erori la manipularea pointerilor și protejează împotriva problemelor care apar din cauza manipulării memoriei de nivel scăzut, cum ar fi accesarea unei zone de memorie după ce aceasta a fost eliberată, dereferențiarea pointerilor nuli, depășirile de buffer etc. Pentru a distribui biblioteci, a furniza versiuni și a gestiona dependențe, proiectul dezvoltă managerul de pachete Cargo. Depozitul crates.io este acceptat pentru găzduirea bibliotecilor.

Siguranța memoriei este furnizată în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectului, urmărirea duratelor de viață a obiectelor (sfere de aplicare) și evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, protecție împotriva depășirilor de numere întregi, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică implicit conceptul de referințe imuabile și variabile, oferă tastare statică puternică pentru a minimiza erorile logice.

Principalele inovații:

  • S-a adăugat capacitatea de a folosi „async fn” și notația „->impl Trait” în trăsăturile private. De exemplu, folosind „->impl Trait” puteți scrie o metodă de trăsătură care returnează un iterator: caracteristică Container { fn items(&self) -> impl Iterator; } impl Container pentru MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    De asemenea, puteți crea trăsături folosind „async fn”: caracteristică HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // va fi extins la: // fn fetch(&self, url: Url) -> impl Future; }

  • S-a adăugat API pentru calcularea decalajelor de octeți în raport cu pointerii. Când lucrați cu pointere goale („*const T” și „*mut T”), pot fi necesare operații pentru a adăuga un offset la indicator. Anterior, pentru aceasta era posibil să se folosească o construcție precum „::add(1)”, adăugând numărul de octeți corespunzător mărimii lui „size_of::()”. Noul API simplifică această operațiune și face posibilă manipularea decalajelor de octeți fără a turna mai întâi tipurile în „*const u8” sau „*mut u8”.
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Continuarea lucrărilor pentru creșterea performanței compilatorului rustc. S-a adăugat optimizatorul BOLT, care rulează în etapa post-link și utilizează informații dintr-un profil de execuție pregătit în prealabil. Folosirea BOLT vă permite să accelerați execuția compilatorului cu aproximativ 2% prin modificarea aspectului codului bibliotecii librustc_driver.so pentru o utilizare mai eficientă a memoriei cache a procesorului.

    A inclus construirea compilatorului rustc cu opțiunea „-Ccodegen-units=1” pentru a îmbunătăți calitatea optimizării în LLVM. Testele efectuate arată o creștere a performanței în cazul construcției „-Ccodegen-units=1” cu aproximativ 1.5%. Optimizările adăugate sunt activate implicit numai pentru platforma x86_64-unknown-linux-gnu.

    Optimizările menționate anterior au fost testate de Google pentru a reduce timpul de construire a componentelor platformei Android scrise în Rust. Utilizarea „-C codegen-units=1” la construirea Android ne-a permis să reducem dimensiunea setului de instrumente cu 5.5% și să creștem performanța acestuia cu 1.8%, în timp ce timpul de construire al setului de instrumente în sine aproape sa dublat.

    Activarea colectării gunoiului în timpul legăturilor („--gc-sections”) a adus un câștig de performanță cu până la 1.9%, permițând optimizarea timpului de legătură (LTO) cu până la 7.7% și optimizările bazate pe profil (PGO) până la 19.8% . În final, optimizările au fost aplicate folosind utilitarul BOLT, care a permis creșterea vitezei de construcție la 24.7%, dar dimensiunea setului de instrumente a crescut cu 10.9%.

    Lansarea limbajului de programare Rust 1.75 și unikernel Hermit 0.6.7

  • O nouă porțiune a API-ului a fost mutată în categoria de stabil, inclusiv metodele și implementările de trăsături au fost stabilizate:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opțiune::as_slice
    • Opțiune::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat în funcțiile:
    • Ipv6Addr::to_ipv4_mapped
    • PoateUninit::assume_init_read
    • PoateUninit::zeroed
    • mem::discriminant
    • mem::zeroed
  • Al treilea nivel de suport a fost implementat pentru platformele csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd și mipsel-unknown-netbsd. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.

În plus, putem remarca o nouă versiune a proiectului Hermit, care dezvoltă un nucleu specializat (unikernel), scris în limbajul Rust, care oferă instrumente pentru construirea de aplicații autonome care pot rula deasupra unui hypervisor sau hardware fără straturi suplimentare. și fără sistem de operare. Când este construită, aplicația este legată static la o bibliotecă, care implementează în mod independent toate funcționalitățile necesare, fără a fi legată de kernel-ul sistemului de operare și bibliotecile de sistem. Codul proiectului este distribuit sub licențe Apache 2.0 și MIT. Asamblarea este acceptată pentru execuția de sine stătătoare a aplicațiilor scrise în Rust, Go, Fortran, C și C++. Proiectul dezvoltă, de asemenea, propriul bootloader care vă permite să lansați Hermit folosind QEMU și KVM.

Sursa: opennet.ru

Adauga un comentariu