Ir izlaista programmēšanas valoda Rust 1.98, ko izveidoja Mozilla projekts, bet tagad izstrādā neatkarīgā bezpeļņas organizācija Rust Foundation. Valoda koncentrējas uz atmiņas drošību un nodrošina rīkus uzdevumu izpildes augsta paralēlisma sasniegšanai, vienlaikus neizmantojot atkritumu savācēju un izpildlaiku (izpildlaiks ir samazināts līdz standarta bibliotēkas pamata inicializācijai un uzturēšanai).
Rust atmiņas pārvaldības metodes ir izstrādātas, lai novērstu kļūdas rādītāju manipulācijās un aizsargātu pret problēmām, kas rodas zema līmeņa atmiņas pārvaldības dēļ, piemēram, piekļuve atmiņai pēc tās atbrīvošanas, nulles rādītāju atsauču noņemšana, bufera pārpildīšana utt. Projekta ietvaros tiek izstrādāts Cargo pakotņu pārvaldnieks, lai izplatītu bibliotēkas, atvieglotu būvēšanu un pārvaldītu atkarības. Bibliotēku mitināšanai tiek uzturēts crates.io repozitorijs.
Atmiņas drošība tiek nodrošināta Rust kompilēšanas laikā, pārbaudot atsauces, sekojot līdzi objekta īpašumtiesībām, sekojot līdzi objektu kalpošanas laikam (tvērumam) un novērtējot atmiņas piekļuves pareizību koda izpildes laikā. Rūsa arī nodrošina aizsardzību pret veselu skaitļu pārpildīšanu, pieprasa obligātu mainīgo vērtību inicializāciju pirms lietošanas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainīgu atsauču un mainīgo jēdzienu, piedāvā spēcīgu statisko rakstīšanu, lai samazinātu loģiskās kļūdas.
Galvenie jauninājumi:
- Peldošā komata tipiem f32 un f64 ir ieviestas algebriskās metodes saskaitīšanai, atņemšanai, reizināšanai, dalīšanai un atlikumam, ieviešot optimizācijas, kas ir līdzīgas opcijai "-ffast-math" C/C++ kompilatoros. Šīs metodes ļauj mainīt darbību secību, ja nepieciešams optimizācijai, piemēram, ciklu vektorizācijai. Piemēram, aprēķinot "a + b + c + d", izmantojot parasto saskaitīšanu, kompilators vienmēr veiks aprēķinu tādā pašā secībā: "((a + b) + c) + d", bet, izmantojot algebraic_add metodi, tas var grupēt izteiksmi kā "(a + b) + (c + d)" un paralēli izpildīt "(a + b)" un "(c + d)", izmantojot SIMD instrukcijas. Algebrisko metožu izmantošanas cena ir aprēķinu rezultātu nedeterminisms, kas var mainīties kļūdas robežās.
- Visiem primitīvajiem veselo skaitļu tipiem ir iebūvēta metode "format_into" skaitļu konvertēšanai virknēs, ko var izmantot itoa pakotnes vietā. Kā parametrs tiek nodots NumBuffer buferis. , kura izmērs garantēti ir pietiekams, lai ierakstītu jebkuru izmantotā tipa vērtību decimālā formā. Izvade ir formatēta virkne &str, kuras dzīves ilgums ir piesaistīts buferim.
- Mijiedarbība starp ManuallyDrop instalāciju un Box viedrādītāju vairs neizraisa nedefinētu darbību.
- Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
- str::subst_diapazons
- [T]::apakššķēļu_diapazons
- kodols::fmt::NumBuffer
- <{integer}>::format_into
- Sūtīt/sinhronizēt std::process::CommandArgs
- {fN}::algebriskā_pievienošana
- {fN}::algebriskā_sub
- {fN}::algebriskā_mula
- {fN}::algebriskā_div
- {fN}::algebriskā_rem
- NonZero<{integer}>::from_str_radix
- Virkne::from_utf16le
- String::from_utf16le_lossy
- Virkne::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomu ::from_mut
- Atomu ::get_mut_slice
- Atomu ::from_mut_slice
- std::range::legacy
- Mērķa platformas thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf un thumbv8r-none-eabihf ir pārvietotas uz otro atbalsta līmeni, kas ietver būvēšanas garantiju, bet negarantē testu komplekta izturēšanu.
- Pievienots atbalsts platformām powerpc64-unknown-linux-gnuelfv2 un aarch64-unknown-linux-pauthtest, kurām tagad ir 3. atbalsta līmenis. 3. līmenis ietver pamata atbalstu, bet neietver automatizētu testēšanu, oficiālas versiju izlaidumus vai versiju verifikāciju.
Turklāt tika apdraudēta populārā crate pakotne arrayref, kas pēdējo 90 dienu laikā ir lejupielādēta vairāk nekā 53 miljonus reižu un ko kā atkarību izmanto 403 pakotnes. Uzbrucēji crates.io repozitorijā ievietoja jaunas pakotnes, kas saturēja ļaunprātīgu kodu: proc-macro1, proc-macro-en, aovine, arone, aronenao un tinymember. Pēc tam repozitorijā tika publicētas jaunas arrayref 0.3.10, internment 0.8.7 un append-only-vec 0.1.9 versijas, katrai pievienojot ļaunprātīgo proc-macro1 pakotni kā atkarību. Ļaunprātīgā arrayref pakotnes versija tika publicēta 20. augustā plkst. 10:15 (MSK) un palika aktīva līdz plkst. 11:41, pēc tam to noņēma crates.io administratori.
Ar arrayref uzturētāju vēl nav sazinājušies, lai noskaidrotu situāciju, taču tiek uzskatīts, ka uzbrucēji pārtvēra viņu akreditācijas datus. Paketē proc-macro1 būvēšanas skriptā bija ļaunprātīga izmaiņa, kas ielādēja izpildāmo failu no ārēja direktorija. serverisLejupielādētais fails tika saglabāts kā /tmp/rust-setup Unix sistēmās un Windows — %TEMP%\rust-setup.ps1 vai %TEMP%\rust-setup-launch.vbs.
Avots: opennet.ru
