Lansarea limbajului de programare Rust 2021 (1.56)

A fost publicată lansarea limbajului de programare a sistemului Rust 1.56, fondat de proiectul Mozilla, dar dezvoltat acum sub auspiciile organizației independente non-profit Rust Foundation. Pe lângă numărul obișnuit al versiunii, versiunea este denumită și Rust 2021 și marchează o stabilizare a modificărilor propuse în ultimii trei ani. Rust 2021 va servi, de asemenea, drept bază pentru creșterea funcționalității în următorii trei ani, similar modului în care lansarea Rust 2018 a devenit baza pentru dezvoltarea limbajului în ultimii trei ani.

Pentru a menține compatibilitatea, dezvoltatorii pot folosi etichetele „2015”, „2018” și „2021” în programele lor, permițând ca programele să fie conectate la secțiunile de stare a limbii corespunzătoare edițiilor selectate de Rust. Edițiile au fost introduse pentru a separa modificările incompatibile și sunt configurate în metadatele pachetelor de marfă prin câmpul „ediție” din secțiunea „[pachet]”. De exemplu, ediția „2018” include funcționalități stabilizate de la sfârșitul lui 2018 și acoperă, de asemenea, toate modificările ulterioare care nu încalcă compatibilitatea. Ediția 2021 include, în plus, funcții de întrerupere a interoperabilității propuse în versiunea actuală 1.56 și aprobate pentru implementare viitoare. Pe lângă limbajul în sine, editorii țin cont și de starea instrumentelor și a documentației.

Incompatibilități majore înregistrate în Rust 2021:

  • Captură separată în închideri - Închiderile pot captura acum nume de câmpuri individuale în loc de întregul identificator. De exemplu, „|| ax + 1" va captura doar "ax" în loc de "a".
  • Trăsătura IntoIterator pentru matrice: array.into_iter() vă permite să repetați elementele matricei în funcție de valori, mai degrabă decât de referințe.
  • Procesarea expresiilor „|” a fost modificată în macro_rules (Boolean SAU) în modele - Specificatorul „:pat” în potriviri respectă acum „A | B".
  • Managerul de pachete de marfă include implicit a doua versiune a soluției de funcții, suport pentru care a apărut în Rust 1.51.
  • TryFrom, TryInto și FromIterator au fost adăugate la modulul bibliotecă standard preludiu.
  • Macro-urile panic!(..) și assert!(expr, ..) folosesc acum întotdeauna format_args!(..) pentru a formata șiruri, similar cu println!().
  • Expresiile ident#, ident»..." și ident'...' sunt rezervate în sintaxa limbajului.
  • S-au mutat avertismentele bare_trait_objects și ellipsis_inclusive_range_patterns la erori.

Nou în Rust 1.56:

  • În Cargo.toml, în secțiunea „[pachet]”, a fost adăugat câmpul rust-version, prin care puteți determina versiunea minimă acceptată de Rust pentru pachetul de ladă. Dacă versiunea curentă nu se potrivește cu parametrul specificat, Cargo va înceta să funcționeze cu un mesaj de eroare.
  • Atunci când potrivirea modelului utilizând expresii „binding @ pattern”, este oferit suport pentru specificarea legăturilor suplimentare (de exemplu, „let matrix @ Matrix { row_len, .. } = get_matrix();”).
  • O nouă porțiune a API-ului a fost mutată în categoria de stabil, inclusiv metodele și implementările de trăsături au fost stabilizate:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Atributul „const”, care determină posibilitatea utilizării în orice context în locul constantelor, este utilizat în funcții
    • std::mem::transmute
    • [T]::în primul rând
    • [T]::split_first
    • [T]::ultimul
    • [T]::split_last
  • Compilatorul a fost schimbat pentru a utiliza LLVM versiunea 13.
  • Un al doilea nivel de suport a fost implementat pentru platforma aarch64-apple-ios-sim și un al treilea nivel pentru platformele powerpc-unknown-freebsd și riscv32imc-esp-espidf. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.

Amintiți-vă că Rust se concentrează pe siguranța memoriei, oferă o gestionare automată a memoriei și oferă un mijloc de a obține un paralelism ridicat în execuția jobului fără a utiliza un colector de gunoi sau un timp de execuție (timpul de rulare este redus la inițializarea și întreținerea de bază a bibliotecii standard).

Gestionarea automată a memoriei de la Rust elimină erorile la manipularea pointerilor și protejează împotriva problemelor care decurg din manipularea memoriei de nivel scăzut, cum ar fi accesarea unei regiuni de memorie după ce aceasta a fost eliberată, dereferențele pointerului nul, depășirile de buffer etc. Pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele, proiectul dezvoltă managerul de pachete Cargo. Depozitul crates.io este acceptat pentru găzduirea bibliotecilor.

Sursa: opennet.ru

Adauga un comentariu