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

A fost publicat release-ul limbajului de programare Rust 1.99, inițial dezvoltat de proiectul Mozilla, dar acum întreținut sub egida organizației non-profit independente Rust Foundation. Limbajul se concentrează pe lucrul sigur cu memoria și oferă instrumente pentru a obține un grad înalt de paralelism în execuția sarcinilor, fără a folosi un colector de gunoi și runtime (care este redus la inițializarea de bază și susț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:

  • S-a pus la dispoziție posibilitatea de a crea funcții în limbajul Rust cu un număr variabil de argumente (variadic), exportate pentru a fi apelate din proiecte scrise în limbajul C (C ABI). Ca ultim element din lista parametrilor în astfel de funcții poate fi indicată construcția „…”, care este prelucrată în Rust printr-un tip special VaList, funcționând similar cu va_list în C. unsafe extern "C" fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Au fost stabilizate funcțiile Layout::for_value_raw, mem::size_of_val_raw și mem::align_of_val_raw, care permit determinarea sigură a dimensiunii și aliniamentului pentru pointeri raw, inclusiv utilizarea tipurilor cu dimensiune dinamică, cum ar fi slice-uri, fără a necesita crearea de referințe la date.
  • Documentația a fost actualizată cu o recomandare de a evita eliberarea memoriei la care a fost obținută o referință statică cu o durată nelimitată (&'static) prin apelarea lui Box::leak (round-trip unleaking), deoarece această acțiune poate duce la probleme din cauza incompatibilității cu optimizările viitoare ale compilatorului și cu mecanismele de alocare asociate. În loc de a crea o referință statică pentru transmiterea temporară a proprietății, se recomandă utilizarea pointerilor raw, de exemplu, prin apelarea lui 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
    • IntoIterator for &Box
    • IntoIterator for &mut Box
    • 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
    • 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 intenționează separarea funcționalităților pentru depanare și dezvoltare). La compilarea în CI, compilarea incrementală este dezactivată implicit.
  • Platforma target riscv64-unknown-linux-musl a fost trecută la nivelul doi de suport, ceea ce implică o garanție de compilare, dar fără garanții la trecerea testelor.

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 trecut Rust pe lista limbajelor de nivel întâi și va asigura suport complet pentru toate fazele de dezvoltare din cadrul companiei. Până acum, suportul de nivel întâi a fost oferit pentru limbajele C++, C# și TypeScript. Se remarcă faptul că Rust este deja folosit în peste 100 de repositorii 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 se menționează întărirea 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 C, în favoarea noului driver Binder IPC, rescris în Rust. Se observă că, în cei 15 ani de existență ai vechiului driver, s-a acumulat o datorie tehnică semnificativă și multe complicații, care au îngreunat identificarea erorilor, întreținerea și adăugarea de noi funcționalități. Driverul Binder IPC pe Rust a fost recunoscut ca soluție principală și nu mai este considerat o dezvoltare experimentală.
  • A fost lansată versiunea Arti 2.7.0, o implementare a instrumentarului Tor, scrisă în Rust. Când codul Arti va ajunge la un nivel capabil să înlocuiească complet varianta în C, dezvoltatorii Tor intenționează să acorde Arti statutul de implementare principală a Tor și să înceteze treptat întreținerea variantei în C. În noua versiune s-au adus progrese în funcționalitatea pentru relay-uri. servere directoriul (Directory Authority), asociat cu parsarea documentelor, suportul pentru mirroring-ul serverelor directory și procesarea traficului DNS. A fost adăugată o implementare RPC pentru modificarea și verificarea configurației. Au fost eliminate mai multe vulnerabilități - administratorii serviciilor onion sunt sfătuiți să își actualizeze urgent 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