Lingua di prugrammazione Rust versione 1.38

publicatu liberazione di lingua di prugrammazione di u sistema Ruggine 1.38, fundatu da u prughjettu Mozilla. A lingua fucalizza nantu à a sicurità di a memoria, furnisce una gestione automatica di a memoria, è furnisce un mezzu per ottene un altu parallelismu di u travagliu senza usà un cullettore di basura o runtime.

A gestione automatica di a memoria di Rust libera u sviluppatore da a manipulazione di u puntatore è prutegge da i prublemi derivanti da a manipulazione di a memoria di livellu bassu, cum'è l'accessu à a memoria dopu, i dereferences di puntatori nulli, i buffer overruns, è simili. Un gestore di pacchetti hè sviluppatu per distribuisce biblioteche, assicurà l'assemblea è gestisce e dipendenze da u prugettu. Cargo, chì permette di ottene e librerie necessarie per u prugramma in un clic. Un repository hè supportatu per ospitare biblioteche crates.io.

menu innovazioni:

  • Aggiuntu un modu di compilazione pipelined (pipelined), in quale a custruzzione di un pacchettu di crate dipendente principia appena i metadati di dependenza diventanu dispunibuli, senza aspittà chì a so compilazione finisci. Quandu si compie un pacchettu, i dependenzii ùn anu micca bisognu à esse cumplettamente assemblati, solu definisce i metadati, chì includenu listi di tipi, dipendenze è elementi esportati. I metadati sò dispunibuli prima di u prucessu di compilazione, cusì i pacchetti ligati ponu avà esse compilati assai prima. Quandu si custruisce un pacchettu unicu, u modu prupostu ùn affetta micca u rendiment, ma se a custruzione copre i pacchetti cù dependenzii ramificati, u tempu di creazione generale pò esse ridutta da 10-20%;
  • Assicura a rilevazione di l'usu incorrectu di e funzioni std::mem::non inizializatu и std::mem::zeroed. Per esempiu, std::mem::uninitialized hè cunvene per creà rapidamente array, ma inganna u compilatore perchè pare esse inizializatu, ma in realtà u valore resta micca inizializatu. A funzione mem::uninitialized hè digià marcata cum'è obsoleta è hè cunsigliatu di utilizà un tipu intermediariu invece Forse Unità. In quantu à mem::zeroed, sta funzione pò causà prublemi cù tipi chì ùn ponu micca accettà valori zero.

    Per aiutà à identificà u cumportamentu indefinitu, a nova versione aghjusta un verificatu di lint à u compilatore chì detecta alcuni prublemi cù mem::uninitialized o mem::zeroed. Per esempiu, avà avete un errore quandu pruvate d'utilizà mem::uninitialized o mem::zeroed cù i tipi &T è Box‹T›, chì rapprisentanu l'uggetti di puntatore chì ùn ponu micca accettà valori nulli;

  • L'attributu "#[deprecated]" hè statu allargatu per permette à i pacchetti di scatula esse marcati obsoleti è pianificati per a futura eliminazione. Da Rust 1.38, stu attributu pò ancu esse usatu per macros;
  • Aggiunta l'abilità di utilizà l'attributu "#[global_allocator]" in i submoduli;
  • Funzione aghjuntu std::any::type_name, chì vi permette di truvà u nome di u tipu, chì pò esse utile per scopi di debugging. Per esempiu, durante l'esekzione di u prugramma pudete scopre per quale tipu a funzione hè stata chjamata:

    fn gen_value‹T: Default>() -› T {
    println!("Inizializà una istanza di {}", std::any::type_name::‹T›());
    Default::default()
    }

    fn main() {
    lascia _: i32 = gen_value(); # "i32" serà stampatu
    let _: String = gen_value(); # imprimerà "alloc::string::String"
    }

  • Funzioni estese di a biblioteca standard:
    • slice::{concat, connect, join} pò avà piglià u valore &[T] in più di &T;
    • "*const T" è "*mut T" implementanu avà marcatore::Unpin;
    • "Arc‹[T]›" è "Rc‹[T]›" implementanu avà FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} avà implementà DoubleEndedIterator.
    • ascii::EscapeDefault implementa Clone è Display.
  • Una nova parte di l'API hè stata trasferita à a categuria stabile, cumprese i metudi chì sò stati stabilizati
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Duration::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Duration::div_f{32|64},
    • Duration::from_secs_f{32|64},
    • Duration::mul_f{32|64},
    • operazioni di divisione cù u restu
      div_euclid è rem_euclid per tutti i primitivi interi;

  • Aghjunghje supportu per specificà l'opzione "--features" parechje volte per attivà diverse funzioni in u gestore di pacchetti di carica;
  • U compilatore furnisce un terzu scelta supportu per piattaforme di destinazione aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-unknown, armvux-unknown -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl è riscv7i-unknown-none-elf. U terzu livellu implica un supportu basicu, ma senza teste automatizate è publicazione di custruzzioni ufficiali.

Source: opennet.ru

Add a comment