Izdanje programskog jezika Rust 1.75 i unikernel Hermit 0.6.7

Objavljen je programski jezik opće namjene Rust 1.75, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • Dodana mogućnost korištenja "async fn" i notacije "->impl Trait" u privatnim značajkama. Na primjer, korištenjem “->impl Trait” možete napisati trait metodu koja vraća iterator: trait Container { fn items(&self) -> impl Iterator; } impl Spremnik za MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Također možete stvoriti karakteristike pomoću "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // proširit će se na: // fn fetch(&self, url: Url) -> impl Future; }

  • Dodan API za izračun pomaka bajtova u odnosu na pokazivače. Kada radite s golim pokazivačima (“*const T” i “*mut T”), možda će biti potrebne operacije za dodavanje pomaka pokazivaču. Ranije je za to 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ćuje manipuliranje pomacima bajtova bez prethodnog pretvaranja tipova u "*const u8" ili "*mut u8".
    • pokazivač::byte_add
    • pokazivač::byte_offset
    • pokazivač::byte_offset_from
    • pokazivač::byte_sub
    • pointer::wrapping_byte_add
    • pokazivač :: wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Nastavak rada na povećanju performansi rustc prevoditelja. Dodan je BOLT optimizator, koji se pokreće u fazi nakon povezivanja i koristi informacije iz unaprijed pripremljenog profila izvršenja. Korištenje BOLT-a omogućuje vam da ubrzate izvršavanje prevoditelja za oko 2% promjenom izgleda koda knjižnice librustc_driver.so za učinkovitiju upotrebu predmemorije procesora.

    Uključena je izgradnja rustc prevoditelja s opcijom "-Ccodegen-units=1" za poboljšanje kvalitete optimizacije u LLVM-u. Provedeni testovi pokazuju povećanje performansi u slučaju izgradnje “-Ccodegen-units=1” za približno 1.5%. Dodane optimizacije omogućene su prema zadanim postavkama samo za platformu x86_64-unknown-linux-gnu.

    Prethodno spomenute optimizacije testirao je Google kako bi se smanjilo vrijeme izrade komponenti Android platforme napisanih u Rustu. Korištenje "-C codegen-units=1" prilikom izrade Androida omogućilo nam je smanjenje veličine alata za 5.5% i povećanje njegove izvedbe za 1.8%, dok se vrijeme izrade samog alata gotovo udvostručilo.

    Omogućavanje skupljanja smeća tijekom povezivanja ("--gc-sections") donijelo je povećanje performansi do 1.9%, omogućavanje optimizacije vremena povezivanja (LTO) do 7.7%, a optimizacije temeljene na profilu (PGO) do 19.8%. U konačnici su primijenjene optimizacije pomoću uslužnog programa BOLT, što je omogućilo povećanje brzine izrade na 24.7%, ali je veličina alata porasla za 10.9%.

    Izdanje programskog jezika Rust 1.75 i unikernel Hermit 0.6.7

  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika 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
    • pokazivač::byte_offset
    • pokazivač::byte_offset_from
    • pokazivač::byte_sub
    • pointer::wrapping_byte_add
    • pokazivač :: 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
    • MoždaUninit::nulirano
    • mem::diskriminator
    • mem::nulirano
  • Treća razina podrške implementirana je za platforme csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd i mipsel-unknown-netbsd. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih međugradnji ili provjere može li se kod izgraditi.

Dodatno, možemo primijetiti novu verziju projekta Hermit, koja razvija specijalizirani kernel (unikernel), napisan u jeziku Rust, pružajući alate za izgradnju samostalnih aplikacija koje se mogu izvoditi na vrhu hipervizora ili golog hardvera bez dodatnih slojeva i bez operativnog sustava. Kada je izgrađena, aplikacija je statički povezana s bibliotekom, koja neovisno implementira sve potrebne funkcionalnosti, bez vezanja na OS kernel i sistemske biblioteke. Kôd projekta distribuira se pod licencama Apache 2.0 i MIT. Asembler je podržan za samostalno izvođenje aplikacija napisanih u Rust, Go, Fortran, C i C++. Projekt također razvija vlastiti bootloader koji vam omogućuje pokretanje Hermita koristeći QEMU i KVM.

Izvor: opennet.ru

Dodajte komentar