Vydanie programovacieho jazyka Rust 1.66

Bol vydaný univerzálny programovací jazyk Rust 1.66, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).

Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.

Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.

Hlavné inovácie:

  • V enumeráciách s celočíselnými reprezentáciami (atribút “#[repr(Int)]” je povolené explicitné označenie diskriminantu (číslo voľby v enumerácii), aj keď enumerácia obsahuje polia. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Pridaná funkcia core::hint::black_box, ktorá jednoducho vráti prijatú hodnotu. Pretože kompilátor verí, že daná funkcia robí konkrétnu vec, funkciu black_box možno použiť na zakázanie optimalizácie slučiek kompilátora pri vykonávaní testovania výkonu kódu alebo pri skúmaní generovaného strojového kódu (takže kompilátor nepovažuje kód za nepoužiteľný a neodstráni to). Napríklad v nižšie uvedenom príklade zadanie black_box(v.as_ptr()) bráni kompilátoru predpokladať, že vektor v sa nepoužíva. použite std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Správca balíkov „cargo“ ponúka príkaz „remove“, ktorý umožňuje odstrániť závislosti z manifestu Cargo.toml z príkazového riadku.
  • Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Pri použití WASI pridajte implementácie AsFd pre typy zámkov stdio.
    • impl TryFrom > pre Box<[T; N]>
    • core::hint::black_box
    • Trvanie::try_from_secs_{f32,f64}
    • Možnosť::rozzipsovať
    • std::os::fd
  • V šablónach je povolené použitie rozsahov „..X“ a „..=X“.
  • Pri zostavovaní frontendu rustc kompilátora a backendu LLVM sa využívajú optimalizačné režimy LTO (Link Time Optimization) a BOLT (Binary Optimization and Layout Tool), ktoré umožňujú zvýšiť výkon výsledného kódu a znížiť spotrebu pamäte.
  • Tretia úroveň podpory bola implementovaná pre platformy armv5te-none-eabi a thumbv5te-none-eabi. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania, zverejňovania oficiálnych verzií alebo kontroly, či je možné kód zostaviť.
  • Pridaná podpora pre prepojenie s univerzálnymi knižnicami macOS.

Okrem toho si môžeme všimnúť zahrnutie prednej časti kompilátora jazyka Rust (gccrs) do základne kódu GCC. Frontend je súčasťou vetvy GCC 13, ktorá bude vydaná v máji 2023. Počnúc GCC 13 je možné použiť natívne nástroje GCC na kompiláciu programov v jazyku Rust bez potreby inštalácie kompilátora rustc, vytvoreného pomocou vývoja LLVM. Implementácia Rustu GCC 13 bude beta verzia, ktorá nie je predvolene povolená.

Zdroj: opennet.ru

Pridať komentár