Rust 1.47 programmeertaal release

Release 1.47 van de systeemprogrammeertaal Rust, ontwikkeld door het Mozilla-project, is gepubliceerd. De taal richt zich op veilig geheugenbeheer, biedt automatisch geheugenbeheer en biedt de middelen om een ​​hoge taakparallelliteit te bereiken terwijl het gebruik van een vuilnisman en runtime wordt vermeden (runtime wordt teruggebracht tot basisinitialisatie en onderhoud van de standaardbibliotheek).

Het automatische geheugenbeheer van Rust behoedt de ontwikkelaar voor fouten bij het manipuleren van pointers en beschermt tegen problemen die optreden als gevolg van geheugenmanipulatie op laag niveau, zoals toegang tot een geheugengebied nadat het is vrijgegeven, het verwijderen van verwijzingen naar null-pointers, bufferoverschrijdingen, enz. Om bibliotheken te distribueren, builds aan te bieden en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Belangrijkste innovaties:

  • Geïmplementeerde ondersteuning voor eigenschappen voor arrays van willekeurige grootte. Voorheen bood de standaardbibliotheek, vanwege de onmogelijkheid om generieke functies voor alle integerwaarden te definiëren, alleen ingebouwde eigenschapondersteuning voor arrays met een grootte van maximaal 32 elementen (de eigenschappen voor elke grootte werden statisch gedefinieerd). Dankzij de creatie van de functionaliteit van const-generieken, werd het mogelijk om generieke functies voor elke array-grootte te definiëren, maar deze zijn nog niet opgenomen in de stabiele functies van de taal, hoewel ze zijn geïmplementeerd in de compiler en nu worden gebruikt in de standaardbibliotheek voor array-kenmerken van elke grootte.
    De volgende constructie in Rust 1.47 zal bijvoorbeeld de inhoud van een array afdrukken, hoewel dit eerder 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 het spoor weergegeven in 23 fasen, en nu wordt het teruggebracht tot 3 fasen, zodat u onmiddellijk de essentie kunt vastleggen:

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 (Rust gebruikt LLVM als backend voor het genereren van code). Tegelijkertijd blijft de mogelijkheid om te bouwen met oude LLVM's tot versie 8 behouden, maar standaard (in rust-lang/llvm-project) wordt nu LLVM 11 gebruikt. Naar verwachting zal LLVM 11 in de komende dagen worden uitgebracht.
  • Op het Windows-platform biedt de rustc-compiler ondersteuning voor het inschakelen van Control Flow Guard-controles, geactiveerd met de vlag "-C control-flow-guard". Op andere platforms wordt deze vlag voorlopig genegeerd.
  • Een nieuw deel van de API is verplaatst naar de stabiele categorie, inclusief de stabilisatie van Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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.
  • FreeBSD gebruikt de toolkit van FreeBSD 11.4 (FreeBSD 10 ondersteunt LLVM 11 niet).

Genomen van opennet.ru

Bron: linux.org.ru

Voeg een reactie