Rilascio del linguaggio di programmazione Rust 1.39

pubblicato rilascio del linguaggio di programmazione del sistema Ruggine 1.39, 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 un garbage collector o un runtime.

La gestione automatica della memoria di Rust libera lo sviluppatore dalla manipolazione dei puntatori e protegge dai problemi derivanti dalla manipolazione della memoria di basso livello, come accessi alla memoria after-free, dereferenziazioni di puntatori nulli, sovraccarichi del buffer e simili. È in fase di sviluppo un gestore di pacchetti per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze del progetto. ufficio, che ti consente di ottenere le librerie necessarie per il programma in un clic. È supportato un repository per ospitare le librerie casse.io.

Il principale innovazioni:

  • Stabilizzato una nuova sintassi di programmazione asincrona basata sulla funzione "async", sul blocco async move { ... } e sull'operatore ".await", che semplifica la scrittura di gestori che non blocchino il flusso di comandi principale. Rispetto all'API offerta in precedenza per l'I/O asincrono, i costrutti async/.await sono semplici da comprendere, altamente leggibili e consentono di implementare interazioni asincrone complesse utilizzando tecniche familiari di controllo del flusso basate su cicli, istruzioni condizionali ed eccezioni.

    La sintassi Async-await consente di creare funzioni che possono sospendere la propria esecuzione, restituire il controllo al thread principale e quindi riprendere l'esecuzione da dove era stata interrotta. Ad esempio, una pausa di questo tipo è necessaria durante l'elaborazione dell'I/O, in cui è possibile svolgere altro lavoro in attesa dell'arrivo del successivo dato. Le funzioni e i blocchi definiti con "async fn" e "async move" restituiscono un tratto Futuro, che definisce una rappresentazione del calcolo asincrono differito. È possibile avviare direttamente un calcolo differito e ottenere il risultato utilizzando l'operatore “.await”. Nessuna azione viene eseguita o pianificata in anticipo finché non viene chiamato .await, consentendo la creazione di costrutti nidificati complessi senza ulteriore sovraccarico.

    asincrono fn prima_funzione() -> u32 { .. }
    ...
    lascia che futuro = prima_funzione();
    ...
    lascia il risultato: u32 = future.await;

  • Stabilizzato "#![feature(bind_by_move_pattern_guards)]", consentendo l'uso di variabili con il tipo di associazione "per mossa" nei modelli e utilizza i riferimenti a queste variabili nella sezione "if" dell'espressione "stile". Ad esempio, ora sono consentite le seguenti costruzioni:

    fn principale() {
    let array: Box<[u8; 4]> = Casella::nuovo([1, 2, 3, 4]);

    corrispondenza array {
    numeri
    if nums.iter().sum::() == 10

    => {
    drop(numeri);
    }
    _ => irraggiungibile!(),
    }
    }

  • Indicazione consentita attributi quando si definiscono parametri di funzione, chiusure e puntatori a funzione. Sono supportati gli attributi di compilazione condizionale (cfg, cfg_attr) che controllano la diagnostica tramite lint (consenti, avvisa, nega e vieta) e gli attributi di chiamata di macro ausiliarie.

    fn lente(
    #[cfg(windows)] slice: &[u16], // utilizza il parametro su Windows
    #[cfg(not(windows))] slice: &[u8], // utilizzare in altri sistemi operativi
    ) -> usa {
    fetta.len()
    }

  • Avvertenze sui problemi individuati durante il controllo del prestito delle variabili (borrow checker) utilizzando la tecnica NLL (Non-Lexical Lifetimes), tradotto nella categoria degli errori fatali. Ricordiamo che il sistema di verifica basato su un nuovo meccanismo di presa in considerazione della durata delle variabili prese in prestito ha permesso di identificare alcuni problemi che passavano inosservati al vecchio codice di verifica. Poiché l'output degli errori per tali controlli potrebbe influire sulla compatibilità con il codice precedentemente funzionante, inizialmente venivano emessi avvisi invece di errori. Gli avvisi ora sono stati sostituiti con errori durante l'esecuzione in modalità Rust 2018. Nella prossima versione, l'output degli errori verrà implementato anche nella modalità Rust 2015, che eliminerà finalmente il vecchio controllo dei prestiti;
  • L'attributo “const”, che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, viene utilizzato per le funzioni Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrap_abs e overflowing_abs;

  • Una nuova porzione di API è stata trasferita nella categoria stabile, inclusi i metodi che sono stati stabilizzati
    Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;

  • Il gestore dei pacchetti cargo ora ha la possibilità di utilizzare l'estensione “.toml” per i file di configurazione. Aggiunto supporto preliminare per la creazione della libreria standard direttamente da Cargo. Aggiunto il flag "--workspace", in sostituzione del controverso flag "--all". Un nuovo campo è stato aggiunto ai metadati "pubblicare“, che consente di pubblicare le dipendenze specificando un tag git e un numero di versione. Aggiunta l'opzione di test "-Ztimings" per generare un report HTML dei tempi di esecuzione delle varie fasi di compilazione.
  • Nel compilatore rusticc, i messaggi diagnostici includono il taglio delle code del codice che non rientrano nel terminale. Fornito terzo livello di supporto per le piattaforme di destinazione
    i686-unknown-uefi e sparc64-unknown-openbsd. Il terzo livello prevede il supporto di base, ma senza test automatizzati e pubblicazione di build ufficiali.

Fonte: opennet.ru

Aggiungi un commento