Rilascio del linguaggio di programmazione Rust 1.47

pubblicato versione 1.47 del linguaggio di programmazione del sistema Ruggine, fondato dal progetto Mozilla. Il linguaggio si concentra sulla sicurezza della memoria, fornisce la gestione automatica della memoria e fornisce un mezzo per ottenere un elevato parallelismo delle attività senza utilizzare netturbino и runtime (il runtime si riduce all'inizializzazione di base e alla manutenzione della libreria standard).

La gestione automatica della memoria di Rust salva lo sviluppatore da errori durante la manipolazione dei puntatori e protegge dai problemi che sorgono a causa della manipolazione della memoria di basso livello, come l'accesso a un'area di memoria dopo che è stata liberata, il dereferenziamento di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze, il progetto sviluppa un gestore di pacchetti ufficio. È supportato un repository per ospitare le librerie casse.io.

Il principale innovazioni:

  • Supporto implementato per i tipi matrici qualsiasi dimensione. 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à dei generici costanti (“const generics”), è diventato possibile definire funzioni generiche per qualsiasi dimensione di array, ma non sono ancora incluse nelle funzionalità del linguaggio stabile, sebbene siano implementate nel compilatore e siano Ora coinvolto nella libreria standard per tratti 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 emessa in 23 fasi, ma ora sarà ridotta a
    3 passaggi che ti permettono di coglierne subito 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 (Ruggine usi LLVM come backend per generazione del codice). Allo stesso tempo, viene mantenuta la possibilità di creare con LLVM precedenti, fino alla versione 8, ma per impostazione predefinita (in progetto ruggine-lang/llvm) ora utilizza LLVM 11. LLVM 11 dovrebbe essere rilasciato 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 nella categoria stabile, compresa quella stabilizzata
    Identificazione::new_raw,
    Intervallo::è_vuoto,
    RangeInclusive::is_empty,
    Risultato::as_deref,
    Risultato::as_deref_mut,
    Vec::perdita,
    puntatore::offset_da,
    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 coinvolti toolkit da FreeBSD 11.4 (FreeBSD 10 non supporta LLVM 11).

Fonte: opennet.ru

Aggiungi un commento