È stata pubblicata la versione del linguaggio di programmazione di sistema Rust 1.52, nato dal progetto Mozilla, ma ora sviluppato sotto l'egida dell'organizzazione no-profit indipendente Rust Foundation. 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:
- Rimosso il vincolo all'ordine di esecuzione dei comandi “cargo check” e “cargo clippy”. In precedenza, la chiamata a "cargo clippy" dopo "cargo check" non avviava l'utilità clippy (linter) a causa della mancanza di separazione della cache per queste modalità di controllo. Ora questo problema è stato risolto e l’ordine in cui vengono chiamati “cargo clippy” e “cargo check” non ha più importanza.
- Una nuova porzione dell'API è stata trasferita alla categoria stabile, inclusi i seguenti metodi che sono stati stabilizzati:
- Argomenti::as_str
- carattere::MAX
- char::REPLACEMENT_CHARACTER
- char::VERSIONE_UNICODE
- char::decode_utf16
- char::da_cifra
- char::from_u32_non selezionato
- char::da_u32
- slice::punto_partizione
- str::rsplit_once
- str::split_once
- L'attributo “const”, che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato nei metodi:
- char::len_utf8
- char::len_utf16
- char::to_ascii_uppercase
- char::to_ascii_lowercase
- char::eq_ignore_ascii_case
- u8::to_ascii_uppercase
- u8::to_ascii_lowercase
- u8::eq_ignore_ascii_case
- Aggiunto lint check unsafe_op_in_unsafe_fn per determinare se il codice non sicuro utilizzato nelle funzioni non sicure è inquadrato da blocchi non sicuri.
- È consentito eseguire il cast di puntatori modificabili agli array sotto forma di puntatori al tipo dell'elemento dell'array. lascia mut x: [usa; 2] = [0, 0]; let p = &mut x as *mut usize; let p = &mut x as *const usize;
- 9 nuovi controlli sono stati aggiunti a clippy (linter).
- Il gestore dei pacchi cargo ora supporta il campo “manifest_path” in JSON per i pacchi. Aggiunto il supporto per specificare le informazioni sulla licenza in formato SPDX 3.11 al repository crates.io.
- È consentito specificare più filtri durante l'esecuzione dei test, ad esempio l'esecuzione di "cargo test - foo bar" eseguirà tutti i test corrispondenti alle maschere "foo" e "bar".
- Il toolkit LLVM predefinito è stato aggiornato a LLVM 12.
- Il terzo livello di supporto è stato implementato per le piattaforme s390x-unknown-linux-musl, riscv32gc-unknown-linux-musl, riscv64gc-unknown-linux-musl e powerpc-unknown-openbsd. Il terzo livello prevede il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali o verifica se il codice può essere creato.
Fonte: opennet.ru