Frigivelse af programmeringssproget Rust 1.75 og unikernel Hermit 0.6.7

Det generelle programmeringssprog Rust 1.75, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet frigivet. Sproget fokuserer på hukommelsessikkerhed og giver midlerne til at opnå høj jobparallelisme, samtidig med at man undgår brugen af ​​en skraldeopsamler og runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts hukommelseshåndteringsmetoder sparer udvikleren for fejl ved manipulation af pointere og beskytter mod problemer, der opstår på grund af hukommelseshåndtering på lavt niveau, såsom adgang til et hukommelsesområde efter det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, levere builds og administrere afhængigheder udvikler projektet Cargo Package Manager. Crates.io-lageret understøttes til hosting af biblioteker.

Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af ​​hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.

Vigtigste innovationer:

  • Tilføjet muligheden for at bruge "async fn" og "->impl Trait"-notationen i private træk. For eksempel, ved at bruge "->impl Trait" kan du skrive en egenskabsmetode, der returnerer en iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container til MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Du kan også oprette træk ved at bruge "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // vil blive udvidet til: // fn fetch(&self, url: Url) -> impl Future; }

  • Tilføjet API til beregning af byte-forskydninger i forhold til pointere. Når du arbejder med blottede pointere ("*const T" og "*mut T"), kan det være nødvendigt at foretage handlinger for at tilføje en offset til markøren. Tidligere var det muligt at bruge en konstruktion som "::add(1)" til at tilføje antallet af bytes svarende til størrelsen af ​​"size_of::()". Det nye API forenkler denne operation og gør det muligt at manipulere byte-forskydninger uden først at caste typerne til "*const u8" eller "*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
  • Fortsat arbejde for at øge ydeevnen af ​​rustc-kompileren. Tilføjet BOLT optimizer, som kører i post-link-stadiet og bruger information fra en på forhånd forberedt eksekveringsprofil. Brug af BOLT giver dig mulighed for at fremskynde compiler eksekvering med omkring 2% ved at ændre layoutet af librustc_driver.so bibliotekskoden for mere effektiv brug af processorens cache.

    Inkluderet bygning af rustc-kompileren med "-Ccodegen-units=1" mulighed for at forbedre kvaliteten af ​​optimering i LLVM. De udførte tests viser en stigning i ydeevnen i tilfælde af "-Ccodegen-units=1" build med ca. 1.5 %. De tilføjede optimeringer er kun aktiveret som standard for x86_64-unknown-linux-gnu-platformen.

    De tidligere nævnte optimeringer blev testet af Google for at reducere byggetiden for Android-platformskomponenter skrevet i Rust. Ved at bruge "-C codegen-units=1", når vi byggede Android, fik vi mulighed for at reducere størrelsen af ​​værktøjssættet med 5.5 % og øge dets ydeevne med 1.8 %, mens byggetiden for selve værktøjssættet næsten blev fordoblet.

    Aktivering af affaldsindsamling i forbindelse med link-tid ("--gc-sektioner") bragte ydeevneforøgelsen op til 1.9 %, muliggør optimering af forbindelsestid (LTO) op til 7.7 % og profilbaserede optimeringer (PGO) op til 19.8 %. I finalen blev der anvendt optimeringer ved hjælp af BOLT-værktøjet, som tillod stigningen i byggehastigheden til 24.7 %, men størrelsen af ​​værktøjssættet steg med 10.9 %.

    Frigivelse af programmeringssproget Rust 1.75 og unikernel Hermit 0.6.7

  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • Atomisk*::fra_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Option::as_slice
    • Option::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
  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i funktionerne:
    • Ipv6Addr::to_ipv4_mapped
    • Måske Uninit::assume_init_read
    • Måske Uninit::nulstillet
    • mem::diskriminerende
    • mem::nulstillet
  • Det tredje niveau af support er blevet implementeret for csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd og mipsel-unknown-netbsd platformene. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.

Derudover kan vi bemærke en ny version af Eremit-projektet, som udvikler en specialiseret kerne (unikernel), skrevet på Rust-sproget, som giver værktøjer til at bygge selvstændige applikationer, der kan køre oven på en hypervisor eller blottet hardware uden yderligere lag og uden operativsystem. Når den er bygget, er applikationen statisk forbundet med et bibliotek, som selvstændigt implementerer al den nødvendige funktionalitet uden at være bundet til OS-kernen og systembibliotekerne. Projektkoden er distribueret under Apache 2.0 og MIT-licenser. Assembly er understøttet til selvstændig udførelse af applikationer skrevet i Rust, Go, Fortran, C og C++. Projektet udvikler også sin egen bootloader, der giver dig mulighed for at starte Hermit ved hjælp af QEMU og KVM.

Kilde: opennet.ru

Tilføj en kommentar