Rilascio del linguaggio di programmazione Rust 1.68

È stato pubblicato il rilascio del linguaggio di programmazione general-purpose Rust 1.68, fondato dal progetto Mozilla, ma ora sviluppato sotto gli auspici dell'organizzazione no-profit indipendente Rust Foundation. Il linguaggio si concentra sulla sicurezza della memoria e fornisce i mezzi per ottenere un elevato parallelismo del lavoro evitando l'uso di un Garbage Collector e del runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

I metodi di gestione della memoria di Rust salvano lo sviluppatore da errori durante la manipolazione dei puntatori e proteggono dai problemi che sorgono a causa della gestione della memoria di basso livello, come l'accesso a un'area di memoria dopo che è stata liberata, la dereferenziazione di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, fornire build e gestire le dipendenze, il progetto sviluppa il gestore di pacchetti Cargo. Il repository crates.io è supportato per l'hosting di librerie.

La sicurezza della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietà dell'oggetto, tenendo traccia della durata dell'oggetto (scopi) e valutando la correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Principali innovazioni:

  • Il gestore pacchetti Cargo e il repository crates.io hanno stabilizzato il supporto per il protocollo Sparse, che definisce un nuovo modo di lavorare con un indice che riflette le versioni disponibili di tutti i pacchetti esistenti nel repository. Il nuovo protocollo consente di aumentare significativamente la velocità di lavoro con crates.io e risolvere problemi di ridimensionamento con un'ulteriore crescita del numero di pacchetti nel repository.

    Per ridurre i ritardi causati dal download di un indice completo, Sparse invece di accedere all'indice tramite Git prevede il download diretto su HTTPS solo dei dati dell'indice necessari, coprendo le dipendenze di un particolare progetto. Un nuovo servizio, index.crates.io, viene utilizzato per fornire dati di indice. Per impostazione predefinita, il nuovo protocollo è pianificato per essere utilizzato nel ramo Rust 1.70 e prima, per abilitarlo, è possibile impostare la variabile d'ambiente "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" o aggiungere il parametro 'protocol =' al parametro "[registries. crates-io]" del file .cargo/config.toml 'sparse'.

  • Aggiunta la macro “pin!”, che permette di creare una struttura Pin<&mut T> dall'espressione “T” con pinning locale del suo stato (a differenza di Box::pin, non alloca memoria sull'heap, ma vincola a livello di pila).
  • È stato proposto un gestore predefinito degli errori di allocazione della memoria, utilizzato quando si utilizza il pacchetto alloc standard. Le applicazioni che abilitano solo alloc (senza std) ora chiameranno il gestore "panic!" quando l'allocazione della memoria fallisce, che può facoltativamente essere intercettata utilizzando "#[panic_handler]". I programmi che utilizzano la libreria std continueranno a stampare le informazioni sull'errore su stderr e si bloccheranno.
  • Una nuova porzione dell'API è stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • {core,std}::pin::pin!
    • impl Da per {f32,f64}
    • std::percorso::MAIN_SEPARATOR_STR
    • impl DerefMut per PathBuf
  • L'attributo “const”, che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato nella funzione VecDeque::new.
  • Per funzionare sulla piattaforma Android è ora necessario almeno NDK r25 (API 19), ovvero La versione minima supportata di Android è stata aumentata a 4.4 (KitKat).
  • Il terzo livello di supporto è stato implementato per la piattaforma Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). 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

Aggiungi un commento