Programmeerimiskeele Rust 1.94 väljaanne on avaldatud, mida arendab Mozilla projekt, kuid mida arendatakse nüüd sõltumatuks mittetulundusühinguks Rust Foundationi all. Keele fookus on mäluhalduse ohutul kasutamisel ja see pakub võimalusi kõrge ülesannete paralleelsuse saavutamiseks, vältides samas prügikorjaja ja runtime'i kasutamist (runtime piirdub põhialustamise ja standardraamatukogu hooldamisega).
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:
- Slice tüüpi on lisatud meetod array_windows, mis loob iteraatori, et läbida s lõikeid, kasutades fikseeritud suurusega aknaid, mis nihkuvad ühe elemendi kaupa. Erinevalt varasemast meetodist windows opereerib array_windows püsiva akna suurusega ja tagastab igal iteratsioonil viite määratud suurusega massiivile (&[T; N]) selle asemel, et tagastada määramata suurusega lõiget (&[T]). Kuna massiivi suurus on algselt kompilaatorile teada, saab pakkuda paremat jõudlust, vältides iga iteratsiooni etapis massiivi piiride kontrollimist. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- Pakettide halduri Cargo (.cargo/config.toml) konfiguratsioonifailides on rakendatud direktiiv „include“, mis võimaldab kohapeal sisestada teiste failide sisu. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- Manifesti ja konfiguratsioonifailidesse on lisatud toetus uuele TOML 1.1 märgistuskeele versioonile, kus on lisatud mitmerealiste sisseehitatud tabelite tugi, escape-järjestusi "\xHH" baitide heksakoodide lisamiseks ja "\e" asendamiseks "\u001B", võimalus jätta viimasel elemendil koma maha ja jätta sekundite määramine ajaväärtustes vahele. serde = { version = "1.0", features = ["derive"] } nüüd saab asendada järgnega: serde = { version = "1.0", features = ["derive"], }
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Sisseehitatud funktsioonid x86 avx512fp16 käskude jaoks
- Sisseehitatud funktsioonid AArch64 NEON fp16 käskude jaoks
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Märkus 'const' rakendatud funktsioonides:
- f32::mul_add
- f64::mul_add
- Platvorm riscv64im-unknown-none-elf on viidud kolmandale toetasemele. Kolmas tase hõlmab põhitoetust, kuid ilma automatiseeritud testimise, ametlike koostiste avaldamise ja koodi koostamisvõimekuse kontrollita.
Kohustuslikud on ka hiljuti väljakuulutatud projektid ja üritused, mis on seotud Rustiga:
- Ayrton Muñoz, kes on kunagi rakendanud Sony PlayStation 1 toe Rusti kompilaatoris ja tegelenud FreeBSD portimisega Apple Silicioni kiipide arvutitele, on FreeBSD jaoks rakendanud võimalust luua tuuma komponente ja seadme draivereid Rusti keeles. Testimiseks on pakutud KPI-mooduleid (Kernel Programming Interface), mis võimaldavad kasutada Rusti koodi FreeBSD tuumas, samuti on loodud helidraiver virtio (virtio_snd), HID-draiver DockChannel jaoks M2 MacBooki klaviatuuri jaoks ning mitmed madalama taseme draiverid Maci arvutite alamsüsteemidele Apple Silicioni kiipidel.
Teatatakse, et Rusti moodulite arendamine algas 2024. aasta lõpust. Moodulites on praegu rakendatud vaid osa C-KPI-st ja neid positsioneeritakse ebastabiilsetena, kuid aja jooksul soovitakse stabiilsus viia samale tasemele nagu C keele liides. Näiteks on virtio_snd draiver sobilik muusika esitamiseks QEMU-s. Eeldatakse, et 2026. aastaks stabiliseeruvad Rusti moodulid piisavalt, et huvitatud arendajad saaksid hakata neid koodi kirjutamiseks kasutama.
- Benny Siegert, kes osaleb NetBSD arenduses, püüdis põhjendada, miks Rusti keele tugi ei tule NetBSD tuumasse: NetBSD toetab arhitektuure, mille jaoks Rust ei ole saadaval; olemasoleva Rust tööriistade komplekti hoidmine pkgsrc'is nõuab suurt pingutust ja seda teevad vaid mõned arendajad; Rusti toe saamine tuumas nõuab Rusti kompilaatori lisamist põhissüsteemi; Rusti buustrepeerimise käigus NetBSD-s kasutatakse vanema versiooni binaarpaketist, mis ei ole aktsepteeritav iseseisvates ja avatud lähtekoodiga distributsioonides; Rusti väljaandmistsüklid ei ühti NetBSD arendamise ja varasemate versioonide toe tsüklitega (näiteks jätkub NetBSD 9, mis ilmus 2020. aastal, tugi, mis tähendaks, et kuue aasta vanuse Rusti kompilaatori tarnimine ja tugi oleks vajalik).
- Avalikustatud on Turso 0.5, mis on rakendustesse sisseehitatud andmebaasihaldussüsteem, kirjutatud Rustis ning ühilduv SQL-i dialekti, andmebaasi failiformaatide ja C API-ga. Laiendatud võimalustena märgitakse CDC (Change data capture) mehhanism andmebaasi muutuste reaalajas jälgimiseks, io_uring'i kasutamine Linuxis asünkroonses sisend-/väljundoperatsioonis, vektoriotsingu tugi, ALTER-lause olemasolu andmebaasi skeemi muutmiseks, andmete krüpteerimise võimalus, inkrementaalsete arvutuste režiim ja konstruktsioon „BEGIN CONCURRENT”.
- Projekt, mis võimaldab kasutada Rusti standardteeki GPU poolse programmi raames.
- Emuko — RISC-V emulaator, kirjutatud Rustis, suudab laadida Linuxi, toetab JIT-kompileerimist ning suudab salvestada ja taastada olekusnapshote.
- RustConn (flatpak) — graafiline liides väliste võrguside haldamiseks teiste hostide juurde, toetades SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust ja SFTP. Kood on kirjutatud Rustis, kasutades GTK4 ja Wayland'i.
- Esitleme uue projekti zlib-rs 0.6 haru, mis on märgistusena esimene stabiilne versioon, mis on täielikult ühilduv zlib C API-ga ja sobib zlib-i läbipaistvaks asendamiseks. Projekt keskendub andmete tihendamise teegi turvalise analooge loomisele. Arendust teostatakse silmas pidades zlib-ng projekti, mis arendab kõrgtehnoloogilist zlib versiooni.
- Esitatud on projekt vcad, mis arendab parameetrilist arvutiprojektimise süsteemi (SAPS), kirjutatud Rustis ja integreeritav AI-agendidega MCP protokolli kaudu. Toetatakse 3D-modelleerimist, simulatsiooni, 2D-skeemide töötlemist, komponentide kogumist, STEP formaadis importi ning STL/GLB/STEP/DXF formaadist eksportimist.
- Avaldatud on kõnetuvastussüsteem, kirjutatud Rustis ja kasutav AI mudelit Mistral Voxtral Mini 4B Realtime ning masinõppe raamistikku Burn. Projekt on suunatud reaalajas kõnetuvastusele, et luua transkriptsiooni voogedastuse käigus.
- Ilmus C2Rust 0.22 tööriistakomplekt, mis on mõeldud C-koodi (C99) tõlkimiseks Rusti, mille unsafe-esitlus on struktuuriliselt lähedane algsele C-koodile. Saadud töövõrk on edaspidi kasutatav järkjärguliseks üleminekuks idiomaatiliseks Rustiks ja unsafe-blokkide eemaldamiseks.
Allikas: opennet.ru
