Rust 1.58 programmeertaal release

De release van de algemene programmeertaal Rust 1.58, 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:

  • In lijnopmaakblokken is, naast de voorheen beschikbare mogelijkheid om variabelen die expliciet na een regel worden vermeld op nummer en naam, de mogelijkheid geïmplementeerd om willekeurige identificatiegegevens te vervangen door de uitdrukking “{identifier}” aan de regel toe te voegen. Bijvoorbeeld: // Eerder ondersteunde constructies: println!("Hallo, {}!", get_person()); println!("Hallo, {0}!", get_person()); println!("Hallo, {person}!", person = get_person()); // nu kun je let person = get_person(); println!("Hallo, {persoon}!");

    Identificatiegegevens kunnen ook rechtstreeks in de opmaakopties worden opgegeven. let (breedte, precisie) = get_format(); for (naam, score) in get_scores() { println!("{naam}: {score:width$.precision$}"); }

    De nieuwe vervanging werkt in alle macro's die de definitie van tekenreeksformaten ondersteunen, met uitzondering van de macro "paniek!". in de versies van 2015 en 2018 van de Rust-taal, waarin paniek!("{ident}") wordt behandeld als een gewone tekenreeks (in Rust 2021 werkt de vervanging).

  • Het gedrag van de std::process::Command-structuur op het Windows-platform is zodanig gewijzigd dat bij het uitvoeren van opdrachten om veiligheidsredenen niet langer wordt gezocht naar uitvoerbare bestanden in de huidige map. De huidige map is uitgesloten omdat deze kan worden gebruikt om kwaadaardige code uit te voeren als programma's in niet-vertrouwde mappen worden uitgevoerd (CVE-2021-3013). De nieuwe detectielogica voor uitvoerbare bestanden omvat het doorzoeken van de Rust-mappen, de applicatiemap, de Windows-systeemmap en de mappen die zijn opgegeven in de omgevingsvariabele PATH.
  • De standaardbibliotheek heeft het aantal functies gemarkeerd met "#[must_use]" uitgebreid om een ​​waarschuwing te geven als de geretourneerde waarde wordt genegeerd, wat helpt bij het identificeren van fouten die worden veroorzaakt door aan te nemen dat een functie waarden zal veranderen in plaats van een nieuwe waarde te retourneren.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • Metagegevens::is_symlink
    • Pad::is_symlink
    • {integer}::saturating_div
    • Optie::unwrap_unchecked
    • Resultaat::unwrap_unchecked
    • Resultaat::unwrap_err_unchecked
  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functies:
    • Duur::nieuw
    • Duur::checked_add
    • Duur::saturating_add
    • Duur::checked_sub
    • Duur::saturating_sub
    • Duur::checked_mul
    • Duur::saturating_mul
    • Duur::checked_div
  • Toegestaan ​​dereferentie van "*const T"-aanwijzers in "const"-contexten.
  • In de Cargo-pakketbeheerder is het veld rust_version toegevoegd aan de metagegevens van het pakket, en de optie “--message-format” is toegevoegd aan de opdracht “cargo install”.
  • De compiler implementeert ondersteuning voor het CFI-beschermingsmechanisme (Control Flow Integrity), dat controles toevoegt vóór elke indirecte oproep om bepaalde vormen van ongedefinieerd gedrag te detecteren dat mogelijk zou kunnen leiden tot een schending van de normale uitvoeringsvolgorde (control flow) als gevolg van de gebruik van exploits die pointers wijzigen die in het geheugen van functies zijn opgeslagen.
  • De compiler heeft ondersteuning toegevoegd voor versies 5 en 6 van het LLVM-dekkingsvergelijkingsformaat, dat wordt gebruikt om de codedekking tijdens het testen te evalueren.
  • In de compiler worden de vereisten voor de minimale versie van LLVM verhoogd naar LLVM 12.
  • Het derde ondersteuningsniveau voor het x86_64-unknown-none-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.

Bovendien kunnen we kennis nemen van de publicatie door Microsoft van de release van Rust voor Windows 0.30-bibliotheken, waarmee u de Rust-taal kunt gebruiken om applicaties voor het Windows-besturingssysteem te ontwikkelen. De set bevat twee kratpakketten (windows en windows-sys), waarmee je toegang hebt tot de Win API in Rust-programma's. Code voor API-ondersteuning wordt dynamisch gegenereerd op basis van metagegevens die de API beschrijven, waardoor u niet alleen ondersteuning kunt implementeren voor bestaande Win API-aanroepen, maar ook voor oproepen die in de toekomst zullen verschijnen. De nieuwe versie voegt ondersteuning toe voor het UWP-doelplatform (Universal Windows Platform) en implementeert de typen Handle en Debug.

Bron: opennet.ru

Voeg een reactie