Uscita di Rust 1.94. Esperimenti con Rust nel kernel FreeBSD. Database Turso e CAD vcad su Rust.

È stato pubblicato il rilascio del linguaggio di programmazione Rust 1.94, originariamente sviluppato da Mozilla, ma attualmente sviluppato sotto l'egida dell'organizzazione non profit indipendente Rust Foundation. Il linguaggio si concentra su una gestione della memoria sicura e fornisce strumenti per raggiungere un alto livello di parallelismo nell'esecuzione dei compiti, evitando l'uso di un garbage collector e di un runtime (il runtime si limita all'inizializzazione di base e al supporto 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:

  • Nel tipo slice è stato aggiunto il metodo array_windows, che crea un iteratore per scorrere i segmenti (slice) «finestre» di dimensione fissa, spostandosi di un elemento alla volta. A differenza del metodo windows disponibile in precedenza, il metodo array_windows opera con una dimensione costante della finestra e restituisce a ogni iterazione un riferimento a un array di dimensione fissa (&[T; N]) invece di un segmento di dimensione indefinita (&[T]). Poiché la dimensione dell'array è conosciuta dal compilatore, per migliorare le prestazioni è possibile evitare il controllo dei limiti dell'array a ogni fase dell'iterazione. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
  • Nei file di configurazione del gestore pacchetti Cargo (.cargo/config.toml) è stata implementata la direttiva «include», che consente di inserire contenuti di altri file in loco. include = [ «frodo.toml», «samwise.toml», ] include = [ { path = «required.toml» }, { path = «optional.toml», optional = true }, ]
  • È stata aggiunta la supporto per la nuova versione del linguaggio di markup TOML 1.1 nei file di manifest e nei file di configurazione, che include il supporto per le tabelle incorporate multilinea, le sequenze di escape «\xHH» per l'inserimento della rappresentazione esadecimale dei byte e «\e» per sostituire «\u001B», la possibilità di avere una virgola alla fine dell'ultimo elemento e di saltare l'indicazione dei secondi nei valori temporali. serde = { version = «1.0», features = [«derive»] } può ora essere sostituito con serde = { version = «1.0», features = [«derive»], }
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • ::array_windows
    • ::element_offset
    • LazyCell::get
    • LazyCell::get_mut
    • LazyCell::force_mut
    • LazyLock::get
    • LazyLock::get_mut
    • LazyLock::force_mut
    • impl TryFrom for usize
    • std::iter::Peekable::next_if_map
    • std::iter::Peekable::next_if_map_mut
    • Funzioni incorporate per le istruzioni x86 avx512fp16
    • Funzioni incorporate per le istruzioni AArch64 NEON fp16
    • f32::consts::EULER_GAMMA
    • f64::consts::EULER_GAMMA
    • f32::consts::GOLDEN_RATIO
    • f64::consts::GOLDEN_RATIO
  • Il flag «const» è stato applicato nelle funzioni:
    • f32::mul_add
    • f64::mul_add
  • La piattaforma riscv64im-unknown-none-elf è stata portata al terzo livello di supporto. Il terzo livello prevede un supporto base, ma senza test automatici, pubblicazione di build ufficiali e verifica della possibilità di compilazione del codice.

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

  • Ayrton Muñoz, che in passato ha implementato il supporto per la piattaforma Sony PlayStation 1 nel compilatore Rust e ha lavorato al porting di FreeBSD sui computer con chip Apple Silicon, ha realizzato per FreeBSD la possibilità di creare componenti del kernel e driver di dispositivo in Rust. Per il testing è stato proposto un insieme di KPI-API (Kernel Programming Interface), che consentono di utilizzare codice Rust nel kernel di FreeBSD, insieme ai driver audio virtio (virtio_snd) e HID-Driver DockChannel per la tastiera nel M2 MacBook, oltre a diversi driver a basso livello per le sottosistemi dei computer Mac con chip Apple Silicon.

    Si segnala che il lavoro sulle API Rust è iniziato alla fine del 2024. Attualmente, nelle API è implementata solo una parte delle C-KPI e sono posizionate come instabili, ma nel tempo il livello di stabilità è previsto che venga portato al pari dell'interfaccia per il linguaggio C. Il driver virtio_snd proposto come esempio è adeguato per la riproduzione di musica in QEMU. Si prevede che nel 2026 le API Rust saranno sufficientemente stabilizzate affinché i programmatori interessati possano iniziare a utilizzarle per scrivere codice.

  • Benny Siegert, coinvolto nello sviluppo di NetBSD, ha cercato di giustificare le ragioni per cui il supporto per il linguaggio Rust non sarà presente nel kernel di NetBSD: NetBSD supporta architetture per le quali Rust non è disponibile; mantenere l'attuale toolchain di Rust in pkgsrc richiede notevoli sforzi e coinvolge solo pochi sviluppatori; il supporto di Rust nel kernel richiede l'inclusione del compilatore Rust nel sistema di base; nel bootstrap di Rust in NetBSD viene utilizzata una versione passata del pacchetto binario, il che è inaccettabile per distribuzioni autonome distribuite in codice sorgente; i cicli di rilascio di Rust non sono compatibili con il ciclo di sviluppo di NetBSD e il supporto delle versioni precedenti (ad esempio, la branch NetBSD 9, rilasciata nel 2020, continua ad essere mantenuta, e in queste condizioni sarebbe necessario fornire e mantenere un compilatore Rust risalente a sei anni fa).
  • È stato pubblicato il rilascio del database embedded Turso 0.5, sviluppato in Rust e compatibile con SQLite a livello di dialetto SQL, formato dei file del database e C API. Tra le funzionalità avanzate spicca il meccanismo CDC (Change Data Capture) per monitorare le modifiche al database in tempo reale, l'uso di io_uring per l'input/output asincrono su Linux, il supporto per la ricerca vettoriale, la presenza dell'istruzione ALTER per modificare lo schema del database, la possibilità di crittografare i dati nel database, la modalità di calcoli incrementali e la struttura "BEGIN CONCURRENT".
  • Un progetto che offre la possibilità di utilizzare la libreria standard di Rust in programmi eseguiti sul lato GPU.
  • Emuko è un emulatore RISC-V, sviluppato in Rust, capace di caricare Linux, supporta la compilazione JIT, e può salvare e ripristinare snapshot di stato.
  • RustConn (flatpak) è un'interfaccia grafica per gestire connessioni di rete esterne verso altri host, supporta SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust e SFTP. Il codice è scritto in Rust utilizzando GTK4 e Wayland.
  • È stata presentata la nuova versione del progetto zlib-rs 0.6, contrassegnata come la prima versione stabile, completamente compatibile con l'API C di zlib e adatta per la sostituzione trasparente di zlib. Il progetto mira a creare un'alternativa sicura alla libreria di compressione dati zlib. Lo sviluppo è in corso con uno sguardo al progetto zlib-ng, che sviluppa una variante ad alte prestazioni di zlib.
  • È stato presentato il progetto vcad, che sviluppa un sistema di progettazione automatizzata parametrica (CAD) scritto in Rust e integrabile con agenti AI tramite il protocollo MCP. Supporta la modellazione 3D, la simulazione, il lavoro con schizzi 2D, l'assemblaggio di componenti, l'importazione in formato STEP e l'esportazione in formati STL/GLB/STEP/DXF.
  • È stato rilasciato un sistema di riconoscimento vocale, scritto in Rust e che utilizza il modello AI Mistral Voxtral Mini 4B Realtime e il framework di apprendimento automatico Burn. Il progetto è orientato verso il riconoscimento vocale in tempo reale per la generazione di trascrizioni durante le trasmissioni in streaming.
  • È stata rilasciata la versione 0.22 di c2rust, uno strumento progettato per la traduzione del codice C (C99) in una rappresentazione non sicura in Rust, simile nella struttura al codice originale in C. Il framework risultante può essere successivamente utilizzato per una transizione graduale verso un Rust idiomatico, eliminando i blocchi non sicuri.

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