Rust 1.53 utgitt. Google vil finansiere å legge til Rust-støtte til Linux-kjernen

Utgivelsen av systemprogrammeringsspråket Rust 1.53, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, er 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:

  • For matriser er IntoIterator-trekket implementert, som lar deg organisere iterasjonen av matriseelementer etter verdier: for i i [1, 2, 3] { .. }

    Det er også mulig å sende arrays til metoder som aksepterer iteratorer, for eksempel: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) i some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Tidligere ble IntoIterator kun implementert for arrayreferanser, dvs. å iterere over verdier krevde bruk av referanser ("&[1, 2, 3]") eller "[1, 2, 3].iter()". Implementeringen av IntoIterator for arrays ble hindret av kompatibilitetsproblemer forårsaket av en tidligere kompilatorkonvertering fra array.into_iter() til (&array).into_iter(). Disse problemene ble løst med en løsning - kompilatoren vil fortsette å konvertere array.into_iter() til (&array).into_iter() som om det ikke var noen implementering av IntoIterator-trekket, men bare når metoden kalles ved å bruke ".into_iter( )" syntaks og uten å berøre kallene i formen "i [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Det er mulig å spesifisere uttrykk "|" (logisk ELLER-operasjon) i hvilken som helst del av malen, for eksempel i stedet for "Noen(1) | Noen(2)" kan du nå skrive "Noen(1 | 2)": matchresultat { Ok(Noen(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Bruk av ikke-ASCII-tegn i identifikatorer er tillatt, inkludert alle nasjonale tegn definert i Unicode UAX 31-spesifikasjonen, men unntatt emoji-tegn. Hvis du bruker forskjellige, men like tegn, vil kompilatoren gi en advarsel. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } la α = 1; la oss = 2; advarsel: identifikatorpar anses som forveksles mellom 's' og 's'
  • En ny del av APIer har blitt overført til den stabile kategorien, inkludert følgende stabiliserte:
    • array::fra_ref
    • array::from_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
    • Varighet::NULL
    • Varighet::MAX
    • Varighet::er_null
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::er_subnormal
    • f64::er_subnormal
    • IntoIterator for arrays
    • {integer}::BITS
    • io::Feil::Støttes ikke
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Alternativ::sett inn
    • Bestilling::is_eq
    • Bestilling::is_ne
    • Bestilling::is_lt
    • Bestilling::is_gt
    • Bestilling::is_le
    • Bestilling::is_ge
    • OsStr::make_ascii_små bokstaver
    • OsStr::make_ascii_store bokstaver
    • OsStr::to_ascii_små bokstaver
    • OsStr::to_ascii_store bokstaver
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • skive::IterMut::som_skive
    • AsRef<[T]> for skive::IterMut
    • impl SliceIndex for (Bound , bundet )
    • Vec::extend_from_within
  • Det tredje nivået av støtte for wasm64-unknown-unknown-plattformen er implementert. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg, eller sjekk om koden kan bygges.
  • Cargo-pakkebehandleren har blitt flyttet til å bruke navnet "main" for hovedgrenen til Git-depotet (HEAD) som standard. Avhengigheter som er vert i repositories som bruker navnet hoved i stedet for master krever ikke lenger at branch = "main" skal konfigureres.
  • I kompilatoren er kravene til minimumsversjonen av LLVM hevet til LLVM 10.

I tillegg kan vi legge merke til tildelingen av finansiering for utvikling av integrering i Linux-kjernen av verktøy for utvikling av komponenter i Rust-språket. Arbeidet skal utføres innenfor rammen av Prossimo-prosjektet i regi av ISRG-organisasjonen (Internet Security Research Group), som er grunnlegger av Let's Encrypt-prosjektet og fremmer HTTPS og utvikling av teknologier for å øke sikkerheten til Internett. Midlene vil bli gitt av Google, som vil betale for arbeidet til Miguel Ojeda, forfatteren av Rust-for-Linux-prosjektet. Tidligere har ISRG og Google allerede finansiert etableringen av en alternativ HTTP-backend for curl-verktøyet og utviklingen av en ny TLS-modul for Apache http-serveren.

Ifølge Microsoft og Google er omtrent 70 % av sårbarhetene forårsaket av usikker minnehåndtering. Det forventes at bruk av Rust-språket til å utvikle kjernekomponenter som enhetsdrivere vil redusere risikoen for sårbarheter forårsaket av usikker minnehåndtering og eliminere feil som tilgang til en minneregion etter at den har blitt frigjort og overskridelse av buffergrenser.

Rust håndhever minnesikkerhet ved kompilering gjennom referansesjekking, objekteierskap og objektlevetidssporing (scopes), og ved å evaluere riktigheten av minnetilganger under kjøring. Rust gir også beskyttelse mot heltallsoverløp, krever at variabelverdier initialiseres før bruk, har bedre feilhåndtering i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, og tilbyr sterk statisk skriving for å minimere logiske feil.

Kilde: opennet.ru

Legg til en kommentar