Välja anti programmeerimiskeele Rust 1.97 versioon, mis põhineb Mozilla projektis, kuid mida praegu arendab iseseisev mittetulunduslik organisatsioon Rust Foundation. Keel keskendub mälus töötamise ohutusele ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, kuid jääb ilma prügikoristaja ja jooksutamisest (runtime koosneb ainult põhi-initialiseerimisest ja standardraamatukogu toimest).
Rustis mäluga töötamise meetodid on suunatud vigade vältimisele pointer'itega manööverdamisel ja probleemide kaitsmisele madala taseme mälutöötlusest, nagu mälupiirkonna kasutamine pärast selle vabastamist, nullpunktide de-referentsimine, mälupiiri ületamine jne. Raamatukogude levitamiseks, ehituse tagamiseks ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.
Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.
Põhilised uuendused:
- Vaikimisi on aktiveeritud uus funktsioonide, globaalsete muutuja ja andmestruktuuride dekoratsiooniskeem (mangling) genereeritud objekt- ja täitevfailides (-Csymbol-mangling-version=v0). Nimesid dekoreeritakse, et vältida erinevate programmide sidumisel konfliktide teket, lisades spetsiifilise konteksti, näiteks mooduli tee ja crate-paketi nimi.
Varasemalt kasutatud nimede dekoratsiooniskeem, mis põhines Itanium ABI-l, omas selliseid puudusi nagu generikute parameetrite asendamine raskesti loetavate hashide ja Itanium ABI-d mittekasutavate kompilatori osade olemasolu, mis nõudis Rust-spetsiifiliste nimede dekooderite kasutamist. Rust 1.97-s on vaikimisi kasutusele võetud dekoratsiooniskeem, mis on välja töötatud spetsiaalselt Rusti jaoks ja millel puuduvad eespool nimetatud puudused. Vana skeem plaanitakse eemaldada ühes järgmistest väljaandest.
- Pakettihaldur cargoon on sisseehitatud võimalus hallata kompilaatori genereerimise hoiatuste reageerimist koostamisel. Lisatud on keskkonnamuutuja CARGO_BUILD_WARNINGS, mis võib võtta kolme väärtust: warn (vaikimisi) — hoiatuste kuvamine ekraanil; allow — hoiatuste väljundi peitmine; deny — hoiatuste käsitlemine vigadena, mis peatavad koostamise.
Eelmistel versioonidel tuli koostamise lõpetamiseks pärast hoiatuse väljundit RUSTFLAGSis ' -Dwarnings' näidata, kuid RUSTFLAGSi muutmisel pidas paketihaldur cargo koostamist uueks, ei arvestanud mälus leiduvate andmetega ja koostas kogu projekti nullist. Seades seadistuse cargo poole, välistati vahemälu lähtestamine ja vajadus täielikuks ümberkompileerimiseks hoiatuste töötlemise režiimi muutmisel, samuti lihtsustas hoiatuste käsitlemise lubamist vigadena pideva integreerimise süsteemides.
- Kogumise käigus on vaikimisi lubatud kompilatori väljastatavad sõnumid. Need sõnumid kuvatakse hoiatustena spetsiaalse lint-reegli «linker_messages» kaudu, mis ei kuulu tavalisse «warnings» gruppi. Rustc filtreerib välja sõnumid, mis on tüüpilised valehäired või normaalne käitumine, jättes alles hoiatused, mis võivad viidata probleemidele, nagu näiteks vananenud valikute ja soovimatute seadete hoiatuste osas. Varem kuvatakse linker'i teave ainult veaga lõpetamisel, muul juhul peidetakse kõik sõnumid. Vanade käitumise tagasisaamiseks võib Cargo.toml faili lisada: [lints.rust] linker_messages = «allow»
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- RepeatN vaikimisi
- Kopeeri ffi::FromBytesUntilNulError jaoks
- Saada std::fs::File jaoks UEFI-le
- ::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
- Märge «const» on rakendatud meetodis char::is_control.
Kohustuslikud on ka hiljuti väljakuulutatud projektid ja üritused, mis on seotud Rustiga:
- Zinnia projekt arendab modulaarselt Unix-sarnast tuuma, mis on kirjutatud Rusti keeles ja mille litsentsiks on GPLv2. Tuum toetab POSIX-liideseid ja mõned laienemised BSD-st ja Linuxist, nagu epoll ja timerfd. Renderdamiseks ja sisendi korraldamiseks on saadaval DRM (Direct Rendering Manager) ja evdev draiverid. Rakendatud funktsionaalsus piisab X-süsteemi ja komposiitide juhtimiseks Xfce töölauda. serverile Weston baseeritud Wayland. Toetatakse käivitamist nii QEMU emulaatoris kui ka reaalses riistvaras, nagu ThinkPad E14 G7 sülearvuti.
- Esitatud on suhtlusraamatukogu iroh 1.0, mis võimaldab luua võrguühendusi rakenduste vahel erinevates hostides, kasutades krüptograafilisi võtmeid. IP-aadresse (märgitakse võti, millele on vaja ühenduda, ja iroh leiab sellega seotud hosti ning loob krüpteeritud ühenduse QUIC-protokolli abil). Kui võimalik, luuakse otse P2P-ühendused, kuid kui see ei ole võimalik, tehakse tagasikäik tööle läbi releede, mida kasutatakse samuti hostide leidmiseks võtmete järgi. On võimalik käivitada oma relee või ühenduda toetatud kogukondade avalike releede juurde.
Täiendavate võimaluste hulka kuuluvad: Multipath QUIC tugi, et edastada pakette samaaegselt mitme marsruudi kaudu, võimalus töötada NAT-i taga, staatilise konfiguratsiooni režiim, et ühendada kohalikke seadmeid ilma internetiühenduseta, võimalus kokku panna vahekoodiks WASM, et seda täita brauseris, ja toetada oma transportide loomist, näiteks Bluetoothi, WiFi Aware või LoRa kaudu. Kood on kirjutatud Rustis ja levitatakse litsentside Apache-2.0 ja MIT alusel. Saadaval on Python, Node.js, Kotlin ja Swift raamistikud.
- Buni serveri JavaScript platvormi autor avaldas artikli, kus analüüsitakse projekti üleviimist Bun keelest Zig keelde Rusti, kasutades AI mudelit Claude Fable. Märgitakse, et Bun 1.3.14 saab olema viimane väljaanne Zig keeles ja järgmine versioon Bun 1.4.0 on juba Rustis. Tehtud testide kohaselt tarbib Rusti versioon märkimisväärselt vähem mälu ja on 2-5% kiirem kui Zig versioon. Rusti versiooni käivitusfaili suurus on vähenenud 20%.
Allikas: opennet.ru
