Rust 1.47 programmeertaal release

gepubliceerd release 1.47 van de systeemprogrammeertaal Roest, opgericht door het Mozilla-project. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt een manier om een ​​hoge taakparallelliteit te bereiken zonder gebruik te maken van vuilnisman и runtime (runtime komt neer op 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. Er wordt een pakketbeheerder ontwikkeld om bibliotheken te distribueren, de assemblage te garanderen en de afhankelijkheden van het project te beheren. Cargo. Er wordt een repository ondersteund om bibliotheken te hosten kratten.io.

De belangrijkste innovaties:

  • Ondersteuning voor typen geïmplementeerd arrays elke grootte. Voorheen bood de standaardbibliotheek, vanwege het onvermogen om generieke functies voor alle gehele waarden te definiëren, alleen ingebouwde eigenschapsondersteuning voor arrays met een grootte van maximaal 32 elementen (de eigenschappen voor elke grootte waren statisch gedefinieerd). Dankzij de creatie van de functionaliteit van constante generieke functies (“const generics”) werd het mogelijk om generieke functies voor elke arraygrootte te definiëren, maar deze zijn nog niet opgenomen in de stabiele taalfuncties, hoewel ze in de compiler zijn geïmplementeerd en nu betrokken in de standaardbibliotheek voor arraykenmerken van elke grootte.

    De volgende constructie in Rust 1.47 zal bijvoorbeeld de inhoud van een array afdrukken, hoewel dit voorheen tot een fout zou hebben geleid:

    fn hoofd() {
    laat xs = [0; 34];

    println!("{:?}", xs);
    }

  • De output van kortere traces (backtrace) output in noodsituaties wordt geleverd. Items die in de meeste situaties niet van belang zijn, maar de uitvoer onoverzichtelijk maken en de aandacht afleiden van de primaire oorzaken van het probleem, worden uitgesloten van het spoor. Om een ​​volledige tracering te retourneren, kunt u de omgevingsvariabele "RUST_BACKTRACE=full" gebruiken. Bijvoorbeeld voor codes

    fn hoofd() {
    paniek!();
    }

    Voorheen werd de trace uitgevoerd in 23 fasen, maar nu wordt dit teruggebracht tot
    3 stappen waarmee je meteen de essentie begrijpt:

    thread 'main' raakte in paniek bij 'expliciete paniek', src/main.rs:2:5
    stapel backtrace:
    0: standaard::paniek::begin_paniek
    op /rustc/d…d75a/library/std/src/panicking.rs:497
    1: speeltuin::main
    op ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    op /rustc/d…d75a/library/core/src/ops/function.rs:227

  • De rustc-compiler is bijgewerkt om te bouwen met LLVM 11 (Roest toepassingen LLVM als backend voor code genereren). Tegelijkertijd blijft de mogelijkheid om te bouwen met oudere LLVM's, tot en met versie 8, behouden, maar standaard (in rust-lang/llvm-project) maakt nu gebruik van LLVM 11. LLVM 11 zal naar verwachting in de komende dagen worden uitgebracht.
  • Op het Windows-platform biedt de rustc-compiler ondersteuning voor het inschakelen van controlestroomintegriteitscontroles (Control Flow Guard), geactiveerd met behulp van de vlag "-C control-flow-guard". Op andere platforms wordt deze vlag voorlopig genegeerd.
  • Een nieuw deel van de API's is overgebracht naar de stabiele categorie, inclusief gestabiliseerd
    Ident::new_raw,
    Bereik::is_leeg,
    BereikInclusief::is_leeg,
    Resultaat::as_deref,
    Resultaat::as_deref_mut,
    Vec::lek,
    aanwijzer::offset_from,
    f32::TAU en
    f64::TAU.

  • Het attribuut "const", dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in methoden:
    • nieuw voor alle gehele getallen die niet nul zijn;
    • check_add, check_sub, check_mul, check_neg, check_shl, check_shr, saturating_add, saturating_sub en saturating_mul voor alle gehele getallen;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace en is_ascii_control voor char- en u8-typen.
  • Voor FreeBSD betrokken toolkit van FreeBSD 11.4 (FreeBSD 10 ondersteunt LLVM 11 niet).

Bron: opennet.ru

Voeg een reactie