Rilascio del linguaggio di programmazione Rust 1.47

È stata pubblicata la versione 1.47 del linguaggio di programmazione del sistema Rust, nato dal progetto Mozilla. Il linguaggio si concentra sulla sicurezza della memoria, fornisce la gestione automatica della memoria e fornisce i mezzi per ottenere un elevato parallelismo delle attività senza utilizzare un garbage collector o un runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

La gestione automatica della memoria di Rust elimina gli errori durante la manipolazione dei puntatori e protegge dai problemi derivanti dalla manipolazione della memoria di basso livello, come l'accesso a una regione di memoria dopo che è stata liberata, dereferenziazioni di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze, il progetto sta sviluppando il gestore di pacchetti Cargo. Il repository crates.io è supportato per ospitare le librerie.

Principali innovazioni:

  • Implementato il supporto per i tratti per array di dimensioni arbitrarie. In precedenza, a causa dell'impossibilità di definire funzioni generiche per tutti i valori interi, la libreria standard forniva il supporto dei tratti integrato solo per array con dimensioni fino a 32 elementi (i tratti per ciascuna dimensione erano definiti staticamente). Grazie alla creazione della funzionalità const generics, è diventato possibile definire funzioni generiche per qualsiasi dimensione di array, ma non sono ancora incluse nelle funzionalità stabili del linguaggio, sebbene siano implementate nel compilatore e ora siano utilizzate nella libreria standard per tipi di array di qualsiasi dimensione.
    Ad esempio, il seguente costrutto in Rust 1.47 stamperà il contenuto di un array, anche se in precedenza avrebbe restituito un errore:

fn principale() {
sia xs = [0; 34];
println!("{:?}", xs);
}

  • Fornito output di tracce più brevi (backtrace), output in situazioni di emergenza. Gli elementi che nella maggior parte delle situazioni non interessano, ma ingombrano l'output e distolgono l'attenzione dalle cause primarie del problema, vengono esclusi dalla traccia. Per restituire una traccia completa, è possibile utilizzare la variabile d'ambiente "RUST_BACKTRACE=full". Ad esempio, per il codice

fn principale() {
panico!();
}

In precedenza, la traccia veniva prodotta in 23 fasi, ma ora sarà ridotta a 3 fasi, permettendoti di coglierne immediatamente l'essenza:

thread 'main' in preda al panico per 'panico esplicito', src/main.rs:2:5
backtrace dello stack:
0: std::panicking::begin_panic
in /rustc/d…d75a/library/std/src/panicking.rs:497
1: parco giochi::principale
in ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
in /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Il compilatore rusticc è stato aggiornato per essere compilato utilizzando LLVM 11 (Rust utilizza LLVM come backend per la generazione del codice). Allo stesso tempo, viene mantenuta la possibilità di creare con il vecchio LLVM, fino alla versione 8, ma per impostazione predefinita (in ruggine-lang/llvm-project) viene ora utilizzato LLVM 11. Il rilascio di LLVM 11 è previsto nei prossimi giorni.
  • Sulla piattaforma Windows, il compilatore rusticc fornisce il supporto per abilitare i controlli di integrità del flusso di controllo (Control Flow Guard), attivato utilizzando il flag “-C control-flow-guard”. Su altre piattaforme questo flag per ora viene ignorato.
  • Una nuova porzione dell'API è stata trasferita alla categoria stabile, inclusi Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from stabilizzato , f32::TAU e f64::TAU.
  • L'attributo “const”, che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato nei metodi:
    • nuovo per tutti i numeri interi diversi da zero;
    • check_add, check_sub, check_mul, check_neg, check_shl, check_shr, saturating_add, saturating_sub e saturating_mul per tutti i numeri 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 viene utilizzato il toolkit di FreeBSD 11.4 (FreeBSD 10 non supporta LLVM 11).

Preso da opennet.ru

Fonte: linux.org.ru

Aggiungi un commento