Programmeringssproget Rust 1.98, grundlagt af Mozilla-projektet, men nu udviklet under ledelse af den uafhængige non-profit organisation Rust Foundation, er blevet udgivet. Sproget fokuserer på hukommelsessikkerhed og leverer værktøjer til at opnå høj parallelitet i opgaveudførelsen, samtidig med at det undværer brugen af en garbage collector og runtime (runtime er reduceret til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).
Rusts hukommelsesstyringsmetoder er designet til at eliminere fejl i pointermanipulation og beskytte mod problemer, der opstår fra lavniveau-hukommelsesstyring, såsom adgang til hukommelse efter den er blevet frigjort, dereferering af nullpointere, bufferoverløb osv. Projektet udvikler Cargo-pakkehåndteringen til at distribuere biblioteker, facilitere builds og administrere afhængigheder. crates.io-arkivet vedligeholdes til hosting af biblioteker.
Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.
Vigtigste innovationer:
- For flydende komma-typerne f32 og f64 er algebraiske metoder til addition, subtraktion, multiplikation, division og rest implementeret, hvilket implementerer optimeringer svarende til "-ffast-math"-indstillingen i C/C++-compilere. Disse metoder tillader ændring af rækkefølgen af operationer, når det er nødvendigt for optimeringer såsom loop-vektorisering. For eksempel, når man beregner "a + b + c + d" ved hjælp af almindelig addition, vil compileren altid udføre beregningen i samme rækkefølge: "((a + b) + c) + d", men ved hjælp af algebraic_add-metoden kan den gruppere udtrykket som "(a + b) + (c + d)" og udføre "(a + b)" og "(c + d)" parallelt ved hjælp af SIMD-instruktioner. Prisen ved at bruge algebraiske metoder er ikke-determinismen af beregningsresultaterne, som kan variere inden for fejlmarginen.
- Alle primitive heltalstyper har en indbygget "format_into"-metode til at konvertere tal til strenge, som kan bruges i stedet for itoa-pakken. En NumBuffer-buffer sendes som en parameter. , hvis størrelse garanteret er tilstrækkelig til at skrive enhver værdi af den anvendte type i decimalform. Outputtet er en formateret streng &str, hvis levetid er bundet til bufferen.
- Interaktion mellem ManuallyDrop-selen og Box smart-pointeren resulterer ikke længere i udefineret adfærd.
- En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
- str::substr_range
- [T]::underslice_range
- core::fmt::NumBuffer
- <{heltal}>::format_into
- Send/Synkroniser for std::process::CommandArgs
- {fN}::algebraisk_add
- {fN}::algebraisk_undergruppe
- {fN}::algebraisk_multifunktion
- {fN}::algebraisk_div
- {fN}::algebraisk_rem
- Ikke-nul<{heltal}>::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomar ::fra_mut
- Atomar ::hent_mut_slice
- Atomar ::from_mut_slice
- std::range::legacy
- Målplatformene thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf og thumbv8r-none-eabihf er blevet flyttet til andet supportniveau, som inkluderer en build-garanti, men ingen garantier for at bestå testpakken.
- Der er tilføjet understøttelse af platformene powerpc64-unknown-linux-gnuelfv2 og aarch64-unknown-linux-pauthtest, som nu har niveau 3 som understøttelse. Niveau 3 inkluderer grundlæggende understøttelse, men ikke automatiseret testning, officielle build-udgivelser eller build-verifikation.
Derudover blev den populære crate-pakke arrayref, som er blevet downloadet over 53 millioner gange i løbet af de sidste 90 dage og bruges som en afhængighed af 403 pakker, kompromitteret. Angribere postede nye pakker med skadelig kode til crates.io-arkivet: proc-macro1, proc-macro-en, aovine, arone, aronenao og tinymember. Efterfølgende blev nye udgivelser af arrayref 0.3.10, internment 0.8.7 og append-only-vec 0.1.9 udgivet til arkivet, hvor hver version tilføjede den skadelige proc-macro1-pakke som en afhængighed. Den skadelige version af arrayref-pakken blev postet den 20. august kl. 10:15 (MSK) og forblev aktiv indtil kl. 11:41, hvorefter den blev fjernet af crates.io-administratorer.
Vedligeholderen af arrayref er endnu ikke blevet kontaktet for at afklare situationen, men det menes, at deres legitimationsoplysninger blev opsnappet af angribere. I proc-macro1-pakken var en ondsindet ændring til stede i byggeskriptet og indlæste en eksekverbar fil fra en ekstern mappe. serverDen downloadede fil blev gemt som /tmp/rust-setup på Unix-systemer og i Windows — %TEMP%\rust-setup.ps1 eller %TEMP%\rust-setup-launch.vbs.
Kilde: opennet.ru
