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.
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()
}
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.