Rust 1.58 programmeringssprog udgivelse

Udgivelsen af ​​det generelle programmeringssprog Rust 1.58, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet offentliggjort. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver mulighed for at opnå høj opgaveparallelisme uden brug af en skraldeopsamler eller runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts automatiske hukommelseshåndtering eliminerer fejl ved manipulation af pointere og beskytter mod problemer, der opstår fra manipulation af hukommelse på lavt niveau, såsom adgang til en hukommelsesregion, efter at den er blevet frigivet, nul pointer-dereferencer, bufferoverskridelser osv. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet Cargo-pakkemanageren. Crates.io-lageret understøttes til hosting af biblioteker.

Vigtigste innovationer:

  • I strengformateringsblokke implementeres muligheden for at erstatte vilkårlige identifikatorer ved at tilføje udtrykket "{identifier}" til strengen, ud over den tidligere tilgængelige mulighed for at erstatte variabler, der er eksplicit angivet efter en streng efter nummer og navn. For eksempel: // Tidligere understøttede konstruktioner: println!("Hej, {}!", get_person()); println!("Hej, {0}!", get_person()); println!("Hej, {person}!", person = get_person()); // nu kan du angive let person = get_person(); println!("Hej, {person}!");

    Identifikatorer kan også angives direkte i formateringsmuligheder. lad (bredde, præcision) = get_format(); for (navn, score) i get_scores() { println!("{navn}: {score:width$.precision$}"); }

    Den nye substitution virker i alle makroer, der understøtter strengformatdefinition, med undtagelse af "panik!"-makroen. i 2015- og 2018-versionerne af Rust-sproget, hvor panic!("{ident}") behandles som en regulær streng (i Rust 2021 virker substitutionen).

  • Opførselen af ​​std::proces::Kommandostrukturen på Windows-platformen er blevet ændret, så den af ​​sikkerhedsmæssige årsager ikke længere leder efter eksekverbare filer i den aktuelle mappe, når kommandoer udføres. Den aktuelle mappe er udeladt, fordi den kan bruges til at udføre ondsindet kode, hvis programmer køres i mapper, der ikke er tillid til (CVE-2021-3013). Den nye eksekverbare detektionslogik involverer søgning i Rust-mappen, programmappen, Windows-systemmappen og de mapper, der er angivet i PATH-miljøvariablen.
  • Standardbiblioteket har udvidet antallet af funktioner mærket "#[must_use]" for at udstede en advarsel, hvis returværdien ignoreres, hvilket hjælper med at identificere fejl forårsaget af at antage, at en funktion vil ændre værdier i stedet for at returnere en ny værdi.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • Metadata::is_symlink
    • Sti::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Resultat::unwrap_unchecked
    • Resultat::unwrap_err_unchecked
  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i funktionerne:
    • Varighed::ny
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Tilladt dereference af "*const T"-pointere i "const"-kontekster.
  • I Cargo Package Manager er feltet rust_version blevet tilføjet til pakkens metadata, og "--message-format"-indstillingen er blevet tilføjet til kommandoen "cargo install".
  • Compileren implementerer understøttelse af CFI-beskyttelsesmekanismen (Control Flow Integrity), som tilføjer kontroller før hvert indirekte opkald for at detektere nogle former for udefineret adfærd, der potentielt kan føre til en overtrædelse af den normale udførelsesordre (kontrolflow) som følge af brug af udnyttelser, der ændrer pointere gemt i hukommelsen på funktioner.
  • Compileren har tilføjet understøttelse af version 5 og 6 af LLVM-dækningssammenligningsformatet, der bruges til at evaluere kodedækning under test.
  • I compileren er kravene til minimumsversionen af ​​LLVM hævet til LLVM 12.
  • Det tredje niveau af understøttelse af x86_64-unknown-none platformen er blevet implementeret. Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.

Derudover kan vi bemærke Microsofts offentliggørelse af udgivelsen af ​​Rust til Windows 0.30-biblioteker, som giver dig mulighed for at bruge Rust-sproget til at udvikle applikationer til Windows OS. Sættet indeholder to kassepakker (windows og windows-sys), hvorigennem du kan få adgang til Win API i Rust-programmer. Kode til API-understøttelse genereres dynamisk fra metadata, der beskriver API'et, hvilket giver dig mulighed for at implementere understøttelse ikke kun for eksisterende Win API-kald, men for kald, der vil dukke op i fremtiden. Den nye version tilføjer understøttelse af UWP-målplatformen (Universal Windows Platform) og implementerer Håndtag- og Debug-typerne.

Kilde: opennet.ru

Tilføj en kommentar