Izdaja programskega jezika Rust 1.64

Objavljena je bila izdaja splošnega programskega jezika Rust 1.64, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Povečane so zahteve za okolje Linux v prevajalniku, upravljalniku paketov Cargo in standardni knjižnici libstd - minimalne zahteve za Glibc so dvignjene z različice 2.11 na 2.17, jedro Linuxa pa z različice 2.6.32 na 3.2. Omejitve veljajo tudi za izvedljive datoteke aplikacije Rust, izdelane z libstd. Distribucijski kompleti RHEL 7, SLES 12-SP5, Debian 8 in Ubuntu 14.04 izpolnjujejo nove zahteve. Podpora za RHEL 6, SLES 11-SP4, Debian 7 in Ubuntu 12.04 bo ukinjena. Uporabnike, ki uporabljajo izvedljive datoteke, zgrajene v Rustu, v okoljih s starejšim jedrom Linuxa spodbujamo, da nadgradijo svoje sisteme, ostanejo na starejših izdajah prevajalnika ali vzdržujejo lastno libstd fork s plastmi, da ohranijo združljivost.

    Med razlogi za ukinitev podpore za starejše sisteme Linux so omejeni viri za nadaljnje vzdrževanje združljivosti s starejšimi okolji. Podpora za podedovani Glibc zahteva uporabo podedovanih orodij pri preverjanju v neprekinjenem integracijskem sistemu, glede na vse večje zahteve glede različic v LLVM in pripomočkih za navzkrižno prevajanje. Povečanje zahtev glede različice jedra je posledica zmožnosti uporabe novih sistemskih klicev v libstd brez potrebe po vzdrževanju plasti, da se zagotovi združljivost s starejšimi jedri.

  • Stabilizirana je lastnost IntoFuture, ki spominja na IntoIterator, vendar se od slednjega razlikuje po uporabi zank ».await« namesto »for ... in ...«. V kombinaciji z IntoFuture lahko ključna beseda ".await" pričakuje ne le lastnost prihodnosti, ampak tudi vse druge vrste, ki jih je mogoče pretvoriti v prihodnost.
  • Pripomoček za analizo rje je vključen v zbirko pripomočkov, ki so na voljo z izdajami Rust. Pripomoček je na voljo tudi za namestitev z uporabo rustup (komponenta rustup add rust-analyzer).
  • Upravitelj paketov Cargo vključuje dedovanje delovnega prostora za odpravo podvajanja skupnih vrednosti polj med paketi, kot so različice Rust in URL-ji skladišč. Dodana je tudi podpora za gradnjo za več ciljnih platform hkrati (zdaj lahko določite več kot en parameter v možnosti »--target«).
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • prihodnost::V prihodnost
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Tipi, združljivi s C, ki so bili prej stabilizirani v modulu std::ffi, so bili dodani v jedro in knjižnico alloc:
    • jedro::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Tipi C, ki so bili prej stabilizirani v modulu std::os::raw, so bili dodani moduloma core::ffi in std::ffi (na primer, tipa c_uint in c_ulong sta bila predlagana za tipa uint in ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Nizkonivojski upravljalniki so bili stabilizirani za uporabo z mehanizmom ankete (v prihodnosti je načrtovana zagotovitev poenostavljenega API-ja, ki ne zahteva uporabe nizkonivojskih struktur, kot sta Pull in Pin):

    • prihodnost::poll_fn
    • naloga::pripravljena!
  • V funkciji slice::from_raw_parts je uporabljen atribut “const”, ki določa možnost uporabe v kateremkoli kontekstu namesto konstant.
  • Za bolj kompaktno shranjevanje podatkov je bila spremenjena postavitev pomnilnika struktur Ipv4Addr, Ipv6Addr, SocketAddrV4 in SocketAddrV6. Lahko pride do težave z združljivostjo paketov z enim zabojem, ki uporabljajo std::mem::transmute za nizkonivojsko manipulacijo struktur.
  • Zgradba prevajalnika rust za platformo Windows uporablja optimizacije PGO (profilno vodena optimizacija), kar je omogočilo povečanje zmogljivosti prevajanja kode za 10-20%.
  • Prevajalnik je implementiral novo opozorilo o neuporabljenih poljih v določenih strukturah.

Poleg tega si lahko ogledate poročilo o stanju razvoja alternativne izvedbe prevajalnika jezika Rust, ki ga je pripravil projekt gccrs (GCC Rust) in odobren za vključitev v GCC. Po integraciji sprednjega dela je mogoče standardna orodja GCC uporabiti za prevajanje programov v jeziku Rust brez potrebe po namestitvi prevajalnika rustc, zgrajenega z razvojem LLVM. Dokler bo razvoj potekal po pravi poti in razen kakršnih koli nepredvidenih težav, bo vmesnik Rust integriran v izdajo GCC 13, načrtovano za maj naslednje leto. Implementacija GCC 13 za Rust bo v statusu beta in še ni privzeto omogočena.

Vir: opennet.ru

Dodaj komentar