Rilascio Rust 1.88. Sistema operativo Munal e utility rsched in Rust

È stato pubblicato il rilascio del linguaggio di programmazione generale Rust 1.88, originariamente sviluppato da Mozilla e ora gestito da un'organizzazione non profit indipendente, la Rust Foundation. Il linguaggio è focalizzato sulla gestione sicura della memoria e offre strumenti per raggiungere un alto grado di parallelismo nell'esecuzione dei compiti, senza fare uso di un garbage collector e di un runtime (il runtime si limita a un'inizializzazione base e alla gestione della libreria standard).

I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori di manipolazione dei puntatori e li proteggono da problemi derivanti da operazioni a basso livello con la memoria, come l'accesso a aree di memoria dopo il loro rilascio, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, l'assicurazione della compilazione e la gestione delle dipendenze, il progetto promuove il gestore di pacchetti Cargo. È supportato un repository per l'hosting delle librerie su crates.io.

La gestione sicura della memoria in Rust è garantita durante la compilazione attraverso il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la considerazione del tempo di vita degli oggetti (ambiti di visibilità) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita e offre una forte tipizzazione statica per minimizzare gli errori logici.

Novità principali:

  • È stata aggiunta la possibilità di specificare più espressioni 'let' all'interno dei blocchi condizionali 'if' e 'while', utilizzando l'operatore '&&' (AND logico) per combinarle. Le espressioni 'let' possono essere combinate con espressioni booleane. Le variabili dichiarate nelle espressioni let possono essere utilizzate nelle successive espressioni condizionali, così come all'interno dei blocchi 'if' e 'while'. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • È stata aggiunta la supporto per la scrittura di funzioni 'nude', contrassegnate con l'attributo '#[unsafe(naked)]' e contenenti al loro interno una singola chiamata a 'naked_asm!'. Le funzioni create in questo modo non hanno un epilogo e un prologo generati dal compilatore, permettendo allo sviluppatore di controllare completamente il codice assembler di servizio allegato alla funzione ('funzione nuda' contiene solo le istruzioni assembler specificate dallo sviluppatore e non include gestori speciali per gli argomenti e i valori restituiti, aggiunti dal compilatore). Le 'funzioni nude' sono considerate un'alternativa più conveniente rispetto alle funzioni definite nel blocco 'global_asm!'. #[unsafe(naked)] pub unsafe extern 'sysv64' fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( 'add rax, rdi, rsi', 'ret' ); }
  • Nel linguaggio dei predicati, usato negli attributi di compilazione condizionale 'cfg' e 'cfg_attr' (che consentono di includere o escludere parti di codice in base a condizioni specifiche), è stata aggiunta la supporto per letterali booleani 'true' e 'false', che sono identificati con configurazioni che sono sempre attive o sempre disattive. Questi letterali possono essere utilizzati anche nel macro 'cfg!' e nelle tabelle '[target]' nei manifesti e configurazioni per Cargo. Le espressioni cfg(true) e cfg(false) possono essere applicate al posto di cfg(all()) e cfg(any()) per esprimere le proprie intenzioni in modo più chiaro.
  • Nel gestore di pacchetti Cargo è attivato l'avvio automatico del raccoglitore di rifiuti per la pulizia della cache nella directory home dell'utente. I pacchetti precedentemente memorizzati nella cache con dipendenze scaricate non venivano puliti, il che portava a un continuo incremento dell'uso dello spazio su disco. Il meccanismo di raccolta dei rifiuti attivato eliminerà automaticamente i file crate scaricati esternamente che non sono stati utilizzati per oltre 3 mesi, e i file crate installati localmente che non sono stati utilizzati per oltre un mese. La pulizia della cache non viene avviata quando si utilizzano in Cargo le opzioni “—offline” o “—frozen”.
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • Cell::update
    • impl Default per *const T
    • impl Default per *mut T
    • mod ffi::c_str
    • HashMap::extract_if
    • HashSet::extract_if
    • hint::select_unpredictable
    • proc_macro::Span::line
    • proc_macro::Span::column
    • proc_macro::Span::start
    • proc_macro::Span::end
    • proc_macro::Span::file
    • proc_macro::Span::local_file
    • ::as_chunks
    • ::as_rchunks
    • ::as_chunks_unchecked
    • ::as_chunks_mut
    • ::as_rchunks_mut
    • ::as_chunks_unchecked_mut
  • Il segnale «const» è stato applicato nelle funzioni:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • È stato rimosso il primo livello di supporto per la piattaforma di destinazione i686-pc-windows-gnu.

Inoltre, è possibile notare eventi legati a Rust:

  • Il progetto Munal OS sviluppa un sistema operativo sperimentale, scritto in Rust e basato sul concetto di unikernel. In Munal OS non viene utilizzata la multitasking preemptive, il mapping delle pagine di memoria e lo spazio degli indirizzi virtuali (è utilizzata la mappatura della memoria di UEFI). Il kernel e le applicazioni vengono eseguiti in uno spazio indirizzi unificato utilizzando un modello di sicurezza basato sull'isolamento sandbox di WASM (include un motore wasmi per eseguire applicazioni in forma di bytecode WebAssembly).

    Il sistema operativo è dotato di un'interfaccia grafica e supporta il controllo tramite tastiera e mouse. Per lo sviluppo di applicazioni grafiche viene utilizzato un proprio toolkit con una libreria di widget. Per le interazioni di rete sono disponibili uno stack TCP e un driver per dispositivi di rete. Tra le applicazioni disponibili per Munal OS ci sono: un browser web con supporto di base per HTML e HTTPS, un editor di testo e un terminale per eseguire codice Python. Il codice è aperto sotto licenza MIT.

    Rilascio Rust 1.88. Sistema operativo Munal e utility rsched in Rust
  • È stata rilasciata la versione del kernel Asterinas 0.15.2, scritta in Rust e che fornisce un ABI compatibile con il kernel Linux. Il kernel supporta le architetture x86-64 e RISC-V, implementando 206 delle 368 chiamate di sistema di Linux. Lo sviluppo del kernel coinvolge 45 sviluppatori, principalmente di diverse università cinesi. Il kernel è costruito utilizzando l'architettura "framekernel", in cui i componenti del kernel sono collocati in uno spazio di indirizzi comune, e la sicurezza è raggiunta a livello di separazione logica tra codice sicuro e codice in cui potrebbero sorgere problemi di sicurezza. Tutte le chiamate di sistema, i file system e i driver sono implementati a livello di OS Services e non possono includere blocchi unsafe. Il codice è distribuito sotto licenza MPL 2.0.
  • Per il kernel Linux è stata preparata l'utilità rsched, che consente di analizzare le statistiche sul funzionamento dello scheduler. Nella pratica, l'utilità permette di valutare le decisioni dello scheduler relative alla concessione di risorse ai processi, nonché di monitorare i ritardi che si verificano durante la pianificazione. Per la raccolta dei dati, viene utilizzato il sottosistema BPF, mentre l'interfaccia utente è scritta in Rust. L'autore dell'utilità è Chris Mason, creatore e architetto principale del file system Btrfs.
  • L'azienda Collabora ha annunciato lo sviluppo di una versione dell'utilità Coccinelle per il linguaggio Rust. Coccinelle è originariamente destinata ad automatizzare la ricerca e la trasformazione del codice scritto in C nel kernel Linux. Le trasformazioni sono definite sotto forma di regole che somigliano a patch astratte, non legate a posizioni specifiche nel codice.
  • Gli sviluppatori di GNOME hanno presentato la libreria per il caricamento delle immagini glycin, scritta in Rust e che fornisce la decodifica delle immagini con l'uso dell'isolamento sandbox. Viene supportata la restituzione del contenuto decodificato attraverso gdk::Textures e l'estrazione dei metadati. Sono fornite interfacce per l'utilizzo di glycin in GTK4, oltre a un backend per il coinvolgimento di glycin nella libreria GdkPixbuf, utilizzata in GNOME per il caricamento delle immagini. Glycin è già utilizzato nel visualizzatore di immagini Loupe, fornito di default in GNOME. Inoltre, il backend per GdkPixbuf consente di utilizzare glycin in GNOME Shell, nei generatori di miniature e in applicazioni GNOME di vario tipo, senza apportare modifiche a questi programmi.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster