UtgÄvan av Rust 1.98.0. Kompromiss av paketet arrayref, som har 53 miljoner nedladdningar under 3 mÄnader

Version 1.98 av programmeringssprÄket Rust har slÀppts. SprÄket, som ursprungligen utvecklades av Mozilla, utvecklas nu under ledning av den fristÄende, ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker hantering av minne och erbjuder verktyg för att uppnÄ hög parallellitet i utförandet av uppgifter, utan att anvÀnda en skrÀpsamlare (runtime Àr begrÀnsad till grundlÀggande initialisering och upprÀtthÄllande av standardbiblioteket).

Minneshanteringsmetoderna i Rust syftar till att eliminera fel vid hantering av pekare och skydda mot problem som uppstÄr frÄn lÄg nivÄ minneshantering, sÄsom att referera till minnesomrÄden efter att de har frigjorts, dereferensiering av nullpekare, buffertöverskridningar, etc. För spridning av bibliotek, byggnation och hantering av beroenden utvecklas paketchefen Cargo. För att lagra bibliotek stöds ett repository pÄ crates.io.

SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga nyheter:

  • För flyttalstypen f32 och f64 har algebraiska metoder för addition, subtraktion, multiplikation, division och modulus implementerats, som liknar funktionen "-ffast-math" i C/C++-kompilatorer. SĂ„dana metoder tillĂ„ter en Ă€ndring av operationernas ordning nĂ€r det Ă€r nödvĂ€ndigt för optimeringar, sĂ„som vektorisering av loopar. Vid berĂ€kning av "a + b + c + d" kommer kompilatorn att utföra berĂ€kningen i en ordning "((a + b) + c) + d" med vanlig addition, medan den vid anvĂ€ndning av metoden algebraic_add kan gruppera uttrycket som "(a + b) + (c + d)" och utföra "(a + b)" och "(c + d)" parallellt med hjĂ€lp av SIMD-instruktioner. Priset för att anvĂ€nda algebraiska metoder Ă€r icke-deterministiska resultat av berĂ€kningen, som kan variera inom noggrannheten.
  • För alla primitiva heltalstyper har en inbyggd metod "format_into" implementerats för att konvertera tal till strĂ€ngar, som kan anvĂ€ndas istĂ€llet för paketet itoa. En buffert av typen NumBuffer skickas som parameter, vars storlek garanterat Ă€r tillrĂ€cklig för att skriva nĂ„got vĂ€rde av den anvĂ€nda typen i decimalform. Den returnerar en formaterad strĂ€ng &str, vars livslĂ€ngd Ă€r kopplad till bufferten.
  • Interaktionen mellan ManuallyDrop-wrappern och den smarta pekaren Box leder nu inte lĂ€ngre till odefinierat beteende.
  • En ny uppsĂ€ttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
    • str::substr_range
    • [T]::subslice_range
    • core::fmt::NumBuffer
    • ::format_into
    • Send/Sync för std::process::CommandArgs
    • {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
  • MĂ„lenheter thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf och thumbv8r-none-eabihf har överförts till andra nivĂ„ns support, vilket innebĂ€r bygggaranti, men utan garantier vid genomförande av testsviten.
  • Stöd har lagts till för plattformarna powerpc64-unknown-linux-gnuelfv2 och aarch64-unknown-linux-pauthtest, som har fĂ„tt tredje nivĂ„ns support. Tredje nivĂ„ omfattar grundlĂ€ggande support, men utan automatiserad testning, publicering av officiella versioner och verifiering av byggmöjligheten för koden.

Det kan ocksÄ nÀmnas att det har skett en kompromiss av det populÀra crate-paketet arrayref, som har över 53 miljoner nedladdningar under de senaste 90 dagarna och anvÀnds som en beroende av 403 paket. Angripare har lagt upp nya paket proc-macro1, proc-macro-en, aovine, arone, aronenao och tinymember i förvaret crates.io, som innehöll skadlig kod. DÀrefter publicerades nya versioner av paketen arrayref 0.3.10, internment 0.8.7 och append-only-vec 0.1.9 dÀr den skadliga paket proc-macro1 lades till som beroende. Den skadliga versionen av paketet arrayref publicerades den 20 augusti kl. 10:15 (MSK) och fanns kvar till 11:41, efter vilket den togs bort av administratörerna för crates.io.

Kontakt med skaparen av arrayref har Ànnu inte kunnat upprÀttas för att reda ut situationen, men man misstÀnker att deras uppgifter har stulits av illvilliga aktörer. I paketet proc-macro1 fanns Àndringen i skriptet för byggande och laddade ner en körbar fil frÄn extern. servern. Den nedladdade filen sparades i Unix-system som /tmp/rust-setup, och i Windows som %TEMP%\rust-setup.ps1 eller %TEMP%\rust-setup-launch.vbs.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster