Vrystelling van die programmeertaal Rust 1.75 en unikernel Hermit 0.6.7

Die algemene programmeertaal Rust 1.75, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.

Belangrikste innovasies:

  • Het die vermoë bygevoeg om "async fn" en die "->impl Trait"-notasie in private eienskappe te gebruik. Byvoorbeeld, deur gebruik te maak van "->impl Trait" kan jy 'n eienskapmetode skryf wat 'n iterator terugstuur: eienskap Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Jy kan ook eienskappe skep deur "async fn" te gebruik: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // sal uitgebrei word na: // fn fetch(&self, url: Url) -> impl Future; }

  • Bygevoeg API vir die berekening van byte offsets relatief tot wysers. Wanneer daar met blote wysers (“*const T” en “*mut T”) gewerk word, kan bewerkings vereis word om 'n offset by die wyser te voeg. Voorheen was dit moontlik om 'n konstruksie soos "::add(1)" te gebruik, deur die aantal grepe by te voeg wat ooreenstem met die grootte van "size_of::()". Die nuwe API vereenvoudig hierdie operasie en maak dit moontlik om grepafsettings te manipuleer sonder om eers die tipes na "*const u8" of "*mut u8" te gooi.
    • wyser::byte_add
    • wyser::byte_offset
    • wyser::byte_offset_from
    • wyser::byte_sub
    • wyser::wrapping_byte_add
    • wyser::wrapping_byte_offset
    • wyser::wrapping_byte_sub
  • Voortgesette werk om die werkverrigting van die rustc-samesteller te verhoog. Bygevoeg die BOLT optimizer, wat loop in die post-skakel stadium en gebruik inligting van 'n vooraf-voorbereide uitvoering profiel. Die gebruik van BOLT laat jou toe om samestelleruitvoering met ongeveer 2% te bespoedig deur die uitleg van die librustc_driver.so-biblioteekkode te verander vir meer doeltreffende gebruik van die verwerkerkas.

    Ingesluit die bou van die rustc samesteller met die "-Ccodegen-units=1" opsie om die kwaliteit van optimalisering in LLVM te verbeter. Die toetse wat uitgevoer is, toon 'n toename in prestasie in die geval van die “-Ccodegen-units=1” bou met ongeveer 1.5%. Die bygevoegde optimalisering is by verstek slegs geaktiveer vir die x86_64-unknown-linux-gnu-platform.

    Die voorheen genoemde optimerings is deur Google getoets om die boutyd van Android-platformkomponente wat in Rust geskryf is, te verminder. Die gebruik van “-C codegen-units=1” tydens die bou van Android het ons toegelaat om die grootte van die gereedskapstel met 5.5% te verminder en sy werkverrigting met 1.8% te verhoog, terwyl die boutyd van die gereedskapstel self amper verdubbel het.

    Deur skakeltyd-vullisversameling (“--gc-sections”) te aktiveer, het die prestasietoename tot 1.9% gebring, skakeltydoptimering (LTO) tot 7.7% moontlik gemaak, en profielgebaseerde optimaliserings (PGO) tot 19.8%. In die finaal is optimerings toegepas met behulp van die BOLT-hulpprogram, wat die toename in bouspoed tot 24.7% moontlik gemaak het, maar die grootte van die gereedskapstel het met 10.9% toegeneem.

    Vrystelling van die programmeertaal Rust 1.75 en unikernel Hermit 0.6.7

  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • Atoom*::van_ptr
    • FileTimes
    • FileTimesExt
    • Lêer::set_modified
    • Lêer::set_tye
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opsie::as_slice
    • Opsie::as_mut_slice
    • wyser::byte_add
    • wyser::byte_offset
    • wyser::byte_offset_from
    • wyser::byte_sub
    • wyser::wrapping_byte_add
    • wyser::wrapping_byte_offset
    • wyser::wrapping_byte_sub
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in funksies gebruik:
    • Ipv6Addr::to_ipv4_gekarteer
    • MaybeUninit::assume_init_read
    • Miskien Uninit::nul
    • mem :: diskriminant
    • mem::nul
  • Die derde vlak van ondersteuning is geïmplementeer vir die csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd en mipsel-unknown-netbsd platforms. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publisering van amptelike bouwerk, of kontrolering of die kode gebou kan word.

Daarbenewens kan ons kennis neem van 'n nuwe weergawe van die Hermit-projek, wat 'n gespesialiseerde kern (unikernel) ontwikkel, geskryf in die Rust-taal, wat gereedskap verskaf vir die bou van selfstandige toepassings wat bo-op 'n hipervisor of blote hardeware kan loop sonder bykomende lae en sonder 'n bedryfstelsel. Wanneer dit gebou is, is die toepassing staties gekoppel aan 'n biblioteek, wat onafhanklik al die nodige funksionaliteit implementeer, sonder om aan die OS-kern en stelselbiblioteke gekoppel te wees. Die projekkode word onder Apache 2.0- en MIT-lisensies versprei. Vergadering word ondersteun vir selfstandige uitvoering van toepassings geskryf in Rust, Go, Fortran, C en C++. Die projek ontwikkel ook sy eie selflaaiprogram wat jou toelaat om Hermit met behulp van QEMU en KVM te begin.

Bron: opennet.ru

Voeg 'n opmerking