Rust programmeertaal release 2021 (1.56)

De release van de systeemprogrammeertaal Rust 1.56, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. Naast het reguliere versienummer wordt de release ook Rust 2021 genoemd en markeert een stabilisatie van de wijzigingen die de afgelopen drie jaar zijn voorgesteld. Rust 2021 zal de komende drie jaar ook dienen als basis voor het vergroten van de functionaliteit, vergelijkbaar met hoe de release van Rust 2018 de basis werd voor de ontwikkeling van de taal in de afgelopen drie jaar.

Om de compatibiliteit te behouden, kunnen ontwikkelaars de labels "2015", "2018" en "2021" in hun programma's gebruiken, waardoor programma's kunnen worden gekoppeld aan taalstatusplakken die overeenkomen met de geselecteerde edities van Rust. Edities zijn geïntroduceerd om incompatibele wijzigingen te scheiden en worden geconfigureerd in de metadata van vrachtpakketten via het veld “editie” in de sectie “[pakket]”. De editie “2018” bevat bijvoorbeeld de functionaliteit die vanaf eind 2018 is gestabiliseerd en omvat ook alle verdere wijzigingen die de compatibiliteit niet verstoren. De editie van 2021 bevat bovendien interoperabiliteitsbrekende functies die zijn voorgesteld in de huidige release 1.56 en zijn goedgekeurd voor toekomstige implementatie. Naast de taal zelf houdt de redactie ook rekening met de staat van de tools en documentatie.

Grote onverenigbaarheden geregistreerd in Rust 2021:

  • Afzonderlijk vastleggen in sluitingen - Sluitingen kunnen nu individuele veldnamen vastleggen in plaats van de volledige identificatie. Bijvoorbeeld: "|| ax + 1" zal alleen "ax" vastleggen in plaats van "a".
  • Met de IntoIterator-eigenschap voor arrays: array.into_iter() kunt u array-elementen herhalen op basis van waarden, in plaats van op basis van verwijzingen.
  • De verwerking van “|”-expressies is gewijzigd in macro_rules (Boolean OR) in patronen - De ":pat"-specificatie in overeenkomsten respecteert nu "A | B".
  • De vrachtpakketbeheerder bevat standaard de tweede versie van de feature-resolver, waarvoor ondersteuning verscheen in Rust 1.51.
  • De TryFrom-, TryInto- en FromIterator-eigenschappen zijn toegevoegd aan de prelude standaardbibliotheekmodule.
  • De macro's paniek!(..) en assert!(expr, ..) gebruiken nu altijd format_args!(..) om tekenreeksen op te maken, vergelijkbaar met println!().
  • De uitdrukkingen ident#, ident»..." en ident'...' zijn gereserveerd in de taalsyntaxis.
  • Waarschuwingen bare_trait_objects en ellipsis_inclusive_range_patterns verplaatst naar fouten.

Nieuw in Roest 1.56:

  • In Cargo.toml is in de sectie “[pakket]” het roest-versieveld toegevoegd, waarmee u de minimaal ondersteunde versie van Rust voor het kratpakket kunt bepalen. Als de huidige versie niet overeenkomt met de opgegeven parameter, stopt Cargo met werken met een foutmelding.
  • Bij patroonmatching met behulp van "binding @ patroon"-expressies wordt ondersteuning geboden voor het opgeven van aanvullende bindingen (bijvoorbeeld "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • Tekenreeks::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Het attribuut “const”, dat de mogelijkheid bepaalt om in elke context te gebruiken in plaats van constanten, wordt gebruikt in functies
    • std::mem::transmuteren
    • [T]::eerst
    • [T]::split_first
    • [T]::laatste
    • [T]::split_last
  • De compiler is overgeschakeld naar LLVM versie 13.
  • Er is een tweede ondersteuningsniveau geïmplementeerd voor het aarch64-apple-ios-sim-platform en een derde niveau voor de powerpc-unknown-freebsd- en riscv32imc-esp-espidf-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.

Bedenk dat Rust zich richt op geheugenveiligheid, automatisch geheugenbeheer biedt en de middelen biedt om een ​​hoog parallellisme te bereiken bij het uitvoeren van taken 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.

Bron: opennet.ru

Voeg een reactie