Rust 1.47 programmeringssprog udgivelse

Udgivelse 1.47 af Rust-systemets programmeringssprog, grundlagt af Mozilla-projektet, 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:

  • Implementeret understøttelse af træk for arrays af vilkårlig størrelse. Tidligere, på grund af manglende evne til at definere generiske funktioner for alle heltalværdier, gav standardbiblioteket kun indbygget egenskabsunderstøttelse for arrays op til 32 elementer i størrelse (egenskaberne for hver størrelse var statisk defineret). Takket være oprettelsen af ​​const generisk funktionalitet blev det muligt at definere generiske funktioner for enhver matrixstørrelse, men de er endnu ikke inkluderet i sprogets stabile funktioner, selvom de er implementeret i compileren og nu bruges i standardbiblioteket til array-typer af enhver størrelse.
    For eksempel vil følgende konstruktion i Rust 1.47 udskrive indholdet af et array, selvom det tidligere ville have resulteret i en fejl:

fn main() {
lad xs = [0; 34];
println!("{:?}", xs);
}

  • Forudsat output af kortere spor (backtrace), output i nødsituationer. Elementer, der ikke er af interesse i de fleste situationer, men rod i outputtet og distraherer opmærksomheden fra de primære årsager til problemet, udelukkes fra sporet. For at returnere en fuld sporing kan du bruge miljøvariablen "RUST_BACKTRACE=full". For eksempel for koden

fn main() {
panik!();
}

Tidligere blev sporingen vist i 23 trin, men nu vil den blive reduceret til 3 trin, så du straks kan forstå essensen:

tråden 'main' gik i panik ved 'eksplicit panik', src/main.rs:2:5
stak tilbagesporing:
0: std::panik::begynd_panik
på /rustc/d…d75a/library/std/src/panicking.rs:497
1: legeplads::hoved
på ./src/main.rs:2
2: kerne::ops::funktion::FnOnce::call_once
på /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompileren er blevet opdateret til at bygge ved hjælp af LLVM 11 (Rust bruger LLVM som backend til kodegenerering). Samtidig bibeholdes muligheden for at bygge med gammel LLVM, op ​​til version 8, men som standard (i rust-lang/llvm-project) benyttes nu LLVM 11. Udgivelsen af ​​LLVM 11 forventes i den kommende tid. dage.
  • På Windows-platformen giver rustc-kompileren support til at aktivere kontrolflowintegritetstjek (Control Flow Guard), aktiveret ved hjælp af flaget "-C control-flow-guard". På andre platforme ignoreres dette flag indtil videre.
  • En ny del af API'en er blevet overført til den stabile kategori, inklusive stabiliseret Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU og f64::TAU.
  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i metoderne:
    • ny for alle heltal bortset fra nul;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub og saturating_mul for alle heltal;
    • er_ascii_alfabetisk, is_ascii_store bogstaver, is_ascii_små bogstaver, is_ascii_alfanumerisk, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunctuation, is_ascii_graphic, is_ascii_whitespace og is_ascii_typer for char og u8 typer
  • Til FreeBSD bruges værktøjssættet fra FreeBSD 11.4 (FreeBSD 10 understøtter ikke LLVM 11).

Taget fra opennet.ru

Kilde: linux.org.ru

Tilføj en kommentar