Rust 1.53 frigivet. Google vil finansiere tilføjelse af Rust-understøttelse til Linux-kernen

Udgivelsen af ​​systemprogrammeringssproget Rust 1.53, 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:

  • For arrays er IntoIterator-trækket blevet implementeret, som giver dig mulighed for at organisere iterationen af ​​array-elementer efter værdier: for i i [1, 2, 3] { .. }

    Det er også muligt at videregive arrays til metoder, der accepterer iteratorer, for eksempel: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) i some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Tidligere var IntoIterator kun implementeret til array-referencer, dvs. at iterere over værdier krævede brug af referencer ("&[1, 2, 3]") eller "[1, 2, 3].iter()". Implementeringen af ​​IntoIterator til arrays blev hæmmet af kompatibilitetsproblemer forårsaget af en tidligere compilerkonvertering fra array.into_iter() til (&array).into_iter(). Disse problemer blev løst med en løsning - compileren vil fortsætte med at konvertere array.into_iter() til (&array).into_iter(), som om der ikke var nogen implementering af IntoIterator-egenskaben, men kun når metoden kaldes ved hjælp af ".into_iter() )" syntaks og uden at berøre opkaldene i formen "i [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Det er muligt at angive udtryk "|" (logisk ELLER-operation) i enhver del af skabelonen, f.eks. i stedet for "Nogle(1) | Some(2)" kan du nu skrive "Some(1 | 2)": match resultat { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Brugen af ​​ikke-ASCII-tegn i identifikatorer er tilladt, inklusive alle nationale tegn defineret i Unicode UAX 31-specifikationen, men eksklusive emoji-tegn. Hvis du bruger forskellige, men lignende tegn, vil compileren udsende en advarsel. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: Streng, } lad α = 1; lad os = 2; advarsel: identifikatorpar anses for at kunne forveksles mellem 's' og 's'
  • En ny del af API'er er blevet overført til den stabile kategori, inklusive følgende stabiliserede:
    • array::fra_ref
    • array::fra_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Varighed::NUL
    • Varighed::MAX
    • Varighed::er_nul
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::er_subnormal
    • f64::er_subnormal
    • IntoIterator til arrays
    • {integer}::BITS
    • io::Error::Unsupported
    • Ikke-Nul*::ledende_nul
    • Ikke-nul*::trailing_zeros
    • Option::indsæt
    • Bestilling::is_eq
    • Bestilling::is_ne
    • Bestilling::is_lt
    • Bestilling::is_gt
    • Bestilling::is_le
    • Bestilling::is_ge
    • OsStr::make_ascii_små bogstaver
    • OsStr::make_ascii_store bogstaver
    • OsStr::to_ascii_små bogstaver
    • OsStr::to_ascii_store bogstaver
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • skive::IterMut::as_slice
    • AsRef<[T]> for skive::IterMut
    • impl SliceIndex for (Bound , Indbundet )
    • Vec::forlænge_fra_indenfra
  • Det tredje niveau af support til wasm64-unknown-unknown 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.
  • Cargo-pakkeadministratoren er blevet flyttet til at bruge navnet "main" for hovedgrenen af ​​Git-lageret (HEAD) som standard. Afhængigheder hostet i repositories, der bruger navnet main i stedet for master, kræver ikke længere, at branch = "main" skal konfigureres.
  • I compileren er kravene til minimumsversionen af ​​LLVM hævet til LLVM 10.

Derudover kan vi bemærke, at der er tilvejebragt finansiering til udvikling af integration i Linux-kernen af ​​værktøjer til udvikling af komponenter i Rust-sproget. Arbejdet vil blive udført inden for rammerne af Prossimo-projektet i regi af ISRG-organisationen (Internet Security Research Group), som er stifter af Let's Encrypt-projektet og fremmer HTTPS og udvikling af teknologier til at øge sikkerheden i Internet. Midlerne vil blive leveret af Google, som vil betale for arbejdet udført af Miguel Ojeda, forfatteren af ​​Rust-for-Linux-projektet. Tidligere har ISRG og Google allerede finansieret oprettelsen af ​​en alternativ HTTP-backend til curl-værktøjet og udviklingen af ​​et nyt TLS-modul til Apache http-serveren.

Ifølge Microsoft og Google er omkring 70 % af sårbarhederne forårsaget af usikker hukommelseshåndtering. Det forventes, at brug af Rust-sproget til at udvikle kernekomponenter såsom enhedsdrivere vil reducere risikoen for sårbarheder forårsaget af usikker hukommelseshåndtering og eliminere fejl såsom adgang til en hukommelsesregion, efter at den er blevet frigivet og overskridelse af buffergrænser.

Hukommelsessikker håndtering leveres i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab og objektlevetid (scope), samt gennem evaluering af korrektheden 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.

Kilde: opennet.ru

Tilføj en kommentar