Liberazione di a lingua di prugrammazione Rust 1.75 è unikernel Hermit 0.6.7

A liberazione di a lingua di prugrammazione Rust 1.75 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.

A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Innuvazioni principali:

  • Aggiunta a capacità di utilizà "async fn" è a notazione "-> impl Trait" in tratti privati. Per esempiu, usendu "->impl Trait" pudete scrive un metudu di trait chì torna un iteratore: trait Container { fn items (&self) -> impl Iterator; } impl Container per MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Pudete ancu creà caratteristiche cù "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // serà allargatu à: // fn fetch(&self, url: Url) -> impl Future; }

  • Aggiunta API per calculà l'offset di byte relative à i puntatori. Quandu u travagliu cù i puntatori nudi ("*const T" è "*mut T"), l'operazioni ponu esse richieste per aghjunghje un offset à u puntatore. Nanzu, per questu era pussibule di utilizà una custruzzione cum'è "::add(1)", aghjunghjendu u numeru di bytes chì currispondenu à a dimensione di "size_of::()". A nova API simplifica sta operazione è permette di manipulà l'offset di byte senza prima casting i tipi à "*const u8" o "*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
  • U travagliu cuntinuatu per aumentà u rendiment di u compilatore rustc. Aggiuntu l'ottimisatore BOLT, chì corre in u stadiu post-link è usa l'infurmazioni da un prufilu d'esekzione pre-preparatu. Utilizà BOLT vi permette di accelerà l'esekzione di u compilatore da circa 2% cambiendu u layout di u codice di libreria librustc_driver.so per un usu più efficau di a cache di u processatore.

    Includite a custruzzione di u compilatore rustc cù l'opzione "-Ccodegen-units = 1" per migliurà a qualità di ottimisazione in LLVM. I testi realizati mostranu un aumentu di u rendiment in u casu di u "-Ccodegen-units = 1" custruita da circa 1.5%. L'ottimisazioni aghjunte sò attivate per automaticamente solu per a piattaforma x86_64-unknown-linux-gnu.

    L'ottimisazioni citati prima sò stati pruvati da Google per riduce u tempu di creazione di cumpunenti di a piattaforma Android scritti in Rust. Utilizà "-C codegen-units = 1" quandu custruisce Android ci hà permessu di riduce a dimensione di u toolkit da 5.5% è aumentà a so prestazione di 1.8%, mentre chì u tempu di creazione di u toolkit stessu hè quasi duppiatu.

    L'attivazione di a cullezzione di basura in u tempu di ligame ("--gc-sections") hà purtatu u guadagnu di rendiment finu à 1.9%, chì permette l'optimizazione di u tempu di ligame (LTO) finu à 7.7%, è l'ottimisazioni basate nantu à u prufilu (PGO) finu à 19.8%. In a fine, l'ottimisazioni sò stati applicati cù l'utilità BOLT, chì hà permessu di aumentà a velocità di custruzzione à 24.7%, ma a dimensione di u toolkit hà aumentatu da 10.9%.

    Liberazione di a lingua di prugrammazione Rust 1.75 è unikernel Hermit 0.6.7

  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • Atomicu*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opzione::as_slice
    • Opzione::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
  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in e funzioni:
    • Ipv6Addr::to_ipv4_mapped
    • ForseUninit::assume_init_read
    • ForseUninit::zeroed
    • mem::discriminant
    • mem::zeroed
  • U terzu livellu di supportu hè statu implementatu per e plataforme csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd è mipsel-unknown-netbsd. U terzu livellu implica un supportu basicu, ma senza teste automatizate, publicà custruzzioni ufficiali, o cuntrollà se u codice pò esse custruitu.

Inoltre, pudemu nutà una nova versione di u prughjettu Hermit, chì sviluppa un kernel specializatu (unikernel), scrittu in a lingua Rust, chì furnisce strumenti per custruisce applicazioni autonome chì ponu eseguisce nantu à un ipervisore o hardware nudu senza strati supplementari. è senza un sistema operatore. Quandu hà custruitu, l'applicazione hè stata ligata à una biblioteca, chì implementa indipindentamente tutte e funziunalità necessaria, senza esse ligata à u kernel OS è à e librerie di sistema. U codice di u prughjettu hè distribuitu sottu Apache 2.0 è licenze MIT. L'assemblea hè supportata per l'esecuzione stand-alone di applicazioni scritte in Rust, Go, Fortran, C è C++. U prugettu hè ancu sviluppatu u so propiu bootloader chì permette di lancià Hermit cù QEMU è KVM.

Source: opennet.ru

Add a comment