Lansarea Rust 1.99.0. Microsoft a inclus Rust printre limbile de bază.

Versiunea 1.99 a limbajului de programare Rust a fost lansată, fiind inițial un proiect Mozilla, dar acum dezvoltat sub auspiciile organizației non-profit independente Rust Foundation. Limbajul se concentrează pe siguranța lucrului cu memoria și oferă instrumente pentru atingerea unui înalt grad de paralelism în execuția sarcinilor, fără a necesita un garbage collector și cu un runtime minim (care se limitează la inițializarea de bază și la menținerea bibliotecii standard).

Metodele de gestionare a memoriei în Rust sunt orientate spre eliminarea erorilor în manipularea pointerilor și protejarea împotriva problemelor care apar din lucrul la nivel de memorie, cum ar fi accesarea unei zone de memorie după eliberarea ei, dereferentierea pointerilor nuli, depășirea limitelor buffer-ului etc. Pentru distribuirea bibliotecilor, asigurarea compilării și gestionarea dependențelor, proiectul se dezvoltă cu ajutorul managerului de pachete Cargo. Un depozit pentru biblioteci este susținut la 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 introdusă capacitatea de a crea funcții în Rust cu un număr variabil de argumente (variadic), exportate pentru a fi apelate din proiecte în limbajul C (C ABI). Ultimul element al listei de parametri în astfel de funcții poate fi specificat prin construcția „…”, care este procesată în Rust cu ajutorul unui tip special VaList, care funcționează similar cu va_list în C. unsafe extern «C» fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::<i32>() }; let b = unsafe { args.next_arg::<i32>() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Funcțiile Layout::for_value_raw, mem::size_of_val_raw și mem::align_of_val_raw au fost stabilizate, permițând determinarea sigură a dimensiunii și aliniamentului pe baza unor pointeri bruti (raw pointers), inclusiv atunci când se utilizează tipuri de dimensiune dinamică, cum ar fi slice-urile, fără a necesita crearea de referințe la date.
  • Documentația a fost completată cu o recomandare de a evita eliberarea memoriei la care a fost obținută o referință statică cu o durată de viață nelimitată (&’static) prin apelarea Box::leak (round-trip unleaking), deoarece o astfel de acțiune ar putea duce potențial la probleme din cauza incompatibilității cu optimizările viitoare ale compilatorului și cu mecanismele de alocare a memoriei. În loc să creați o referință statică pentru a transmite temporar proprietatea, se recomandă utilizarea pointerilor bruti, de exemplu, prin apelul Box::into_non_null.
  • O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
    • IntoIterator for Box<[T; N]>
    • IntoIterator for &Box<[T; N]>
    • IntoIterator for &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator for StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • În managerul de pachete cargo a fost implementat un nou profil încorporat „debug”, similar profilului „dev” (în viitor, se preconizează separarea funcționalităților de depanare și dezvoltare). La compilarea în CI, compilarea incrementală este dezactivată în mod implicit.
  • Platforma țintă riscv64-unknown-linux-musl a fost mutată într-un nivel de suport superior, care presupune garanția compilării, dar fără garanții în ceea ce privește trecerea setului de teste.

Ayrton Muñoz, care a implementat suport pentru platforma Sony PlayStation 1 în compilatorul Rust și a lucrat la portarea FreeBSD pe computere cu cipuri Apple Silicon, a realizat pentru FreeBSD posibilitatea de a crea componente de kernel și drivere de dispozitive în limbajul Rust. Pentru testare, a fost propus un set de KPI-uri (Kernel Programming Interface), care permite utilizarea codului Rust în kernelul FreeBSD, precum și driverul audio virtio (virtio_snd) creat folosind aceste legături, driverul HID DockChannel pentru tastatură în M2 MacBook și câteva drivere de nivel inferior pentru subsistemele computerelor Mac cu cipuri Apple Silicon.

  • Compania Microsoft a inclus Rust printre limbajele de de prim nivel și va oferi suport complet pe toate etapele dezvoltării interne. Precedent, suportul la primul nivel a fost oferit pentru limbajele C++, C# și TypeScript. Se observă că Rust este deja utilizat în peste 100 de repozitorii Microsoft. Printre altele, componentele scrise în Rust sunt deja utilizate în produse precum Microsoft 365 și Copilot, iar pentru compilatorul MSVC a fost pregătit un backend separat rustc_codegen_utc pentru Rust, bazat pe compilatorul rustc.

    Ca obiectiv principal al utilizării Rust în Microsoft este menționată sporirea securității codului, critic din punct de vedere al securității. Potrivit directorului tehnic al Microsoft Azure, aproximativ 70% din toate vulnerabilitățile din Windows sunt cauzate de probleme legate de gestionarea memoriei, care pot fi evitate prin utilizarea Rust.

  • Compania Google a eliminat din nucleul Linux vechea implementare a mecanismului de comunicare între procese Binder, scrisă în limbajul C, în favoarea noului driver Binder IPC, rescris în Rust. Se remarcă faptul că, în cei 15 ani de existență ai vechiului driver, s-a acumulat o datorie tehnică semnificativă și o abundentă complexitate, care îngreuna găsirea erorilor, întreținerea și adăugarea de noi funcționalități. Driverul Binder IPC pe Rust este considerat principal și nu mai este prezentat ca o dezvoltare experimentală.
  • A fost publicată versiunea Arti 2.7.0, o implementare a instrumentarului Tor, scrisă în limbajul Rust. Când codul Arti va atinge un nivel capabil să înlocuiească complet varianta scrisă în C, dezvoltatorii Tor intenționează să acorde Arti statutul de implementare principală a Tor și să înceteze gradual întreținerea versiunii scrise în C. În noua versiune a fost extinsă funcționalitatea pentru relays. servere directorii (Directory Authority), legată de parsarea documentelor, suport pentru mirror-uri de servere de directorii și procesarea traficului DNS. A fost adăugată implementarea RPC pentru modificarea și verificarea configurației. Au fost remediate mai multe vulnerabilități - administratorii serviciilor onion sunt rugați să își actualizeze de urgență sistemele.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster