Rust 1.47 programmeringsspråkutgivelse

Utgivelse 1.47 av Rust-systemets programmeringsspråk, grunnlagt av Mozilla-prosjektet, har blitt publisert. Språket fokuserer på minnesikkerhet, gir automatisk minnebehandling og gir midler til å oppnå høy oppgaveparallellisme uten å bruke en søppeloppsamler eller kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts automatiske minnebehandling eliminerer feil ved manipulering av pekere og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, som tilgang til et minneområde etter at det har blitt frigjort, null-pekereferanser, bufferoverskridelser, etc. For å distribuere biblioteker, sikre montering og administrere avhengigheter, utvikler prosjektet Cargo-pakkebehandleren. Crates.io-depotet støttes for hosting av biblioteker.

Hovedinnovasjoner:

  • Implementert støtte for egenskaper for arrays av vilkårlig størrelse. Tidligere, på grunn av manglende evne til å definere generiske funksjoner for alle heltallsverdier, ga standardbiblioteket innebygd trekkstøtte bare for arrays opp til 32 elementer i størrelse (trekkene for hver størrelse var statisk definert). Takket være opprettelsen av const generisk funksjonalitet ble det mulig å definere generiske funksjoner for enhver matrisestørrelse, men de er ennå ikke inkludert i de stabile funksjonene til språket, selv om de er implementert i kompilatoren og nå brukes i standardbiblioteket for array-typer av alle størrelser.
    For eksempel vil følgende konstruksjon i Rust 1.47 skrive ut innholdet i en matrise, selv om det tidligere ville ha resultert i en feil:

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

  • Forutsatt utgang av kortere spor (backtrace), utgang i nødssituasjoner. Elementer som ikke er av interesse i de fleste situasjoner, men som roterer utdataene og distraherer oppmerksomheten fra de primære årsakene til problemet, ekskluderes fra sporet. For å returnere en full sporing kan du bruke miljøvariabelen "RUST_BACKTRACE=full". For eksempel for koden

fn main() {
panikk!();
}

Tidligere ble sporet sendt ut i 23 trinn, men nå vil det reduseres til 3 trinn, slik at du umiddelbart kan forstå essensen:

tråden 'main' fikk panikk ved 'eksplisitt panikk', src/main.rs:2:5
stabel tilbakesporing:
0: std::panikk::begynn_panikk
på /rustc/d…d75a/library/std/src/panicking.rs:497
1: lekeplass::hoved
på ./src/main.rs:2
2: kjerne::ops::funksjon::FnOnce::call_once
på /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompilatoren har blitt oppdatert til å bygge med LLVM 11 (Rust bruker LLVM som en backend for kodegenerering). Samtidig beholdes muligheten til å bygge med gammel LLVM, opp til versjon 8, men som standard (i rust-lang/llvm-prosjekt) benyttes nå LLVM 11. Utgivelse av LLVM 11 forventes i løpet av kommende dager.
  • På Windows-plattformen gir rustc-kompilatoren støtte for å aktivere kontrollflytintegritetskontroller (Control Flow Guard), aktivert ved hjelp av "-C control-flow-guard"-flagget. På andre plattformer ignoreres dette flagget foreløpig.
  • En ny del av API-en har blitt overført til den stabile kategorien, inkludert stabilisert 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»-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i metodene:
    • ny for alle heltall bortsett fra null;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub og saturating_mul for alle heltall;
    • is_ascii_alphabetic, is_ascii_storecase, is_ascii_small, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunctuation, is_ascii_graphic, is_ascii_whitespace og is_ascii_types for char
  • For FreeBSD brukes verktøysettet fra FreeBSD 11.4 (FreeBSD 10 støtter ikke LLVM 11).

Tatt fra opennet.ru

Kilde: linux.org.ru

Legg til en kommentar