Lansarea limbajului de programare Rust 1.44

publicat lansarea limbajului de programare a sistemului Rugina 1.44, 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 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. 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.

În textul anunțului noii lansări, dezvoltatorii Rust s-au implicat în politică și au refuzat în mod intenționat să publice o revizuire completă a modificărilor din Rust 1.44, în semn de solidaritate cu protestatarii împotriva violenței poliției, indicând că această problemă este mai importantă. decât schimbul de cunoştinţe tehnice. De bază inovații:

  • Managerul de pachete Cargo integrează comanda „cargo tree”, care afișează un grafic de dependență asemănător arborelui. De asemenea, se adaugă opțiunea „—duplicates” („cargo tree -d”), care vă permite să evaluați dependențele în diferite versiuni ale aceluiași pachet.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── amoniac v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5
    ...

  • Pentru aplicațiile care nu sunt legate la un std ("#![no_std]"), suportul pentru tehnicile de programare asincronă este implementat pe baza funcției "async", a blocului de mutare asincronă { ... } și a operatorului ".wait", care simplificați scrierea fluxului de comandă principal al handlerelor care nu blochează.
  • Suportul pentru o schemă de definire a ierarhiei modulelor extensibile a fost adăugat la parser. De exemplu, următorul construct nu va produce o eroare, în ciuda absenței efective a modulului „foo/bar/baz.rs” (constructia este încă invalidă din punct de vedere semantic și poate provoca o eroare, dar modificările pot fi văzute și analizate la nivelul de compilare macro și condițional):

    #[cfg(FALSE)] mod foo {
    bară de mod {
    mod baz;
    }
    }

  • Compilatorul rustc a adăugat posibilitatea de a utiliza steag-ul „-C codegen-units” în modul incremental. Implementarea catch_unwind a fost reluată, astfel încât să nu aibă impact asupra performanței dacă procesul de derulare este dezactivat și nu sunt aruncate excepții.
  • A fost furnizat suport de nivel 64 pentru platformele aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos și x64_XNUMX-apple-tvos. Al treilea nivel implică suport de bază, dar fără testarea automată și publicarea versiunilor oficiale.
  • O nouă parte a API-urilor a fost transferată în categoria stabilă, inclusiv stabilizat
    PathBuf::cu_capacitate,
    PathBuf::capacitate,
    PathBuf::clear,
    PathBuf::rezervă,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to,
    Layout::pad_to_align,
    Layout::array și
    Layout::extend.

  • Funcții extinse ale bibliotecii standard:
    • S-a adăugat o variantă specială „vec![]” care se reflectă direct în Vec::new(), permițând ca „vec![]” să fie folosit în context în loc de constante.
    • O implementare (impl) a trăsăturii a fost adăugată pentru a converti::Infailible Hașiș.
    • OsString implementează pointeri inteligente DerefMut и IndexMut, returnând „&mut OsStr”.
    • S-a adăugat suport pentru Unicode 13.
    • Implementat în String De la<&mut str>.
    • IoSlice implementează trăsătura Copiați.
    • Vec implementat De la<[T; N]>.
    • proc_macro::LexError implementează fmt::Display and Error.
  • Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat în metodele from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes și to_ne_bytes pentru toate tipurile de numere întregi.
  • S-a adăugat suport pentru generarea de biblioteci statice în format „.a” în loc de „.lib” pentru platformele GNU pe Windows.
  • Cerințele minime pentru LLVM au fost ridicate la LLVM versiunea 8.

Sursa: opennet.ru

Adauga un comentariu