Lansarea limbajului de programare Rust 1.38

publicat lansarea limbajului de programare a sistemului Rugina 1.38, fondată de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, oferă o gestionare automată a memoriei și oferă un mijloc de a obține un paralelism ridicat al sarcinilor fără a utiliza un colector de gunoi sau un timp de rulare.

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:

  • S-a adăugat un mod de compilare pipelined (pipelined), în care construirea unui pachet dependent de ladă începe imediat ce metadatele dependenței devin disponibile, fără a aștepta finalizarea compilației sale. La compilarea unui pachet, dependențele nu trebuie să fie complet asamblate, definind doar metadatele, care includ liste de tipuri, dependențe și elemente exportate. Metadatele sunt disponibile la începutul procesului de compilare, astfel încât pachetele legate pot fi acum compilate mult mai devreme. Când construiți pachete individuale, modul propus nu afectează performanța, dar dacă construcția acoperă pachete cu dependențe ramificate, timpul general de construire poate fi redus cu 10-20%;
  • Asigură detectarea utilizării incorecte a funcțiilor std::mem::neinițializat и std::mem::zeroed. De exemplu, std::mem::uninitialized este convenabil pentru crearea rapidă a tablourilor, dar induce în eroare compilatorul deoarece pare a fi inițializat, dar în realitate valoarea rămâne neinițializată. Funcția mem::neinițializată este deja marcată ca depreciată și se recomandă utilizarea unui tip intermediar. Poate Unitatea. În ceea ce privește mem::zeroed, această funcție poate cauza probleme cu tipurile care nu pot accepta valori zero.

    Pentru a ajuta la identificarea comportamentului nedefinit, noua versiune adaugă o verificare lint la compilator care detectează unele probleme cu mem::uninitialized sau mem::zeroed. De exemplu, acum obțineți o eroare când încercați să utilizați mem::uninitialized sau mem::zeroed cu tipurile &T și Box‹T›, care reprezintă obiecte pointer care nu pot accepta valori nule;

  • Atributul „#[deprecated]” a fost extins pentru a permite ca pachetele de ladă să fie marcate ca învechite și programate pentru ștergere ulterioară. Începând cu Rust 1.38, acest atribut poate fi folosit și pentru macrocomenzi;
  • S-a adăugat posibilitatea de a utiliza atributul „#[global_allocator]” în submodule;
  • Funcție adăugată std::any::type_name, care vă permite să aflați numele tipului, care poate fi util în scopuri de depanare. De exemplu, în timpul execuției programului puteți afla pentru ce tip a fost numită funcția:

    fn gen_value‹T: Implicit>() -› T {
    println!("Inițializarea unei instanțe a lui {}", std::any::type_name::‹T›());
    Implicit::implicit()
    }

    fn principal() {
    fie _: i32 = gen_value(); # „i32” va fi tipărit
    let _: String = gen_value(); # va imprima „alloc::string::String”
    }

  • Funcții extinse ale bibliotecii standard:
    • slice::{concat, connect, join} poate lua acum valoarea &[T] în plus față de &T;
    • „*const T” și „*mut T” acum implementează marker::Unpin;
    • „Arc‹[T]›” și „Rc‹[T]›” implementează acum FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementează acum DoubleEndedIterator.
    • ascii::EscapeDefault implementează Clone și Display.
  • O nouă parte a API-urilor a fost transferată în categoria stabilă, inclusiv metodele care au fost stabilizate
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Durata::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Durata::div_f{32|64},
    • Durata::from_secs_f{32|64},
    • Durata::mul_f{32|64},
    • operațiuni de împărțire cu rest
      div_euclid și rem_euclid pentru toate primitivele întregi;

  • S-a adăugat suport pentru specificarea opțiunii „--features” de mai multe ori pentru a activa diferite funcții în managerul de pachete de marfă;
  • Compilatorul oferă un al treilea nivel suport pentru platformele țintă aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-unknown, armvux-unknown -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl și riscv7i-unknown-none-elf. Al treilea nivel implică suport de bază, dar fără testarea automată și publicarea versiunilor oficiale.

Sursa: opennet.ru

Adauga un comentariu