„Rust 1.98.0“ leidimas: „arrayref“ paketo, kuris per 3 mėnesius buvo atsisiųstas 53 milijonus kartų, kompromisas.

Išleista „Rust 1.98“ programavimo kalba, kurią sukūrė „Mozilla“ projektas, bet dabar kuria nepriklausoma ne pelno siekianti organizacija „Rust Foundation“. Kalba orientuota į atminties saugumą ir suteikia įrankius, leidžiančius pasiekti aukštą užduočių vykdymo lygiagretumą, nenaudojant šiukšlių surinkėjo ir vykdymo aplinkos (vykdymo aplinka sutrumpinta iki pagrindinio standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties valdymo metodai skirti pašalinti klaidas manipuliuojant rodyklėmis ir apsaugoti nuo problemų, kylančių dėl žemo lygio atminties valdymo, pvz., prieigos prie atminties po jos atlaisvinimo, nulinių rodyklių dereferencijos, buferio perpildymo ir pan. Projekte kuriama „Cargo“ paketų tvarkyklė, skirta bibliotekoms platinti, kompiliavimui palengvinti ir priklausomybėms valdyti. Bibliotekoms talpinti tvarkoma „crates.io“ saugykla.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Slankiojo kablelio tipams f32 ir f64 yra įdiegti algebriniai sudėties, atimties, daugybos, dalybos ir liekanos metodai, įgyvendinantys optimizavimą, panašų į „-ffast-math“ parinktį C/C++ kompiliatoriuose. Šie metodai leidžia keisti operacijų tvarką, kai to reikia optimizavimui, pvz., ciklų vektorizavimui. Pavyzdžiui, skaičiuojant „a + b + c + d“ naudojant įprastą sudėties funkciją, kompiliatorius visada atliks skaičiavimą ta pačia tvarka: „((a + b) + c) + d“, bet naudodamas algebrinį_add metodą, jis gali sugrupuoti išraišką kaip „(a + b) + (c + d)“ ir lygiagrečiai vykdyti „(a + b)“ ir „(c + d)“ naudojant SIMD instrukcijas. Algebrinių metodų naudojimo kaina yra skaičiavimo rezultatų nedeterminizmas, kuris gali kisti paklaidos ribose.
  • Visi primityvūs sveikųjų skaičių tipai turi integruotą „format_into“ metodą skaičiams konvertuoti į eilutes, kurį galima naudoti vietoj „itoa“ paketo. Kaip parametras perduodamas „NumBuffer“ buferis. , kurio dydis garantuotai pakankamas bet kokiai naudojamo tipo reikšmei įrašyti dešimtaine forma. Išvestis yra suformatuota eilutė &str, kurios gyvavimo trukmė susieta su buferiu.
  • „ManuallyDrop“ diržų ir „Box“ išmaniojo žymeklio sąveika nebesukelia neapibrėžto elgesio.
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • eilutė::substr_diapazonas
    • [T]::subpjūvio_diapazonas
    • core::fmt::NumBuffer
    • <{integer}>::format_into
    • Siųsti/sinchronizuoti std::process::CommandArgs
    • {fN}::algebrinė_papildoma_reikšmė
    • {fN}::algebrinis_sub
    • {fN}::algebrinė_mul
    • {fN}::algebrinė_div
    • {fN}::algebrinė_rem
    • NonZero<{integer}>::from_str_radix
    • Eilutė::from_utf16le
    • Eilutė::from_utf16le_lossy
    • Eilutė::from_utf16be
    • Eilutė::from_utf16be_lossy
    • [T]::juostos_aplinkos_fiksavimas
    • str::strip_circumfix
    • Atominis ::from_mut
    • Atominis ::get_mut_slice
    • Atominis ::from_mut_slice
    • std::range::legacy
  • Tikslinės platformos „thumbv7a-none-eabi“, „thumbv7a-none-eabihf“, „thumbv7r-none-eabi“, „thumbv7r-none-eabihf“ ir „thumbv8r-none-eabihf“ buvo perkeltos į antrą palaikymo lygį, kuris apima kūrimo garantiją, bet negarantuoja, kad bus sėkmingai išlaikytas testavimo paketas.
  • Pridėtas „powerpc64-unknown-linux-gnuelfv2“ ir „aarch64-unknown-linux-pauthtest“ platformų palaikymas, kurios dabar yra 3 palaikymo lygyje. 3 lygis apima pagrindinį palaikymą, bet neapima automatinio testavimo, oficialių kompiliavimo versijų leidimų ar kompiliavimo patikrinimo.

Be to, buvo pažeistas populiarus „crate“ paketas „arrayref“, kuris per pastarąsias 90 dienų buvo atsisiųstas daugiau nei 53 milijonus kartų ir yra naudojamas kaip 403 paketų priklausomybė. Užpuolikai į „crates.io“ saugyklą paskelbė naujus paketus su kenkėjišku kodu: „proc-macro1“, „proc-macro-en“, „aovine“, „arone“, „aronenao“ ir „tinymember“. Vėliau saugykloje buvo paskelbtos naujos „arrayref 0.3.10“, „internment 0.8.7“ ir „append-only-vec 0.1.9“ versijos, kiekviena pridedant kenkėjišką „proc-macro1“ paketą kaip priklausomybę. Kenkėjiška „arrayref“ paketo versija buvo paskelbta rugpjūčio 20 d. 10:15 val. (MSK) ir išliko aktyvi iki 11:41 val., po to ją pašalino „crates.io“ administratoriai.

Su „arrayref“ kūrėju dar nesusisiekta ir nepavyko išsiaiškinti situacijos, tačiau manoma, kad užpuolikai perėmė jų prisijungimo duomenis. „proc-macro1“ pakete kūrimo scenarijuje buvo kenkėjiškas pakeitimas, kuris įkėlė vykdomąjį failą iš išorinio katalogo. serverisAtsisiųstas failas buvo išsaugotas kaip /tmp/rust-setup Unix sistemose ir Windows — %TEMP%\rust-setup.ps1 arba %TEMP%\rust-setup-launch.vbs.

Šaltinis: opennet.ru

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster