Rilascio del linguaggio di programmazione Rust 1.57

È stata pubblicata la versione 1.57 del linguaggio di programmazione sistemica Rust, originariamente sviluppato da Mozilla e ora sostenuto dalla Rust Foundation, un'organizzazione indipendente e non profit. Il linguaggio è incentrato sulla gestione sicura della memoria, offre gestione automatica della memoria e fornisce strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, il tutto senza l'utilizzo di garbage collector e runtime (il runtime si limita alla baseline initialization e alla gestione della libreria standard).

La gestione automatica della memoria in Rust solleva gli sviluppatori dagli errori nella manipolazione dei puntatori e protegge da problemi derivanti dal lavoro a basso livello con la memoria, come l'accesso a aree di memoria già liberate, la dereferenziazione di puntatori nulli, il superamento dei limiti di un buffer, ecc. Per la distribuzione delle librerie, la costruzione e la gestione delle dipendenze, è in fase di sviluppo il gestore di pacchetti Cargo. Per l'hosting delle librerie, è supportato il repository crates.io.

Novità principali:

  • L'uso del macro "panic!" è stato stabilizzato nei contesti creati durante la compilazione, come le dichiarazioni "const fn". Inoltre, oltre all'uso di "panic!" nelle dichiarazioni const, è permesso utilizzare il macro "assert!" e alcuni altri API della libreria standard. La stabilizzazione non copre ancora tutta l'infrastruttura di formattazione, quindi nella sua forma attuale, il macro "panic!" può essere utilizzato solo con stringhe statiche (panic!("…")) o con un singolo valore interpolato "&str" durante la sostituzione (panic!("{}", a)), che deve limitarsi alla sostituzione "{}" senza specificatori di formattazione e altri trait. In futuro, l'applicabilità dei macro nei contesti costanti sarà ampliata, ma le capacità stabilizzate sono già sufficienti per eseguire controlli assert a tempo di compilazione: const _: () = assert!(std::mem::size_of::() == 8); const _: () = assert!(std::mem::size_of::() == 1);
  • Nel gestore di pacchetti Cargo è consentito utilizzare profili con nomi arbitrari, non limitati a 'dev', 'release', 'test' e 'bench'. Ad esempio, per attivare l'ottimizzazione durante il collegamento (LTO) solo nella creazione delle versioni finali del prodotto, è possibile creare un profilo 'production' in Cargo.toml e aggiungere il flag 'lto = true'. È necessario specificare un profilo esistente da cui ereditare le impostazioni predefinite quando si definiscono profili personalizzati. Nell'esempio seguente, è creato un profilo 'production' che integra il profilo 'release' attivando il flag 'lto = true'. Il profilo stesso è attivato chiamando cargo con l'opzione '--profile production', e gli artefatti di build saranno collocati nella cartella 'target/production'. [profile.production] inherits = 'release' lto = true
  • Stabilizzato l'uso di try_reserve per i tipi Vec, String, HashMap, HashSet e VecDeque, che consente di riservare in anticipo spazio per un certo numero di elementi di un determinato tipo, riducendo così la frequenza delle operazioni di allocazione della memoria e evitando terminazioni anomale durante l'esecuzione a causa di mancanza di memoria.
  • È consentito l'uso di macro con parentesi graffe in espressioni come «m!{ .. }.method()» e «m!{ .. }?».
  • Ottimizzata l'esecuzione delle funzioni File::read_to_end e read_to_string.
  • Il supporto per la specifica Unicode è stato aggiornato alla versione 14.0.
  • Aumentato il numero delle funzioni contrassegnate come «#[must_use]» per generare un avviso in caso di ignoranza del valore restituito, aiutando così a identificare errori causati dall'assunzione che una funzione modifichi valori invece di restituire un nuovo valore.
  • Aggiunto un backend sperimentale per la generazione di codice utilizzando libgccjit.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Il flag «const», che determina la possibilità di utilizzo in qualsiasi contesto invece delle costanti, è stato applicato alla funzione hint::unreachable_unchecked.
  • È stato implementato il terzo livello di supporto per le piattaforme armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi e armv7a-kmc-solid_asp3-eabihf. Il terzo livello prevede un supporto di base, ma senza testing automatico, pubblicazione di build ufficiali e verifica della possibilità di compilazione del codice.

Fonte: opennet.ru

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