A liberazione di a lingua di prugrammazione Rust 1.64 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).
I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.
A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.
Innuvazioni principali:
- I requisiti per l'ambiente Linux in u compilatore, u gestore di pacchetti Cargo è a libreria standard libstd sò stati aumentati - i requisiti minimi per Glibc sò stati elevati da a versione 2.11 à 2.17, è u kernel Linux da a versione 2.6.32 à 3.2. E restrizioni s'applicanu ancu à eseguibili di l'applicazione Rust custruiti cù libstd. I kit di distribuzione RHEL 7, SLES 12-SP5, Debian 8 è Ubuntu 14.04 rispondenu à i novi requisiti. U supportu per RHEL 6, SLES 11-SP4, Debian 7 è Ubuntu 12.04 serà discontinuatu. L'utilizatori chì utilizanu eseguibili Rust-built in ambienti cù un kernel Linux più anticu sò incuraghjiti à aghjurnà i so sistemi, stà in versioni più vechje di u compilatore, o mantene a so propria libstd fork cù strati per mantene a cumpatibilità.
Trà i motivi per finisce u supportu per i sistemi Linux più vechji sò risorse limitate per cuntinuà à mantene a cumpatibilità cù ambienti più vechji. U supportu per a legacy Glibc richiede l'usu di strumenti legacy quandu si verifica in un sistema di integrazione cuntinuu, di fronte à l'aumentu di i requisiti di versione in LLVM è utilità di compilazione incruciata. L'aumentu di i requisiti di a versione di u kernel hè dovutu à a capacità di utilizà novi chjamati di u sistema in libstd senza a necessità di mantene e strati per assicurà a cumpatibilità cù i kernels più vechji.
- U trattu IntoFuture hè statu stabilizatu, chì s'assumiglia à IntoIterator, ma difiere di l'ultimi utilizendu ".await" invece di "for ... in ..." loops. Quandu hè cumminatu cù IntoFuture, a chjave ".await" pò aspittà micca solu un trattu Future, ma ancu qualsiasi altri tipi chì ponu esse cunvertiti in un Futuru.
- L'utilità di l'analizzatore di ruggine hè inclusa in a cullizzioni di utilità furnite cù e versioni di Rust. L'utilità hè ancu dispunibule per a stallazione cù rustup (component rustup add rust-analyzer).
- U gestore di pacchetti Cargo include l'eredità di u spaziu di travagliu per eliminà a duplicazione di i valori di u campu cumuni trà i pacchetti, cum'è e versioni Rust è URL di repository. Hè aghjustatu ancu supportu per a custruzione di parechje piattaforme di destinazione à una volta (pudete avà specificà più di un paràmetru in l'opzione "--target").
- Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
- future::IntoFuture
- num::NonZero*::checked_mul
- num::NonZero*::checked_pow
- num::NonZero*::saturating_mul
- num::NonZero*::saturating_pow
- num::NonZeroI*::abs
- num::NonZeroI*::checked_abs
- num::NonZeroI*::overflowing_abs
- num::NonZeroI*::saturating_abs
- num::NonZeroI*::unsigned_abs
- num::NonZeroI*::wrapping_abs
- num::NonZeroU*::checked_add
- num::NonZeroU*::checked_next_power_of_two
- num::NonZeroU*::saturating_add
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- Tipi C-compatibili, stabilizzati prima in u modulu std::ffi, sò stati aghjuntu à u core è a libreria alloc:
- core::ffi::CStr
- core::ffi::FromBytesWithNulError
- alloc::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- I tipi C stabilizzati prima in u modulu std::os::raw sò stati aghjuntu à i moduli core::ffi è std::ffi (per esempiu, i tipi c_uint è c_ulong sò stati pruposti per i tipi C uint è ulong):
- ffi::c_char
- ffi::c_double
- ffi::c_float
- ffi::c_int
- ffi::c_long
- ffi::c_longlong
- ffi::c_schar
- ffi::c_short
- ffi::c_uchar
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ushort
- I gestori di livellu bassu sò stati stabilizati per l'usu cù u mecanismu Poll (in u futuru hè previstu di furnisce una API simplificata chì ùn hà micca bisognu di l'usu di strutture di livellu bassu cum'è Pull and Pin):
- futuru::poll_fn
- compitu::pronti!
- L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in a funzione slice::from_raw_parts.
- Per almacenà e dati più compactamente, u layout di memoria di e strutture Ipv4Addr, Ipv6Addr, SocketAddrV4 è SocketAddrV6 hè stata cambiata. Ci pò esse un prublema di cumpatibilità cù pacchetti unichi di cassa chì utilizanu std::mem::transmute per a manipulazione di e strutture à livellu bassu.
- A custruzione di u compilatore di ruggine per a piattaforma Windows usa l'ottimisazioni PGO (ottimisazione guidata da u prufilu), chì hà permessu di aumentà u rendiment di compilazione di codice da 10-20%.
- U compilatore hà implementatu un novu avvisu nantu à i campi inutilizati in certe strutture.
Inoltre, pudete nutà u rapportu di statutu nantu à u sviluppu di una implementazione alternativa di u compilatore di lingua Rust, preparatu da u prughjettu gccrs (GCC Rust) è appruvatu per l'inclusione in u GCC. Dopu avè integratu u frontend, l'arnesi standard di GCC ponu esse aduprati per cumpilà i prugrammi in a lingua Rust senza a necessità di stallà u compilatore rustc, custruitu cù sviluppi LLVM. Sempre chì u sviluppu hè in traccia, è salvu ogni prublema imprevista, u frontend di Rust serà integratu in a versione GCC 13 prevista per maghju di l'annu prossimu. L'implementazione GCC 13 di Rust serà una versione beta, micca ancu attivata per difettu.
Source: opennet.ru
