Roest 1.53 vrijgegeven. Google financiert het toevoegen van Rust-ondersteuning aan de Linux-kernel

De release van de systeemprogrammeertaal Rust 1.53, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt de middelen om een ​​hoge taakparallelliteit te bereiken zonder gebruik te maken van een garbage collector of runtime (runtime wordt teruggebracht tot basisinitialisatie en onderhoud van de standaardbibliotheek).

Het automatische geheugenbeheer van Rust elimineert fouten bij het manipuleren van pointers en beschermt tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals toegang tot een geheugengebied nadat het is vrijgegeven, null pointer-dereferenties, bufferoverruns, enz. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Belangrijkste innovaties:

  • Voor arrays is de eigenschap IntoIterator geïmplementeerd, waarmee u de iteratie van array-elementen kunt organiseren op basis van waarden: for i in [1, 2, 3] { .. }

    Het is ook mogelijk om arrays door te geven aan methoden die iterators accepteren, bijvoorbeeld: let set = BTreeSet::from_iter([1, 2, 3]); voor (a, b) in een_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Voorheen werd IntoIterator alleen geïmplementeerd voor arrayreferenties, d.w.z. om waarden te herhalen was het gebruik van referenties (“&[1, 2, 3]”) of “[1, 2, 3].iter()” vereist. De implementatie van IntoIterator voor arrays werd gehinderd door compatibiliteitsproblemen veroorzaakt door een eerdere conversie van de compiler van array.into_iter() naar (&array).into_iter(). Deze problemen zijn opgelost met een oplossing: de compiler zal doorgaan met het converteren van array.into_iter() naar (&array).into_iter() alsof er geen implementatie van de IntoIterator-eigenschap is, maar alleen bij het aanroepen van de methode met behulp van de ".into_iter() )" syntaxis en zonder de aanroepen in de vorm "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3]) aan te raken )".

  • Het is mogelijk om expressies “|” te specificeren (logische OR-bewerking) in een willekeurig deel van de sjabloon, bijvoorbeeld in plaats van “Some(1) | Some(2)" kun je nu "Some(1 | 2)" schrijven: match resultaat { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Het gebruik van niet-ASCII-tekens in identificatiegegevens is toegestaan, inclusief alle nationale tekens gedefinieerd in de Unicode UAX 31-specificatie, maar met uitzondering van emoji-tekens. Als u verschillende maar vergelijkbare tekens gebruikt, geeft de compiler een waarschuwing. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } let α = 1; letsos = 2; waarschuwing: identificatiepaar wordt als verwarrend beschouwd tussen 's' en 's'
  • Een nieuw deel van de API's is overgebracht naar de stabiele categorie, waaronder de volgende gestabiliseerde:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • Btreeset::behouden
    • BTreeMap::behouden
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duur::NUL
    • Duur::MAX
    • Duur::is_nul
    • Duur::saturating_add
    • Duur::saturating_sub
    • Duur::saturating_mul
    • f32::is_subnormaal
    • f64::is_subnormaal
    • IntoIterator voor arrays
    • {geheel getal}::BITS
    • io::Fout::Niet ondersteund
    • Niet-nul*::leading_zeros
    • Niet-nul*::trailing_zeros
    • Optie::invoegen
    • Bestellen::is_eq
    • Bestellen::is_ne
    • Bestellen::is_lt
    • Bestellen::is_gt
    • Bestellen::is_le
    • Bestellen::is_ge
    • OsStr::make_ascii_kleine letters
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_kleine letters
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekbaar::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> voor slice::IterMut
    • impl SliceIndex voor (Bound , gebonden )
    • Vec::extend_from_within
  • Het derde ondersteuningsniveau voor het wasm64-unknown-unknown-platform is geïmplementeerd. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.
  • De Cargo-pakketbeheerder is verplaatst om standaard de naam "main" te gebruiken voor de hoofdtak van de Git-repository (HEAD). Afhankelijkheden die worden gehost in repository's die de naam main gebruiken in plaats van master vereisen niet langer dat branch = "main" wordt geconfigureerd.
  • In de compiler worden de vereisten voor de minimale versie van LLVM verhoogd naar LLVM 10.

Daarnaast kunnen we nota nemen van het verstrekken van financiering voor de ontwikkeling van integratie in de Linux-kernel van tools voor het ontwikkelen van componenten in de Rust-taal. De werkzaamheden zullen worden uitgevoerd in het kader van het Prossimo-project onder auspiciën van de ISRG-organisatie (Internet Security Research Group), die de oprichter is van het Let's Encrypt-project en HTTPS en de ontwikkeling van technologieën promoot om de veiligheid van de Internet. Het geld wordt verstrekt door Google, dat het werk van Miguel Ojeda, de auteur van het Rust-for-Linux-project, zal betalen. Eerder hebben ISRG en Google al de creatie van een alternatieve HTTP-backend voor het curl-hulpprogramma en de ontwikkeling van een nieuwe TLS-module voor de Apache http-server gefinancierd.

Volgens Microsoft en Google wordt ongeveer 70% van de kwetsbaarheden veroorzaakt door onveilige omgang met geheugen. Er wordt verwacht dat het gebruik van de Rust-taal om kernelcomponenten zoals apparaatstuurprogramma's te ontwikkelen het risico op kwetsbaarheden veroorzaakt door onveilige geheugenverwerking zal verminderen en fouten zal elimineren, zoals toegang krijgen tot een geheugengebied nadat het is vrijgegeven en het overschrijden van buffergrenzen.

Rust dwingt de geheugenveiligheid af tijdens het compileren door referentiecontrole, objecteigendom en het volgen van de levensduur van objecten (scopes), en door de juistheid van geheugentoegang tijdens runtime te evalueren. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Bron: opennet.ru

Voeg een reactie