Rilascio del linguaggio di programmazione Rust 1.47

Pubblicato rilascio 1.47 del linguaggio di programmazione di sistema Rust, sviluppato dal progetto Mozilla. Questo linguaggio si concentra sulla gestione sicura della memoria, fornendo una gestione automatica della memoria e strumenti per raggiungere un alto livello di parallelismo nell'esecuzione dei compiti, evitando l'uso di garbage collector e runtime (il runtime si riduce a una inizializzazione di base e al supporto della libreria standard).

La gestione automatica della memoria in Rust libera lo sviluppatore da errori durante la manipolazione dei puntatori e protegge da problemi derivanti da un lavoro a basso livello con la memoria, come l'accesso alla memoria dopo che è stata liberata, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, l'assicurazione della build e la gestione delle dipendenze, è in fase di sviluppo un gestore di pacchetti Cargo. Per l'hosting delle librerie è supportato un repository crates.io.

Principali novità:

  • È stata implementata la supporto per i trait per array dimensione arbitraria. In precedenza, a causa dell'impossibilità di definire funzioni generiche per tutti i valori interi, la libreria standard forniva supporto integrato per i trait solo per array di dimensioni non superiori a 32 elementi (i trait per ogni dimensione erano definiti staticamente). Grazie all'introduzione delle funzionalità dei generici costanti («const generics»), è diventata possibile la definizione di funzioni generiche per array di qualsiasi dimensione, anche se attualmente non sono incluse nelle funzionalità stabili del linguaggio, sebbene siano implementate nel compilatore e ora coinvolti nella libreria standard per i trait degli array di qualsiasi dimensione.

    Ad esempio, la seguente costruzione in Rust 1.47 porterà a stamparne il contenuto, mentre in precedenza avrebbe generato un errore:

    fn main() {
    let xs = [0; 34];

    println!(«{:?}», xs);
    }

  • È stata garantita l'emissione di tracciamenti più brevi (backtrace) visualizzati in situazioni di errore. Sono stati esclusi dalla traccia gli elementi non rilevanti nella maggior parte dei casi, ma che affollano l'output e distraggono dall'individuazione delle cause principali del problema. Per restituire la traccia completa, è possibile utilizzare la variabile d'ambiente "RUST_BACKTRACE=full". Ad esempio, per il codice

    fn main() {
    panic!();
    }

    precedentemente veniva visualizzata una traccia di 23 passaggi, mentre ora sarà ridotta a
    3 passaggi che catturano subito l'essenza:

    thread ‘main’ panicked at ‘explicit panic’, src/main.rs:2:5
    stack backtrace:
    0: std::panicking::begin_panic
    at /rustc/d…d75a/library/std/src/panicking.rs:497
    1: playground::main
    at ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    at /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Il compilatore rustc è stato aggiornato per utilizzare LLVM 11 (Rust utilizza LLVM come backend per la generazione del codice). È comunque mantenuta la possibilità di compilare con vecchie versioni di LLVM, fino alla versione 8, ma per impostazione predefinita (in rust-lang/llvm-project) ora viene utilizzato LLVM 11. Il rilascio di LLVM 11 è atteso nei prossimi giorni.
  • Sulla piattaforma Windows, il compilatore rustc supporta l'attivazione dei controlli di integrità del flusso di esecuzione (Control Flow Guard), attivabili tramite il flag "-C control-flow-guard". Su altre piattaforme, questo flag viene attualmente ignorato.
  • È stata tradotta una nuova serie di API in una versione stabile, tra cui sono state stabilizzate
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Result::as_deref,
    Result::as_deref_mut,
    Vec::leak,
    pointer::offset_from,
    f32::TAU e
    f64::TAU.
  • Il flag "const", che definisce la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, è stato applicato nei metodi:
    • new per tutti gli interi diversi da zero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub e saturating_mul per tutti gli interi;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace e is_ascii_control per i tipi char e u8.
  • Per FreeBSD utilizzato il toolkit da FreeBSD 11.4 (FreeBSD 10 non supporta LLVM 11).

Fonte: opennet.ru

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