Uscita di Rust 1.97. Il kernel Zinnia e il sistema P2P Iroh, scritti in Rust, con indirizzamento tramite chiavi

È stato pubblicato il rilascio del linguaggio di programmazione Rust 1.97, originariamente sviluppato da Mozilla e ora in fase di sviluppo sotto l'egida dell'organizzazione non profit Rust Foundation. Il linguaggio si concentra sulla gestione sicura della memoria e offre strumenti per raggiungere un alto grado di parallelismo nell'esecuzione dei compiti, evitando l'uso di garbage collector e runtime (il runtime si limita a una inizializzazione di base e alla gestione della libreria standard).

I metodi di gestione della memoria in Rust mirano a eliminare gli errori durante la manipolazione dei puntatori e a proteggere da problemi derivanti da operazioni a basso livello sulla memoria, come l'accesso a memoria già liberata, la dereferenziazione di puntatori nulli e il superamento dei limiti del buffer, ecc. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, il progetto ha sviluppato un gestore di pacchetti chiamato Cargo. Per la pubblicazione delle librerie è disponibile un repository chiamato crates.io.

La gestione sicura della memoria in Rust è garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la gestione della durata degli oggetti (scope) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust offre anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria dei valori 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 ridurre al minimo gli errori logici.

Novità principali:

  • Per impostazione predefinita, è attivato un nuovo schema di decorazione (mangling) dei nomi delle funzioni, delle variabili globali e delle strutture dati nei file oggetto e eseguibili generati (-Csymbol-mangling-version=v0). I nomi vengono decorati per prevenire conflitti durante il collegamento di diversi programmi, allegando un contesto specifico, come il percorso del modulo e il nome del pacchetto crate.

    In precedenza, lo schema di decorazione dei nomi basato su Itanium ABI presentava alcune carenze, come la sostituzione dei parametri generici con hash illeggibili e parti del compilatore che non utilizzavano Itanium ABI, il che richiedeva l'uso di decoder di nomi specifici per Rust. Con Rust 1.97 è stato attivato di default uno schema di decorazione sviluppato specificamente per Rust, privo dei difetti menzionati. Il vecchio schema sarà rimosso in una delle prossime versioni.

  • Il gestore di pacchetti cargo include la possibilità di gestire le reazioni alla generazione di avvisi da parte del compilatore durante la compilazione. È stata aggiunta una variabile d'ambiente CARGO_BUILD_WARNINGS, che può assumere tre valori: warn (di default) — visualizzazione dell'avviso a schermo; allow — nascondere l'output degli avvisi; deny — trattare gli avvisi come errori che fermano la compilazione.

    Nelle versioni precedenti, per completare la build dopo la visualizzazione di un avviso era necessario specificare '-Dwarnings' in RUSTFLAGS per il compilatore, ma quando RUSTFLAGS veniva modificato, il gestore dei pacchetti cargo considerava la build come nuova, ignorava i dati nella cache e ricompilava l'intero progetto da zero. Spostare la configurazione sul lato di cargo ha escluso il reset della cache e la necessità di una ricompilazione completa quando si modificava la modalità di gestione degli avvisi, semplificando anche l'attivazione della gestione degli avvisi come errori nei sistemi di integrazione continua.

  • Nella compilazione, è attivata di default la visualizzazione dei messaggi emessi dal linker. I messaggi vengono visualizzati sotto forma di avvisi tramite una regola speciale di lint chiamata «linker_messages», che non fa parte del gruppo standard «warnings». In questo modo, rustc filtra i messaggi che rappresentano falsi positivi o comportamenti normali, lasciando avvisi che potrebbero indicare problemi, come avvisi su opzioni deprecate e impostazioni indesiderate. In precedenza, le informazioni dal linker venivano mostrate solo al termine con un errore, altrimenti tutti i messaggi venivano nascosti. Per ripristinare il comportamento precedente, è possibile aggiungere nel Cargo.toml: [lints.rust] linker_messages = «allow»
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • Predefinito per RepeatN
    • Copia per ffi::FromBytesUntilNulError
    • Send per std::fs::File per UEFI
    • ::isolate_highest_one
    • ::isolate_lowest_one
    • ::highest_one
    • ::lowest_one
    • ::bit_width
    • NonZero::isolate_highest_one
    • NonZero::isolate_lowest_one
    • NonZero::highest_one
    • NonZero::lowest_one
    • NonZero::bit_width
  • L'attributo «const» è stato applicato al metodo char::is_control.

Inoltre, si possono evidenziare i progetti e gli eventi recentemente annunciati legati a Rust:

  • Il progetto zinnia sviluppa un kernel modulare simile a Unix, scritto in Rust e distribuito sotto licenza GPLv2. Il kernel supporta interfacce POSIX e alcune estensioni da BSD e Linux, come epoll e timerfd. Sono disponibili driver DRM (Direct Rendering Manager) e evdev per il rendering e l'organizzazione dell'input. Le funzionalità implementate sono sufficienti per eseguire l'ambiente desktop Xfce su un server X e un compositore. server Weston basato su Wayland. È supportato il boot sia in un emulatore QEMU che su hardware reale, come il laptop ThinkPad E14 G7.
  • È stata presentata la versione 1.0 della libreria di comunicazione iroh, che consente di stabilire connessioni di rete tra applicazioni su host diversi utilizzando chiavi crittografiche per la connessione, invece di IP addresses (si specifica la chiave a cui ci si deve connettere e iroh trova l'host correlato stabilendo una connessione crittografata utilizzando il protocollo QUIC). Se possibile, vengono stabilite connessioni P2P dirette, ma se ciò non è possibile, si esegue un fallback per lavorare tramite relay, che sono anche utilizzati per scoprire gli host tramite le chiavi. È possibile eseguire il proprio relay o connettersi a relay pubblici supportati dalla comunità.

    Tra le funzionalità avanzate: supporto per Multipath QUIC per la consegna simultanea dei pacchetti su più percorsi, capacità di funzionare dietro NAT, modalità di configurazione statica per la connessione a dispositivi locali senza accesso a Internet, possibilità di compilazione in codice intermedio WASM per l'esecuzione all'interno del browser, supporto per la creazione dei propri trasporti, ad esempio, per la connessione tramite Bluetooth, WiFi Aware o LoRa. Il codice è scritto in Rust e distribuito sotto le licenze Apache-2.0 e MIT. Sono disponibili wrapper per Python, Node.js, Kotlin e Swift.

  • L'autore della piattaforma server JavaScript Bun ha pubblicato un articolo che analizza il progetto di riscrittura di Bun dal linguaggio Zig a Rust, utilizzando il modello AI Claude Fable. Si segnala che Bun 1.3.14 sarà l'ultima versione in Zig e la prossima versione Bun 1.4.0 sarà già in Rust. Secondo i test effettuati, la versione in Rust consuma significativamente meno memoria ed è dal 2 al 5% più veloce rispetto alla versione in Zig. La dimensione del file eseguibile nella versione in Rust è diminuita del 20%.

Fonte: opennet.ru

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