Rilascio di Rust 1.95. Integrazione di Rust nel server display Mir. Analizzatore di traffico ayaFlow in Rust

È stata pubblicata la versione 1.95 del linguaggio di programmazione Rust, originariamente sviluppato da Mozilla e ora evoluto sotto la supervisione della Rust Foundation, un'organizzazione non profit indipendente. Il linguaggio si concentra sulla gestione sicura della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, senza utilizzare un garbage collector e un runtime (il runtime è limitato alla semplice inizializzazione 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:

  • È stato aggiunto il macro «cfg_select!», che può essere utilizzato al posto del pacchetto «cfg-if» per gestire diverse condizioni di compilazione in uno stile simile al blocco «match», senza definire una catena di espressioni condizionali con la struttura «#[cfg]». cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = «32» => { fn foo() { /* non-unix, 32-bit */ } } _ => { fn foo() { /* non unix e non 32-bit */ } } }
  • È stata stabilizzata la possibilità di utilizzare espressioni «if let» all'interno dei blocchi «match» per creare corrispondenze condizionali basate su pattern. In precedenza, il supporto per l'uso di più espressioni «let» con l'operatore «&&» era stato stabilizzato per i blocchi «if» e «while». match value { Some(x) if let Ok(y) = compute(x) => { println!(«{}, {}», x, y); } _ => {} }
  • È stato stabilizzato il supporto per l'assembly inline per le architetture PowerPC e PowerPC64.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • MaybeUninit: From<[MaybeUninit; N]>
    • MaybeUninit: AsRef<[MaybeUninit; N]>
    • MaybeUninit: AsRef<[MaybeUninit]>
    • MaybeUninit: AsMut<[MaybeUninit; N]>
    • MaybeUninit: AsMut<[MaybeUninit]>
    • [MaybeUninit; N]: From<MaybeUninit>
    • Cell: AsRef<[Cell; N]>
    • Cell: AsRef<[Cell]>
    • Cell: AsRef<[Cell]>
    • bool: TryFrom
    • AtomicPtr::update
    • AtomicPtr::try_update
    • AtomicBool::update
    • AtomicBool::try_update
    • AtomicIn::update
    • AtomicIn::try_update
    • AtomicUn::update
    • AtomicUn::try_update
    • cfg_select!
    • mod core::range
    • core::range::RangeInclusive
    • core::range::RangeInclusiveIter
    • core::hint::cold_path
    • ::as_ref_unchecked
    • ::as_ref_unchecked
    • ::as_mut_unchecked
    • Vec::push_mut
    • Vec::insert_mut
    • VecDeque::push_front_mut
    • VecDeque::push_back_mut
    • VecDeque::insert_mut
    • LinkedList::push_front_mut
    • LinkedList::push_back_mut
    • Layout::dangling_ptr
    • Layout::repeat
    • Layout::repeat_packed
    • Layout::extend_packed
  • Il flag «const» è stato applicato nelle funzioni:
    • fmt::from_fn
    • ControlFlow::is_break
    • ControlFlow::is_continue
  • Nelle versioni stabili dell'tooling è stata rimossa la supporto per la comunicazione al compilatore delle specifiche delle proprie piattaforme di destinazione.
  • Le piattaforme di destinazione powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos e aarch64-apple-visionos-sim sono state spostate al secondo livello di supporto, il che implica garanzia di build, ma senza garanzie sul superamento del set di test.

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

  • Canonical ha presentato il server display Mir 2.26, fornendo un insieme di librerie per la creazione di compositori server basato sul protocollo Wayland e includendo funzionalità tipiche dei gestori di finestre e dei server display. Mir è utilizzato in progetti come il gestore composito Miracle, l'interfaccia per chioschi di internet Ubuntu Frame e l'ambiente desktop Miriway.

    La nuova release è notevole per aver aggiunto la possibilità di sviluppare componenti nel linguaggio Rust. È stata implementata una sottosistema alternativo di gestione dell'input in Rust, evdev-rs, ed è iniziato il lavoro su un frontend per Wayland, wayland-rs, realizzato in Rust. Tra i cambiamenti non legati a Rust in Mir, si segnala il supporto per i protocolli Wayland ext_image_copy_capture_v1 e input-triggers.

  • È stata pubblicata la prima release dell'analizzatore di traffico ayaFlow, scritto in Rust e che utilizza la sottosistema del kernel Linux eBPF per intercettare pacchetti di rete (IPv4/TCP/UDP) e frame Ethernet con un impatto minimo sulle prestazioni. Supporta l'ispezione approfondita dei protocolli di livello applicativo (L7), come l'estrazione di TLS SNI e delle interrogazioni DNS durante l'analisi del traffico crittografato. Il sistema supporta la registrazione dello stato attuale delle connessioni in formato DashMap, la memorizzazione della cronologia in SQLite e la fornitura di statistiche tramite REST API per Prometheus.
  • È stata implementata la possibilità di creare applicazioni multithread in Rust, utilizzando le funzioni std::thread ed eseguendole sul lato GPU.

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