A fost lansat versiunea limbajului de programare general Rust 1.79, inițial dezvoltat de proiectul Mozilla, dar acum întreținut sub egida organizației non-profit independente Rust Foundation. Limbajul se concentrează pe operarea sigură cu memoria și oferă uneltele necesare pentru a atinge un înalt grad de paralelism în execuția sarcinilor, fără a utiliza un colector de gunoi și un runtime (runtime-ul se limitează la inițializarea de bază și la suportul bibliotecii standard).
Metodele de gestionare a memoriei în Rust scutesc dezvoltatorul de erori în manipularea pointerilor și protejează împotriva problemelor care apar din lucrul de nivel scăzut cu memoria, cum ar fi accesarea unui spațiu de memorie după ce acesta a fost eliberat, dereferința pointerilor nuli, depășirea limitelor buffer-ului etc. Pentru distribuirea bibliotecilor, asigurarea construirii și gestionarea dependențelor, se dezvoltă managerul de pachete Cargo. Pentru găzduirea bibliotecilor, suportul este oferit prin intermediul repository-ului crates.io.
Lucrul sigur cu memoria este asigurat în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectelor, luarea în considerare a timpului de viață al obiectelor (domeniul de vizibilitate) și evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, instrumente pentru protejarea împotriva suprasaturării numerice, impune inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică conceptul de referințe și variabile imutabile (immutable) din oficiu și oferă o tipizare statică puternică pentru a minimiza erorile logice.
Noutăți principale:
- A fost adăugată suportul pentru constante inline, care pot fi specificate direct în cod prin blocuri „const { … }”, procesate în contextul constantelor și care permit evitarea definirii separate a constantelor. Codul specificat în blocul „const { … }” este evaluat în timpul compilării și utilizat ca o constantă, fără executarea în timpul funcționării programului. Spre deosebire de definiția constantelor prin expresia „const ITEM: … = …”, în blocurile „const { … }” nu este necesar să specifici tipul, deoarece suportă inferența automată a tipurilor. De exemplu, codul cu definiția separată a constantei
const EMPTY: Option<Vec> = None;
let foo = [EMPTY; 100];poate fi înlocuit cu utilizarea pe loc:
let foo = [const { None }; 100];
- A fost stabilizat sintaxa „T: Trait” pentru a specifica constrângeri în poziția tipului asociat, permițând simplificarea expresiilor cu constrângeri încastrate, care anterior necesitau specificarea unui impl Trait încastrat sau mai multor condiții „where”.
- S-a asigurat extinderea automată a timpului de viață al valorilor temporare folosite în construcții „match” și „if”.
let a = if true {
..;
&temp() // timpul de viață va fi extins
} else {
..;
&temp() // timpul de viață va fi extins
}; - A fost stabilizată posibilitatea importării funcției main din alte module și pachete crate.
- La compilarea bibliotecii standard, a fost utilizat flag-ul „-Cforce-frame-pointers=yes”, adăugând date pentru reconstrucția stivei în timpul profilării programelor.
- O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- ::split_at_unchecked
- ::split_at_mut_unchecked
- ::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- ::is_aligned
- ::is_aligned
- NonNull::is_aligned
- ::len
- ::len
- ::is_empty
- ::is_empty
- NonNull::::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- Semnul „const”, care definește capacitatea de utilizare în orice context în locul constantelor, este utilizat în funcții:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Stabilizat
o parte din capacitățile care pot fi utilizate la compilarea în reprezentarea intermediară Webassembly (WASM). - A fost implementat al treilea nivel de suport pentru platformele aarch64-apple-visionos, aarch64-apple-visionos-sim și riscv32ima-unknown-none-elf. Al treilea nivel implică suport de bază, dar fără testare automatizată, publicarea de build-uri oficiale și verificarea capacității de compilare a codului.
- A fost implementat al doilea nivel de suport pentru platformele țintă aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm și x86_64-pc-windows-gnullvm. Al doilea nivel de suport implică o garanție de compilare.
În plus, organizația Rust Foundation, care supraveghează ecosistemul legat de limbajul Rust, a anunțat crearea consorțiului „Safety-Critical Rust Consortium”, destinat utilizării limbajului Rust în soluții care necesită o fiabilitate crescută (Software de siguranță critică), unde o defecțiune ar putea amenința viața oamenilor, dăuna mediului sau duce la daune grave ale echipamentului. La consorțiu s-au alăturat companiile ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle și Woven by Toyota. Printre sarcinile pe care le va rezolva consorțiul se numără elaborarea de ghiduri și dezvoltarea de biblioteci, linters și analizoare statice, precum și aplicarea metodelor de verificare formală a fiabilității și dezvoltarea submixturilor de limbaj pentru sisteme de înaltă fiabilitate.
Proiectele legate de sisteme de înaltă fiabilitate includ Verus — un instrument pentru verificarea corectitudinii codului scris în limbajul Rust. Verificarea se efectuează prin definirea unei specificații care descrie comportamentul acceptabil al codului. În timpul execuției codului executabil, Verus verifică conformitatea cu specificația pentru a confirma corectitudinea funcționării.
Sursa: opennet.ro
