Megjelent a Mozilla projekt által alapított, de most a független, nonprofit Rust Foundation égisze alatt fejlesztett Rust 1.98 programozási nyelv. A nyelv a memóriabiztonságra összpontosít, és eszközöket biztosít a feladatvégrehajtás magas szintű párhuzamosságának eléréséhez, miközben szemétgyűjtő és futtatókörnyezet használata nélkül is megtehető (a futtatókörnyezet a standard könyvtár alapvető inicializálására és karbantartására korlátozódik).
A Rust memóriakezelési módszerei úgy lettek kialakítva, hogy kiküszöböljék a mutatómanipuláció hibáit, és védelmet nyújtsanak az alacsony szintű memóriakezelésből eredő problémák ellen, mint például a memória elérése a felszabadítás után, a null mutatók dereferenciálása, a puffer túlcsordulása stb. A projekt a Cargo csomagkezelőt fejleszti a könyvtárak terjesztésére, a buildek megkönnyítésére és a függőségek kezelésére. A crates.io repository a könyvtárak tárolására szolgál.
A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.
Főbb újítások:
- Az f32 és f64 lebegőpontos típusok esetében algebrai módszereket valósítunk meg az összeadáshoz, kivonáshoz, szorzáshoz, osztáshoz és maradékhoz, amelyek optimalizálásokat valósítanak meg, hasonlóan a C/C++ fordítók "-ffast-math" opciójához. Ezek a módszerek lehetővé teszik a műveletek sorrendjének megváltoztatását, ha optimalizáláshoz, például ciklusvektorizáláshoz szükséges. Például, amikor az "a + b + c + d" képletet hagyományos összeadással számítjuk ki, a fordító mindig ugyanabban a sorrendben hajtja végre a számítást: "((a + b) + c) + d", de az algebrai_add metódus használatával a kifejezést "(a + b) + (c + d)"-ként csoportosíthatja, és az "(a + b)" és "(c + d)" műveleteket párhuzamosan végrehajthatja SIMD utasításokkal. Az algebrai módszerek használatának ára a számítási eredmények nemdeterminizmusa, amely a hibahatáron belül változhat.
- Minden primitív egész típusú értékhez tartozik egy beépített "format_into" metódus a számok karakterláncokká konvertálására, amely az itoa csomag helyett használható. Paraméterként egy NumBuffer puffert adunk át. , amelynek mérete garantáltan elegendő ahhoz, hogy a használt típus bármely értékét decimális alakban kiírja. A kimenet egy formázott &str karakterlánc, amelynek élettartama a pufferhez van kötve.
- A ManuallyDrop kábelköteg és a Box intelligens mutató közötti interakció már nem eredményez meghatározatlan viselkedést.
- Az API új része átkerült a stabil kategóriába, beleértve a tulajdonságok módszereit és megvalósításait is:
- str::alst_tartomány
- [T]::alszelet_tartomány
- core::fmt::NumBuffer
- <{integer}>::format_into
- Küldés/szinkronizálás a std::process::CommandArgs számára
- {fN}::algebrai_hozzáadás
- {fN}::algebrai_felsőbbrendű_feladat
- {fN}::algebrai_mul
- {fN}::algebrai_div
- {fN}::algebrai_rem
- NonZero<{integer}>::from_str_radix
- Karakterlánc::from_utf16le
- Karakterlánc::from_utf16le_lossy
- Karakterlánc::from_utf16be
- Karakterlánc::from_utf16be_lossy
- [T]::csík_körforgásfix
- str::strip_circumfix
- Atom ::from_mut
- Atom ::get_mut_slice
- Atom ::from_mut_slice
- std::range::legacy
- A thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf és thumbv8r-none-eabihf célplatformok átkerültek a második támogatási szintre, amely magában foglalja a build garanciát, de nem garantálja a tesztkészlet sikeres teljesítését.
- Támogatás került a powerpc64-unknown-linux-gnuelfv2 és az aarch64-unknown-linux-pauthtest platformokhoz, amelyek mostantól 3. szintű támogatást kaptak. A 3. szint magában foglalja az alapvető támogatást, de nem tartalmazza az automatizált tesztelést, a hivatalos build kiadásokat vagy a build ellenőrzést.
Ezenkívül a népszerű crate csomag, az arrayref is feltörték a rendszert, amelyet az elmúlt 90 napban több mint 53 millió alkalommal töltöttek le, és amelyet 403 csomag használ függőségként. A támadók új, rosszindulatú kódot tartalmazó csomagokat tettek közzé a crates.io tárhelyen: proc-macro1, proc-macro-en, aovine, arone, aronenao és tinymember. Ezt követően az arrayref 0.3.10, az internment 0.8.7 és az append-only-vec 0.1.9 új kiadásai is megjelentek a tárhelyen, mindegyikben függőségként hozzáadva a rosszindulatú proc-macro1 csomagot. Az arrayref csomag rosszindulatú verziója augusztus 20-án, MSK idő szerint 10:15-kor került közzétételre, és 11:41-ig maradt aktív, ezt követően a crates.io adminisztrátorai eltávolították.
Az arrayref karbantartójával még nem vették fel a kapcsolatot a helyzet tisztázása érdekében, de úgy vélik, hogy a támadók ellopták a hitelesítő adataikat. A proc-macro1 csomagban egy rosszindulatú módosítás volt jelen a build szkriptben, és egy külső könyvtárból töltött be egy futtatható fájlt. szerverA letöltött fájlt Unix rendszereken /tmp/rust-setup néven mentettük, míg Unix rendszereken Windows — %TEMP%\rust-setup.ps1 vagy %TEMP%\rust-setup-launch.vbs.
Forrás: opennet.ru
