Rilascio del linguaggio di programmazione Rust 1.37

pubblicato rilascio del linguaggio di programmazione del sistema Ruggine 1.37, 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:

  • Nel compilatore rusticc purché supporto per l'ottimizzazione basata sui risultati della profilazione del codice (PGO, Profile-Guided Optimization),
    consentendo di generare un codice più ottimale in base all'analisi delle statistiche accumulate durante l'esecuzione del programma. Per generare un profilo, viene fornito il flag "-C profile-generate" e per utilizzare il profilo durante l'assemblaggio - "-C profile-use" (inizialmente, il programma viene assemblato con il primo flag, gira intorno e dopo averlo creato il profilo, si ricompone con la seconda bandiera);

  • Quando si esegue il comando "cargo run", comodo da utilizzare per testare rapidamente le applicazioni della console, è stata aggiunta la possibilità di selezionare automaticamente un file eseguibile da eseguire se nel pacchetto sono presenti più file eseguibili. Il file predefinito da eseguire è determinato tramite la direttiva default-run nella sezione [package] con i parametri del pacchetto, che consente di evitare di specificare esplicitamente il nome del file tramite il flag “-bin” ogni volta che si esegue “cargo run”;
  • Il comando “cargo seller”, precedentemente fornito come pacchetto separato. Il comando consente di organizzare il lavoro con una copia locale delle dipendenze: dopo aver eseguito "cargo seller", tutti i codici sorgente delle dipendenze del progetto vengono scaricati da crates.io in una directory locale, che può quindi essere utilizzata per lavorare senza accedere a crate. io (dopo aver eseguito il comando, viene mostrato un suggerimento per modificare la configurazione per utilizzare la directory per le build). Questa funzionalità è già utilizzata per organizzare la consegna del compilatore rusticc con il confezionamento di tutte le dipendenze in un archivio con il rilascio;
  • È ora possibile creare collegamenti alle opzioni di enumerazione utilizzando alias di tipo (ad esempio, nel corpo della funzione “fn increment_or_zero(x: ByteOption) è possibile specificare “ByteOption::None => 0”), digitare costrutti di calcolo (‹ MyType‹.. ››::option => N) oppure Self accessi (nei blocchi c &self è possibile specificare “Self::Quarter => 25”);
  • Aggiunta la possibilità di creare costanti senza nome nelle macro. Invece di definire il nome dell'elemento in "const", ora puoi utilizzare il carattere "_" per selezionare dinamicamente un identificatore non ripetuto, evitando conflitti di nome quando si richiama nuovamente la macro;
  • Aggiunta la possibilità di utilizzare l'attributo "#[repr(align(N))" con enumerazioni utilizzando una sintassi simile alla definizione di una struttura AlignN‹T› con allineamento e quindi utilizzando AlignN‹MyEnum›;
  • Una nuova parte dell'API è stata spostata nella categoria stabile, inclusi BufReader::buffer, BufWriter::buffer e
    Cella::da_mut,
    Cella::come_fetta_di_celle,
    DoubleEndedIterator::nth_back,
    Opzione::xor
    {i,u}{8,16,64,128,dimensione}::bit_inversi, Avvolgimento::bit_inversi e
    slice::copia_all'interno.

Inoltre si può notare inizio dei test progetto Asincrono-std, che offre una variante asincrona della libreria standard Rust (un port della libreria std, in cui tutte le interfacce sono offerte in una versione asincrona e sono pronte per l'uso con la sintassi async/await).

Fonte: opennet.ru

Aggiungi un commento