Lansare Rust 1.97. Kernelul scris în Rust Zinnia și sistemul P2P Iroh cu adresare pe baza cheilor

A fost publicată versiunea 1.97 a limbajului de programare Rust, dezvoltat inițial de proiectul Mozilla, dar acum susținut de o organizație non-profit independentă, Rust Foundation. Limbajul se concentrează pe gestionarea sigură a memoriei și oferă instrumente pentru atingerea unui înalt grad de paralelism în executarea sarcinilor, fără a folosi un colector de gunoi și fără runtime (care se limitează la inițializarea de bază și la întreț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:

  • În mod implicit, este activată o nouă schemă de decorare (mangling) a numelui funcțiilor, variabilelor globale și structurilor de date în fișierele obiect și executabile generate (-Csymbol-mangling-version=v0). Numele sunt decorate pentru a preveni conflictele la conectarea diferitelor programe, prin atașarea unui context specific, cum ar fi calea către modul și numele pachetului crate.

    Schema de decorare a numelui utilizată anterior, bazată pe Itanium ABI, avea dezavantaje precum înlocuirea parametrilor generici cu hash-uri de neînțeles și prezența unor părți ale compilatorului care nu utilizau Itanium ABI, ceea ce necesita utilizarea decodoarelor de nume specifice Rust. În Rust 1.97 este activată în mod implicit o schemă de decorare dezvoltată special pentru Rust, fără dezavantajele menționate. Schema veche va fi eliminată în una dintre versiunile următoare.

  • Managerul de pachete cargo are încorporată capacitatea de a gestiona reacția la generarea de avertismente de către compilator în timpul construcției. A fost adăugată variabila de mediu CARGO_BUILD_WARNINGS, care poate accepta trei valori: warn (implicit) — afișează un avertisment pe ecran; allow — ascunde afișarea avertismentelor; deny — tratează avertismentele ca erori care opresc construcția.

    În versiunile anterioare, pentru a finaliza construcția după afișarea unui avertisment, era necesar să se specificheze -Dwarnings în RUSTFLAGS pentru compilator, dar la modificarea RUSTFLAGS, managerul de pachete cargo considera construcția ca fiind nouă, ignora datele din cache și reconstrui întregul proiect de la zero. Trasarea setărilor pe partea lui cargo a exclus resetarea cache-ului și necesitatea recompilării complete la modificarea modului de gestionare a avertismentelor și a simplificat activarea gestionării avertismentelor ca erori în sistemele de integrare continuă.

  • În mod implicit, la compilare, mesajele afișate de linker sunt incluse. Aceste mesaje sunt prezentate sub formă de avertismente printr-o regulă specială de tip lint numită „linker_messages”, care nu face parte din grupul standard de „warnings”. Totodată, rustc filtrează mesajele care sunt fals pozitive tipice sau comportamente normale, lăsând doar acele avertismente care pot indica probleme, cum ar fi avertismentele legate de opțiunile depreciate și setările nedorite. Anterior, informațiile de la linker erau afișate doar în cazul unei erori, în rest toate mesajele erau ascunse. Pentru a restitui comportamentul vechi, în Cargo.toml se poate adăuga: [lints.rust] linker_messages = „allow”
  • O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
    • Implicit pentru RepeatN
    • Copie pentru ffi::FromBytesUntilNulError
    • Send pentru std::fs::File pentru UEFI
    • ::isolate_highest_one
    • ::isolate_lowest_one
    • ::highest_one
    • ::lowest_one
    • ::bit_width
    • NonZero::isolate_highest_one
    • NonZero::isolate_lowest_one
    • NonZero::highest_one
    • NonZero::lowest_one
    • NonZero::bit_width
  • Semnul „const” este utilizat în metoda char::is_control.

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.

  • Proiectul zinnia dezvoltă un nucleu modular asemănător Unix, scris în limbajul Rust și distribuit sub licența GPLv2. Nucleul suportă interfețele POSIX și unele extensii din BSD și Linux, cum ar fi epoll și timerfd. Pentru redarea și organizarea intrărilor sunt disponibile drivere DRM (Direct Rendering Manager) și evdev. Funcționalitățile implementate sunt suficiente pentru a rula un mediu de desktop Xfce sub controlul serverului X și a compozitului server Weston bazat pe Wayland. Se suportă bootarea atât în emulatorul QEMU, cât și pe hardware real, cum ar fi laptopul ThinkPad E14 G7.
  • A fost lansată versiunea 1.0 a bibliotecii de comunicație iroh, care permite stabilirea conexiunilor de rețea între aplicații de pe gazde diferite prin conectarea cu chei criptografice, în loc de adreselor IP (se specifică cheia la care se dorește conectarea, iar iroh găsește gazda asociată și stabilește o conexiune criptată folosind protocolul QUIC). Se încearcă stabilirea de conexiuni P2P directe, dar dacă aceasta nu este posibilă, se revine la utilizarea relaye-urilor, care sunt de asemenea folosite pentru descoperirea gazdelor pe baza cheilor. Este posibil să se ruleze propriul relay sau să se conecteze la relaye publice acceptate de comunitate.

    Printre caracteristicile avansate se numără: suport pentru Multipath QUIC pentru livrarea pachetelor pe mai multe rute simultan, capacitatea de a funcționa din spatele NAT, modul de configurare statică pentru conectarea la dispozitive locale fără acces la internet, posibilitatea de a compila în cod intermediar WASM pentru rulare în browser, suport pentru crearea propriilor transporturi, de exemplu, pentru conectarea prin Bluetooth, WiFi Aware sau LoRa. Codul este scris în Rust și este distribuit sub licențele Apache-2.0 și MIT. Sunt disponibile legături pentru Python, Node.js, Kotlin și Swift.

  • Autorul platformei server-side JavaScript Bun a publicat un articol detaliind proiectul de rescriere a Bun din Zig în Rust, folosind modelul AI Claude Fable. Se menționează că Bun 1.3.14 va fi ultima versiune pe Zig, iar următoarea versiune Bun 1.4.0 va fi deja pe Rust. Conform testelor efectuate, versiunea pe Rust consumă semnificativ mai puțină memorie și este cu 2-5% mai rapidă decât versiunea pe Zig. Dimensiunea fișierului executabil în versiunea pe Rust a fost redusă cu 20%.

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