Rust 1.60 programmeringssprog udgivelse

Det generelle programmeringssprog Rust 1.60, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet frigivet. Sproget fokuserer på hukommelsessikkerhed og giver midlerne til at opnå høj jobparallelisme, samtidig med at man undgår brugen af ​​en skraldeopsamler og runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts hukommelseshåndteringsmetoder sparer udvikleren for fejl ved manipulation af pointere og beskytter mod problemer, der opstår på grund af hukommelseshåndtering på lavt niveau, såsom adgang til et hukommelsesområde efter det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, levere builds og administrere afhængigheder udvikler projektet Cargo Package Manager. Crates.io-lageret understøttes 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:

  • Rustc-kompileren har et stabiliseret LLVM-baseret system til generering af dækningsdata, der bruges til at evaluere kodedækning under test. For at aktivere dækningsdata under samling skal du bruge flaget "-Cinstrument-coverage", for eksempel ved at starte samlingen med kommandoen "RUSTFLAGS="-C instrument-coverage" cargo build". Efter at have kørt den eksekverbare fil kompileret på denne måde, vil filen default.profraw blive gemt i den aktuelle mappe, til behandling, som du kan bruge llvm-profdata-værktøjet fra llvm-tools-preview-komponenten. Det output, der behandles af llvm-profdata, kan derefter sendes til llvm-cov for at generere en kommenteret kodedækningsrapport. Oplysninger om linket til kildekoden er taget fra den eksekverbare fil, der undersøges, som indeholder de nødvendige data om forbindelsen mellem dækningstællere og koden. 1| 1|fn main() { 2| 1| println!("Hej verden!"); 3| 1|}
  • I fragtpakkemanageren er understøttelsen af ​​"-timings"-flaget blevet stabiliseret, hvilket inkluderer generering af en detaljeret rapport om bygningens fremskridt og udførelsestiden for hvert trin. Rapporten kan være nyttig til at optimere ydelsen af ​​montageprocessen.
  • Fragtpakkemanageren tilbyder en ny syntaks for mekanismen for betinget kompilering og valg af valgfrie afhængigheder, konfigureret i filen Cargo.toml ved at angive en liste over navngivne egenskaber i [features]-sektionen og aktiveret ved at aktivere egenskaberne under pakkeopbygningen ved at bruge flaget "--features". Den nye version tilføjer understøttelse af afhængigheder i separate navnerum og svage afhængigheder.

    I det første tilfælde er det muligt at bruge elementer med præfikset "dep:" i afsnittet "[features]" for eksplicit at linke til en valgfri afhængighed uden implicit at repræsentere denne afhængighed som en funktion. I det andet tilfælde er der tilføjet understøttelse af markering med "?"-tegnet. ("pakkenavn?/funktionsnavn") valgfrie afhængigheder, der kun bør inkluderes, hvis en anden egenskab inkluderer den givne valgfri afhængighed. For eksempel, i eksemplet nedenfor vil aktivering af egenskaben serde aktivere "serde"-afhængigheden såvel som "serde"-egenskaben for "rgb"-afhængigheden, men kun hvis "rgb"-afhængigheden er aktiveret et andet sted: [afhængigheder] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Understøttelse af trinvis kompilering, som blev deaktiveret i den sidste udgivelse, er blevet returneret. Compiler-fejlen, der fik funktionen til at blive deaktiveret, er blevet løst.
  • Løste nogle problemer med at give Instant timere en garanti for monoton timing, som tager højde for den tid, systemet bruger i dvaletilstand. Tidligere blev OS API'et brugt når det var muligt til at betjene timeren, som ikke tog højde for problematiske situationer, der bryder tidens monotoni, såsom hardwareproblemer, brug af virtualisering eller fejl i operativsystemet.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • Arc::ny_cyklisk
    • Rc::ny_cyklisk
    • skive::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • Måske Uninit::assume_init_drop
    • Måske Uninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Display til io::ErrorKind
    • Fra for ExitCode
    • Ikke til ! (skriv "aldrig")
    • _Op_Tildel<$t>
    • arch::is_aarch64_feature_detected!
  • Det tredje niveau af support er blevet implementeret for platformene mips64-openwrt-linux-musl* og armv7-unknown-linux-uclibceabi (softfloat). Det tredje niveau involverer grundlæggende support, men uden automatiseret test, udgivelse af officielle builds eller kontrol af, om koden kan bygges.
  • Compileren er blevet skiftet til at bruge LLVM 14.

Derudover kan du bemærke:

  • Tilføjet understøttelse for bootstrapping af rustc-kompileren ved hjælp af rustc_codegen_gcc-backend, som giver dig mulighed for at bruge libgccjit-biblioteket fra GCC-projektet som en kodegenerator i rustc, hvilket gør det muligt for rustc at yde support til arkitekturer og optimeringer, der er tilgængelige i GCC. Compilerpromovering betyder muligheden for at bruge en GCC-baseret kodegenerator i rustc til at bygge rustc-kompileren selv. På den praktiske side giver denne funktion dig mulighed for at bygge rustprogrammer til arkitekturer, der ikke tidligere var understøttet i rustc.
  • Udgivelsen af ​​uutils coreutils 0.0.13 værktøjssættet er tilgængelig, inden for hvilket en analog af GNU Coreutils-pakken, omskrevet til Rust-sproget, er ved at blive udviklet. Coreutils kommer med over hundrede hjælpeprogrammer, inklusive sort, cat, chmod, chown, chroot, cp, date, dd, echo, værtsnavn, id, ln og ls. Målet med projektet er at skabe en alternativ implementering på tværs af platforme af Coreutils, der er i stand til at køre på Windows-, Redox- og Fuchsia-platforme, samt distribution under den tilladelige MIT-licens i stedet for GPL copyleft-licensen.

    Den nye version har forbedrede implementeringer af mange hjælpeprogrammer, inklusive væsentligt forbedret kompatibilitet af cp, dd, df, split og tr hjælpeprogrammer med deres modstykker fra GNU-projektet. Online dokumentation leveres. Clap-parseren bruges til at analysere kommandolinjeargumenter, hvilket har forbedret outputtet for flaget "--help" og tilføjet understøttelse af forkortelser af lange kommandoer (du kan f.eks. angive "ls -col" i stedet for "ls -color" ”).

Kilde: opennet.ru

Tilføj en kommentar