Izdanje programskog jezika Rust 1.75 i unikernela Hermit 0.6.7

Objavljeno je izdanje Rust 1.75 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Dodata je mogućnost korištenja “async fn” i “->impl Trait” notacije u privatnim osobinama. Na primjer, koristeći “->impl Trait” možete napisati metodu osobine koja vraća iterator: Trait Container { fn items(&self) -> impl Iterator; } impl Kontejner za MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Također možete kreirati karakteristike koristeći "async fn": osobina HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // će biti proširen na: // fn fetch(&self, url: Url) -> impl Future; }

  • Dodan API za izračunavanje pomaka bajtova u odnosu na pokazivače. Kada radite sa golim pokazivačima (“*const T” i “*mut T”), operacije mogu biti potrebne za dodavanje pomaka pokazivaču. Ranije je za ovo bilo moguće koristiti konstrukciju poput “::add(1)”, dodajući broj bajtova koji odgovara veličini “size_of::()”. Novi API pojednostavljuje ovu operaciju i omogućava manipulisanje pomacima bajtova bez prethodnog prebacivanja tipova na "*const u8" ili "*mut u8".
    • pokazivač::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pokazivač::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Nastavak rada na povećanju performansi rustc kompajlera. Dodan je BOLT optimizator, koji radi u fazi post-linka i koristi informacije iz unaprijed pripremljenog profila izvršavanja. Korišćenje BOLT-a vam omogućava da ubrzate izvršavanje kompajlera za oko 2% promenom rasporeda koda biblioteke librustc_driver.so za efikasnije korišćenje keša procesora.

    Uključuje izgradnju rustc kompajlera sa opcijom "-Ccodegen-units=1" za poboljšanje kvaliteta optimizacije u LLVM-u. Provedeni testovi pokazuju povećanje performansi u slučaju "-Ccodegen-units=1" build za približno 1.5%. Dodate optimizacije su podrazumevano omogućene samo za platformu x86_64-unknown-linux-gnu.

    Prethodno spomenute optimizacije je testirao Google kako bi se smanjilo vrijeme izgradnje komponenti Android platforme napisanih u Rustu. Korištenje “-C codegen-units=1” prilikom izrade Androida nam je omogućilo da smanjimo veličinu kompleta alata za 5.5% i povećamo njegove performanse za 1.8%, dok se vrijeme izrade samog alata gotovo udvostručilo.

    Omogućavanje prikupljanja smeća u vremenu veze (“--gc-sections”) dovelo je do povećanja performansi do 1.9%, omogućavajući optimizaciju vremena veze (LTO) do 7.7%, a optimizacije zasnovane na profilu (PGO) do 19.8%. U finalu su primijenjene optimizacije pomoću uslužnog programa BOLT, što je omogućilo povećanje brzine gradnje na 24.7%, ali je veličina kompleta alata porasla za 10.9%.

    Izdanje programskog jezika Rust 1.75 i unikernela Hermit 0.6.7

  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opcija::as_slice
    • Opcija::as_mut_slice
    • pokazivač::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pokazivač::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::nula
    • mem::diskriminant
    • mem::nula
  • Treći nivo podrške je implementiran za platforme csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd i mipsel-unknown-netbsd. Treći nivo uključuje osnovnu podršku, ali bez automatskog testiranja, objavljivanja službenih verzija ili provjere da li se kod može izgraditi.

Osim toga, možemo primijetiti novu verziju projekta Hermit, koja razvija specijalizirano jezgro (unikernel), napisano na Rust jeziku, pružajući alate za izgradnju samostalnih aplikacija koje mogu raditi na vrhu hipervizora ili golog hardvera bez dodatnih slojeva. i bez operativnog sistema. Kada je izgrađena, aplikacija je statički povezana sa bibliotekom, koja samostalno implementira sve potrebne funkcionalnosti, bez vezivanja za jezgro OS-a i sistemske biblioteke. Kod projekta se distribuira pod licencama Apache 2.0 i MIT. Podržan je sklop za samostalno izvršavanje aplikacija napisanih na Rust, Go, Fortran, C i C++. Projekat takođe razvija sopstveni bootloader koji vam omogućava da pokrenete Hermit koristeći QEMU i KVM.

izvor: opennet.ru

Dodajte komentar