Lansarea limbajului de programare Rust 1.42

publicat lansarea limbajului de programare a sistemului Rugina 1.42, fondată de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, oferă gestionarea automată a memoriei și oferă instrumente pentru realizarea unui paralelism ridicat al sarcinilor fără a utiliza un colector de gunoi și Runtime.

Gestionarea automată a memoriei Rust eliberează dezvoltatorul de manipularea pointerului și protejează împotriva problemelor care decurg din manipularea memoriei de nivel scăzut, cum ar fi accesările la memorie după eliberarea, dereferențele pointerului nul, depășirile de buffer și altele asemenea. Se dezvoltă un manager de pachete pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele de către proiect. încărcătură, permițându-vă să obțineți bibliotecile necesare pentru program cu un singur clic. Un depozit este acceptat pentru a găzdui biblioteci lăzi.io.

Principalul inovații:

  • Adăugat suport pentru șabloane pentru potrivirea părților de felii (matrice dinamice, felie). Anterior, potrivirile exacte erau permise, dar acum este posibil să se utilizeze constructe marcate „..” pentru a acoperi elementele rămase ale matricei. De exemplu:

    fn foo(cuvinte: &[&str]) {
    potrivește cuvinte {

    // verifică elementele de pornire ale matricei și ignoră
    elemente care le urmează
    [„Bună ziua”, „Lumea”, „!”, ..] => println!(„Bună ziua, Lumea!”),

    // verifică primele două elemente „Foo” și „Bar”, iar restul nu este important
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignoră totul, dar ultimul element trebuie să fie „!”.
    [.., „!”] => println!(“!!!”),

    // în felia de început includem totul, cu excepția ultimului element, care ar trebui să fie „z”
    [start @ .., "z"] => println!("începe cu: {:?}", începe),

    // în felia finală punem totul, cu excepția primului element, care ar trebui să fie „a”.
    ["a", end @ ..] => println!("se termină cu: {:?}", final),

    rest => println!("{:?}", rest),
    }
    }

  • S-a adăugat o nouă macrocomandă „potriviri!”, care ia o expresie și un model ca intrare și returnează „adevărat” dacă modelul se potrivește cu expresia. Șablonul poate folosi operațiuni „|”. si daca".

    potrivire self.partial_cmp(altul) {
    Unele (mai puține) => adevărat,
    _ => fals,
    }

    se potrivește!(self.partial_cmp(altele), unele (mai puțin))

    let foo = 'f';
    assert!(se potrivește!(foo, 'A'..='Z' | 'a'..='z'));

    lasă bara = Some(4);
    afirmă!(se potrivește!(bară, Unii(x) dacă x > 2));

  • Mesaje de panică afișate atunci când sunt utilizate incorect
    Tipurile Opțiune și Rezultat, acum afișează numerele de linie cu un link către codul care a făcut apelul problematic, mai degrabă decât linkuri către codul care implementează apelul în libcore. De exemplu, modificarea afectează apelurile de despachetare și așteptare peste Option::None sau se blochează când se utilizează metode unwrap_err, expect, expect_err și similare pentru tipul de rezultat.

  • Managerul de pachete Cargo oferă înlocuirea automată a „proc_macro crate” în blocul „extern” pentru pachetele cu macrocomenzi procedurale. Această modificare permite ca directiva „use” să fie aplicată macrocomenzilor procedurale fără a fi nevoie să specificați „extern crate proc_macro;” în cod. De exemplu, dacă programul folosește linia „use proc_macro::TokenStream;”, atunci codul va rămâne acum funcțional dacă „extern crate proc_macro;” este eliminat din acesta.
  • Capacitățile bibliotecii standard au fost extinse. În iter::Empty adăugat Suport pentru trimitere și sincronizare pentru orice valoare T.
    Pin apeluri::{map_unchecked, map_unchecked_mut} livrat de a trebui să returneze o valoare de tip pentru implementarea „Sized”.
    În io::Cursor implementate PartialEq și Eq. Atributul „const” determină posibilitatea utilizării în orice context în locul constantelor, aplicat pentru metoda Layout::new.

  • O nouă porțiune a API-ului a fost transferată în categoria stabilă, inclusiv stabilizat CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut și ptr::slice_from_raw_parts.

  • Metoda Error::description a fost retrasă.
  • A oferit suport de nivel al doilea pentru platformele armv7a-none-eabi și riscv64gc-unknown-linux-gnu. A fost furnizat suport pentru biblioteca standard pentru platforma riscv64gc-unknown-linux-gnu.
    Platforme Apple pe 32 de biți retrogradat până la al treilea nivel de suport, care implică suport de bază, dar fără testarea automată și publicarea versiunilor oficiale. Degradarea suportului se datorează faptului că Apple nu mai acceptă platforme pe 32 de biți.

Sursa: opennet.ru

Adauga un comentariu