Rust 1.57 programmeertaal release

De release van de systeemprogrammeertaal Rust 1.57, 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:

  • Het gebruik van de macro “paniek!” is gestabiliseerd. in contexten die tijdens het compileren zijn gemaakt, zoals "const fn"-declaraties. Bovendien, naast het gebruik van "paniek!" const-declaraties maken het gebruik van de macro “assert!” mogelijk. en enkele andere standaardbibliotheek-API's. Stabilisatie dekt nog niet de gehele formatteringsinfrastructuur, dus in zijn huidige vorm de “paniek!”-macro kan alleen worden gebruikt met statische tekenreeksen (panic!(“...")) of met een enkele geïnterpoleerde waarde "&str" bij het vervangen van (panic!("{}", a)), wat beperkt moet worden tot het vervangen van "{ }" zonder opmaakspecificaties en andere typen. In de toekomst zal de toepasbaarheid van macro's in constante contexten worden uitgebreid, maar de gestabiliseerde mogelijkheden zijn al voldoende om assert-checks uit te voeren in de compilatiefase: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = beweren!(std::mem::size_of:: () == 8);
  • De Cargo-pakketbeheerder staat het gebruik van profielen met willekeurige namen toe, niet beperkt tot "dev", "release", "test" en "bench". Als u bijvoorbeeld optimalisatie in de koppelingsfase (LTO) alleen wilt inschakelen wanneer de eindproductassemblages zijn gegenereerd, kunt u in Cargo.toml een ‘productieprofiel’ aanmaken en daaraan de vlag ‘lto = true’ toevoegen. Wanneer u echter uw eigen profielen definieert, moet u een bestaand profiel opgeven om de standaardinstellingen ervan over te nemen. In het onderstaande voorbeeld wordt een ‘productieprofiel’ gemaakt dat het ‘release’-profiel aanvult door de vlag ‘lto = true’ op te nemen. Het profiel zelf wordt geactiveerd door cargo aan te roepen met de optie “--profile production”, en de assemblageartefacten worden in de directory “target/production” geplaatst. [profile.production] erft = "release" lto = true
  • Het gebruik van try_reserve voor de typen Vec, String, HashMap, HashSet en VecDeque is gestabiliseerd, waardoor u vooraf ruimte kunt reserveren voor een bepaald aantal elementen van een bepaald type om de frequentie van geheugentoewijzingsbewerkingen te verminderen en te voorkomen crasht tijdens gebruik vanwege gebrek aan geheugen.
  • Het is toegestaan ​​om macro's met accolades op te geven in uitdrukkingen als "m!{ .. }.method()" en "m!{ .. }?".
  • De uitvoering van de functies File::read_to_end en read_to_string is geoptimaliseerd.
  • Ondersteuning voor de Unicode-specificatie is bijgewerkt naar versie 14.0.
  • 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.
  • Experimentele backend toegevoegd voor het genereren van code met libgccjit.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collecties::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Tekenreeks::try_reserve
    • Tekenreeks::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_beschikbaar
    • Commando::get_program
    • Commando::get_args
    • Commando::get_envs
    • Commando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Het attribuut “const”, dat bepaalt of het in elke context kan worden gebruikt in plaats van constanten, wordt gebruikt in de functie hint::unreachable_unchecked.
  • Het derde ondersteuningsniveau is geïmplementeerd voor de armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi en armv7a-kmc- solid_asp3-eabihf-platforms. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.

Bron: opennet.ru

Voeg een reactie