Rilascio del linguaggio di programmazione Rust 1.34

ha avuto luogo rilascio del linguaggio di programmazione del sistema Ruggine 1.34, sviluppato 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:

  • Il gestore pacchetti Cargo ha aggiunto strumenti per lavorare con registri di pacchetti alternativi che possono coesistere con il registro pubblico crates.io. Ad esempio, gli sviluppatori di applicazioni proprietarie possono ora utilizzare il proprio registro privato, che può essere utilizzato quando si elencano le dipendenze in Cargo.toml, e applicare un modello di versione simile a crates.io per i loro prodotti, oltre a riferire le dipendenze a entrambi i crate. io e al tuo registro.

    Per aggiungere registri esterni a .cargo/config (situato in $HOME o nella directory del pacchetto)
    previsto sezione “[registri]” e per utilizzare un registro esterno, l'opzione “registro” è apparsa nella descrizione di ciascuna dipendenza in Cargo.toml. Per connettersi a un registro aggiuntivo, è sufficiente inserire il token di autenticazione nel file ~/.cargo/credentials ed eseguire il comando
    "cargo login --registry=my-registry" e pubblicare un pacchetto -
    "cargo pubblicare -registry=il mio-registro";

  • Aggiunto supporto completo per l'utilizzo dell'operatore "?". nei test doctests, consentendoti di utilizzare il codice di esempio dalla documentazione come test. Precedentemente operatore
    "?" potrebbe essere utilizzato per gestire errori durante l'esecuzione del test solo in presenza della funzione “fn main()” o nelle funzioni “#[test]”;

  • Negli attributi personalizzati definiti utilizzando macro procedurali purché la possibilità di utilizzare set arbitrari di token (“#[attr($tokens)]”, “#[attr[$tokens]] e #[attr{$tokens}]”). In precedenza, gli elementi potevano essere specificati solo in una forma ad albero/ricorsiva utilizzando stringhe letterali, ad esempio “#[foo(bar, baz(quux, foo = “bar”))]”, ma ora è possibile utilizzare le enumerazioni (' #[range(0. .10)]') e costruzioni come “#[bound(T: MyTrait)]”;
  • Tipi stabilizzati (tratto) ProvaDa и ProvaInto, consentendo conversioni di tipo con gestione degli errori. Ad esempio, metodi come from_be_bytes con tipi interi utilizzano gli array come input, ma i dati spesso sono di tipo Slice e la conversione tra array e sezioni è problematica da eseguire manualmente. Con l'aiuto di nuovi tratti, l'operazione specificata può essere eseguita al volo tramite una chiamata a .try_into(), ad esempio, "let num = u32::from_be_bytes(slice.try_into()?)". Per le conversioni che hanno sempre esito positivo (ad esempio, dal tipo u8 a u32), è stato aggiunto un tipo di errore Infallibile, consentendo un utilizzo trasparente
    TryFrom per tutte le implementazioni esistenti di "From";

  • La funzione è stata deprecata CommandExt::before_exec, che consentiva l'esecuzione di un gestore prima di eseguire exec, che veniva eseguito nel contesto di un processo figlio biforcato dopo la chiamata fork(). In tali condizioni, alcune risorse del processo genitore, come i descrittori di file e le aree di memoria mappate, potrebbero essere duplicate, il che potrebbe portare a comportamenti indefiniti e al funzionamento errato delle librerie.
    Si consiglia di utilizzare una funzione non sicura invece di before_exec CommandExt::pre_exec.

  • Tipi interi atomici stabilizzati con segno e senza segno di dimensioni comprese tra 8 e 64 bit (ad esempio, AtomicoU8), così come i tipi firmati NonZeroI[8|16|32|64|128].
  • Una nuova parte dell'API è stata spostata nella categoria stabile, inclusi Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] e i metodi SystemTime sono stati stabilizzati ::checked_[add|sub]. Le funzioni iter::from_fn e iter::successors sono state stabilizzate;
  • Per tutti i tipi interi vengono implementati i metodi check_pow, saturating_pow, wrap_pow e overflowing_pow;
  • Aggiunta la possibilità di abilitare le ottimizzazioni in fase di collegamento specificando l'opzione di compilazione "-C linker-plugin-lto".

Fonte: opennet.ru

Aggiungi un commento