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

È stata rilasciata la versione 1.94 del linguaggio di programmazione Rust, sviluppato originariamente da Mozilla e ora sotto la tutela della Rust Foundation, un'organizzazione non profit indipendente. Il linguaggio si concentra sulla gestione sicura della memoria e fornisce strumenti per raggiungere un alto livello di parallelismo nell'esecuzione delle attività, senza l'uso di un garbage collector e di un runtime (il runtime è limitato all'inizializzazione di base e alla manutenzione della 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:

  • Nel tipo slice è stato aggiunto il metodo array_windows, che crea un iteratore per l'attraversamento di segmenti (slice) «finestre» di dimensione fissa, spostandosi di un elemento alla volta. A differenza del precedente metodo windows, il metodo array_windows opera con una dimensione della finestra costante e restituisce ad ogni iterazione un riferimento a un array di dimensione fissa (&[T; N]) anziché a un slice di dimensione indefinita (&[T]). Poiché la dimensione dell'array è nota in anticipo al compilatore, per migliorare le prestazioni è possibile evitare di controllare i limiti dell'array ad 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 provenienti da altri file. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
  • Nei file di manifest e nei file di configurazione è stata aggiunta la supporto alla nuova versione del linguaggio di markup TOML 1.1, che ora include il supporto per tabelle incorporate multilinea, sequenze di escape "\xHH" per inserire rappresentazioni esadecimali di byte e "\e" per sostituire "\u001B", la possibilità di lasciare una virgola alla fine dell'ultimo elemento e di saltare l'indicazione dei secondi nei valori temporali. serde = { version = "1.0", features = ["derive"] } ora può essere sostituito con serde = { version = "1.0", features = ["derive"], }
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • ::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 segnale «const» è stato applicato nelle funzioni:
    • f32::mul_add
    • f64::mul_add
  • La piattaforma riscv64im-unknown-none-elf è stata tradotta a un terzo livello di supporto. Il terzo livello offre un supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilazione del codice.

In aggiunta, si possono notare 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 si è occupato del porting di FreeBSD sui computer con chip Apple Silicon, ha realizzato per FreeBSD la possibilità di creare componenti del kernel e driver di dispositivi in Rust. È stato proposto un set di KPI-wrapper (Kernel Programming Interface) per testare l'uso del codice Rust nel kernel di FreeBSD, insieme al driver audio virtio (virtio_snd) creato utilizzando questi wrapper, il driver HID DockChannel per la tastiera nel MacBook M2 e diversi driver a basso livello per le sottosistemi dei computer Mac con chip Apple Silicon.

    Si segnala che i lavori sugli wrapper Rust sono iniziati alla fine del 2024. Negli wrapper è stata implementata solo una parte del C-KPI e sono posizionati come instabili, ma nel tempo è previsto di portarli a un livello di stabilità equivalente a quello dell'interfaccia per il linguaggio C. Il driver virtio_snd proposto come esempio è adatto per la riproduzione di musica in QEMU. Si prevede che nel 2026 gli wrapper Rust saranno sufficientemente stabilizzati affinché gli sviluppatori interessati possano iniziare a usarli 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 comparirà nel kernel di NetBSD: NetBSD supporta architetture per le quali Rust non è disponibile; mantenere l'attuale toolchain Rust in pkgsrc richiede notevoli sforzi e coinvolge solo pochi sviluppatori; il supporto di Rust nel kernel richiede di includere il compilatore Rust nel sistema di base; nella fase di bootstrap di Rust in NetBSD viene utilizzata una versione precedente del pacchetto binario, il che è inaccettabile per distribuzioni autosufficienti distribuite in 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, continua il supporto della versione NetBSD 9, rilasciata nel 2020, e in queste condizioni sarebbe necessaria la fornitura e il supporto di un compilatore Rust obsoleto di sei anni).
  • È stato pubblicato il rilascio della SGBD incorporata nelle applicazioni Turso 0.5, scritta in Rust e compatibile con SQLite a livello di dialetto SQL, formato dei file DB e C API. Tra le funzionalità avanzate, spicca il meccanismo CDC (Change Data Capture) per il monitoraggio delle modifiche nel DB in tempo reale, l'uso di io_uring per l'input/output asincrono su Linux, il supporto della ricerca vettoriale, l'esistenza dell'istruzione ALTER per modificare lo schema del DB, la possibilità di crittografare i dati nel DB, la modalità di calcolo incrementale e la costruzione "BEGIN CONCURRENT".
  • Progetto per fornire l'uso della libreria standard di Rust in programmi eseguiti sul lato GPU.
  • Emuko è un emulatore RISC-V, scritto in Rust, in grado di eseguire Linux, supportante la compilazione JIT, capace di salvare e ripristinare istantanee dello stato.
  • RustConn (flatpak) è un'interfaccia grafica per gestire connessioni di rete esterne verso altri host, supportante SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust e SFTP. Il codice è scritto in Rust utilizzando GTK4 e Wayland.
  • È stata presentata una nuova branca del progetto zlib-rs 0.6, contrassegnata come prima versione stabile, completamente compatibile con zlib C API e adatta per una sostituzione trasparente di zlib. Il progetto mira a creare un analogo sicuro della libreria di compressione dati zlib. Lo sviluppo si basa sul progetto zlib-ng, che sviluppa una versione ad alte prestazioni di zlib.
  • È stato presentato il progetto vcad, che sviluppa un sistema parametrico di progettazione automatizzata (CAD), scritto in Rust e integrabile con agenti AI tramite il protocollo MCP. Supporta modellazione 3D, simulazione, lavoro con schizzi 2D, assemblaggio di componenti, import in formato STEP ed esportazione in formati STL/GLB/STEP/DXF.
  • È stata pubblicata una 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 al riconoscimento vocale in tempo reale per la generazione di trascrizioni durante la trasmissione in streaming.
  • È stata rilasciata la strumentazione c2rust 0.22, progettata per la traduzione di codice C (C99) in una rappresentazione non sicura in Rust, simile nella sua struttura al codice originale in C. Il framework risultante può essere utilizzato per una traduzione graduale in Rust idiomatico e per rimuovere 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