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 attualmente mantenuto dalla Rust Foundation, un'organizzazione non profit indipendente. Il linguaggio è focalizzato sulla gestione sicura della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione delle operazioni, senza ricorrere a un garbage collector o a un runtime (il runtime si limita a inizializzare e supportare la libreria standard).

I metodi di gestione della memoria in Rust mirano a evitare errori nella manipolazione dei puntatori e a proteggere da problemi derivanti dal lavoro a basso livello con la memoria, come l'accesso a porzioni di memoria dopo che sono state liberate, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, la compilazione e la gestione delle dipendenze, viene sviluppato il gestore di pacchetti Cargo. È supportato un repository per la pubblicazione delle librerie, 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:

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

    Il precedente schema di decorazione dei nomi, basato su Itanium ABI, presentava alcuni svantaggi, come la sostituzione dei parametri dei generici con hash illeggibili e la presenza di parti del compilatore che non utilizzavano Itanium ABI, richiedendo l'uso di decoder di nomi specifici per Rust. In Rust 1.97 è attivato per default uno schema di decorazione sviluppato specificamente per Rust, privo di questi svantaggi. Si intende rimuovere il vecchio schema in una delle prossime versioni.

  • Il gestore pacchetti cargo ha integrato la possibilità di gestire la reazione del compilatore alla generazione di avvisi durante la compilazione. È stata aggiunta la variabile d'ambiente CARGO_BUILD_WARNINGS, che può assumere tre valori: warn (di default) — visualizzazione dell'avviso sullo schermo; allow — nascosta visualizzazione degli avvisi; deny — gestione degli avvisi come errori che fermano la compilazione.

    Nelle versioni precedenti, per completare il processo di compilazione dopo aver visualizzato un avviso, era necessario specificare '-Dwarnings' in RUSTFLAGS per il compilatore. Tuttavia, modificando RUSTFLAGS, il gestore pacchetti cargo considerava la compilazione come nuova, ignorava i dati nella cache e ricompilava da zero l'intero progetto. Spostare la configurazione al lato di cargo ha escluso il reset della cache e la necessità di una ricompilazione completa in caso di modifica della modalità di elaborazione degli avvisi, semplificando anche l'attivazione della gestione degli avvisi come errori nei sistemi di integrazione continua.

  • Durante la compilazione è attivata di default la visualizzazione dei messaggi emessi dal linker. I messaggi vengono mostrati sotto forma di avvisi tramite una speciale regola di lint denominata «linker_messages», che non fa parte del gruppo standard di «warnings». In questo modo, rustc filtra i messaggi che sono falsi positivi o comportamenti normali, lasciando solo avvisi che possono indicare problemi, come quelli relativi a opzioni obsolete e impostazioni indesiderate. In precedenza, le informazioni del linker venivano mostrate solo in caso di errore, mentre in tutti gli altri casi venivano nascosti. Per ripristinare il comportamento precedente, in Cargo.toml è possibile aggiungere: [lints.rust] linker_messages = «allow»
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • Predefinito per RepeatN
    • Copia per ffi::FromBytesUntilNulError
    • Invia 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
  • Il flag «const» è stato applicato nel metodo char::is_control.

In aggiunta, si possono notare 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 con 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 la gestione dell'input. Le funzionalità implementate sono sufficienti per far funzionare l'ambiente desktop Xfce gestito da un server X e compositore server Weston basato su Wayland. È supportato il boot sia in 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 differenti utilizzando chiavi crittografiche per la connessione, invece di indirizzi IP (si specifica la chiave a cui ci si vuole connettere e iroh trova l'host corrispondente e stabilisce una connessione crittografata utilizzando il protocollo QUIC). Se possibile, vengono stabilite connessioni dirette P2P, ma se ciò non è possibile, si effettua un fallback su relay, che vengono anche utilizzati per la scoperta degli host tramite chiavi. È possibile avviare il proprio relay o connettersi a relay pubblici supportati dalla comunità.

    Tra le funzionalità avanzate: supporto per Multipath QUIC per la consegna dei pacchetti simultaneamente su più percorsi, possibilità di funzionamento dietro NAT, modalità di configurazione statica per collegarsi a dispositivi locali senza accesso a Internet, possibilità di compilare in codice intermedio WASM per l'esecuzione all'interno del browser, supporto per la creazione di trasporti personalizzati, ad esempio per collegamenti tramite Bluetooth, WiFi Aware o LoRa. Il codice è scritto in Rust e rilasciato con 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 sull'analisi del progetto di riscrittura di Bun dal linguaggio Zig a Rust, utilizzando il modello AI Claude Fable. È stato notato 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 condotti, 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 hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster