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
