Käesolev on Rust 1.98 programmikeele väljaanne, mis põhineb Mozilla projektis, kuid mida arendab praegu sõltumatu mittetulundusühing Rust Foundation. Keele fookus on mälu ohutu töötlemine ning see pakub vahendeid ülesannete täitmise kõrgparalleelsuse saavutamiseks, kasutamata prügikoristajat ja runtime'i (runtime piirdub põhialustamise ja standardraamatukogu toetamisega).
Rust'i mälu töötlemise meetodid on suunatud pointerite manipuleerimise vigade vältimisele ja probleemide kaitsmisele, mis tulenevad madala taseme mälu töötlemisest, nagu juurdepääs vabastatud mälupiirkondadele, nullpointerite de-referentseerimine, mälupuhvri ületamine jne. Raamatukogude levitamiseks, ehituste tagamiseks ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude majutamiseks toetatakse repotites crates.io.
Mäluhügieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jälgimise, objektide eluaja (vaateala) arvestamise ja mälule juurdepääsu korrektuse hindamise kaudu koodi täitmise ajal. Rust pakub ka vahendeid täisarvude ülevoolude vältimiseks, nõuab muutujate väärtuste kohustuslikku initsialiseerimist enne kasutamist, käsitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mõistet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade vähendamiseks.
Peamised uuendused:
- Liikide f32 ja f64 jaoks on rakendatud algebralisi meetodeid liitmiseks, lahutamiseks, korrutamiseks, jagamiseks ja jäägi leidmiseks, mis rakendavad optimeerimist, mis sarnaneb C/C++ kompilaatorites kasutatava valikuga "-ffast-math". Sellised meetodid lubavad operatsioonide järjekorra muutumist, kui see on vajalik optimeerimise jaoks, näiteks silmade vektoriiseerimise korral. Näiteks kui arvutada "a + b + c + d", siis tavapärase liitmise korral kompilaator alati arvutab järjestuses "((a + b) + c) + d", kuid algebralise meetodi algebraic_add kasutamise korral võib see väljendi grupeerida kui "(a + b) + (c + d)" ja teostada "(a + b)" ja "(c + d)" paralleelselt SIMD juhiste abil. Algebraliste meetodite rakendamise hind on arvutustulemustes ettearvamatuse olemasolu, mis võib varieeruda taluvuse piires.
- Kõigi primitiivsete täisarvutüüpide jaoks on rakendatud sisseehitatud meetod "format_into" numbrite stringideks muutmiseks, mida saab kasutada itoa paketi asemel. Parameetrina antakse NumBuffer puhver, mille suurus on garantii, et see on igasuguste kasutatava tüübi väärtuste dekimaalseks kirjutamiseks piisav. Väljundina tagastatakse vormindatud string &str, mille eluea jooksul on seos puhvri elueaga.
- ManuallyDrop'i ja Box'i vahelised interaktsioonid ei too enam kaasa määramatust.
- Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tüübispetsiifikatsioonide rakendused:
- str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- ::format_into
- Send/Sync std::process::CommandArgs jaoks
- {fN}::algebraic_add
- {fN}::algebraic_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomic::from_mut
- Atomic::get_mut_slice
- Atomic::from_mut_slice
- std::range::legacy
- Sihtplatvormid thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf ja thumbv8r-none-eabihf on tõlgitud teisele tasemele, mis tagab kokkupaneku, kuid ei garanteeri testkomplekti läbimist.
- Tugiteenuste kolmas tase on lisatud platvormidele powerpc64-unknown-linux-gnuelfv2 ja aarch64-unknown-linux-pauthtest. Kolmas tase katab põhitugi, kuid ilma automatiseeritud testimise, ametlike kompositsioonide avaldamise ja koodi kokkupaneku võimaluse kontrollimiseta.
Tuleb märkida ka populaarselt crate-pakendilt arrayref, millel on viimase 90 päeva jooksul üle 53 miljoni allalaadimise ja mida kasutatakse 403 paketi sõltuvusena. Ründajad on paigaldanud crates.io sisse uued paketid proc-macro1, proc-macro-en, aovine, arone, aronenao ja tinymember, mis sisaldavad pahatahtlikku koodi. Pärast seda avaldati uus väljaanne pakettidest arrayref 0.3.10, internment 0.8.7 ja append-only-vec 0.1.9, milles sõltuvusena lisati pahatahtlik pakett proc-macro1. Pahatahtlik arrayref'i versioon postitati 20. augustil kell 10:15 (MSK) ja oli kohal kuni 11:41, pärast mida kustutati see crates.io haldajate poolt.
Arrayref'i arendajaga ei ole seni õnnestunud ühendust võtta, et olukorda selgitada, kuid arvatakse, et tema kasutajateave on kurjategijate poolt vangistatud. Paketis proc-macro1 oli pahatahtlik muudatus, mis laadis alla välise täitmisfaili. serveridAllalaaditud fail salvestati Unix-süsteemidesse nimega /tmp/rust-setup ja Windowsis - %TEMP%\rust-setup.ps1 või %TEMP%\rust-setup-launch.vbs.
Allikas: opennet.ru
