Programski jezik Rust 1.64 izdanje

Objavljeno je izdanje Rust 1.64 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Zahtjevi za Linux okruženje u kompajleru, Cargo paket menadžeru i standardnoj biblioteci libstd su povećani - minimalni zahtjevi za Glibc su podignuti sa verzije 2.11 na 2.17, a Linux kernel sa verzije 2.6.32 na 3.2. Ograničenja se također primjenjuju na izvršne datoteke Rust aplikacije izgrađene sa libstd. Distribucijski kompleti RHEL 7, SLES 12-SP5, Debian 8 i Ubuntu 14.04 ispunjavaju nove zahtjeve. Podrška za RHEL 6, SLES 11-SP4, Debian 7 i Ubuntu 12.04 će biti ukinuta. Korisnici koji koriste izvršne datoteke izgrađene u Rust-u u okruženjima sa starijim Linux kernelom ohrabruju se da nadograde svoje sisteme, ostanu na starijim izdanjima kompajlera ili održavaju vlastitu libstd fork sa slojevima radi održavanja kompatibilnosti.

    Među razlozima za ukidanje podrške za starije Linux sisteme su ograničeni resursi za nastavak održavanja kompatibilnosti sa starijim okruženjima. Podrška za naslijeđeni Glibc zahtijeva korištenje naslijeđenih alata prilikom provjere u sustavu kontinuirane integracije, suočenim sa sve većim zahtjevima verzija u LLVM-u i uslužnim programima za unakrsnu kompilaciju. Povećanje zahtjeva za verziju kernela je zbog mogućnosti korištenja novih sistemskih poziva u libstd bez potrebe za održavanjem slojeva kako bi se osigurala kompatibilnost sa starijim kernelima.

  • Stabilizirana je osobina IntoFuture, koja liči na IntoIterator, ali se razlikuje od potonjeg korištenjem “.await” umjesto “for ... in ...” petlje. Kada se kombinuje sa IntoFuture, ključna reč ".await" može očekivati ​​ne samo osobinu Future, već i sve druge tipove koji se mogu konvertovati u Future.
  • Uslužni program za analizu rđe uključen je u kolekciju uslužnih programa koji se isporučuju s Rust izdanjima. Uslužni program je također dostupan za instalaciju pomoću rustupa (rustup komponenta dodaje rust-analyzer).
  • Upravitelj paketa Cargo uključuje nasljeđivanje radnog prostora kako bi se eliminiralo dupliciranje uobičajenih vrijednosti polja između paketa, kao što su Rust verzije i URL-ovi spremišta. Također je dodana podrška za izgradnju za nekoliko ciljnih platformi odjednom (sada možete specificirati više od jednog parametra u opciji “--target”).
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • future::IntoFuture
    • 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
  • C-kompatibilni tipovi, prethodno stabilizovani u std::ffi modulu, dodani su jezgru i alloc biblioteci:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C tipovi koji su prethodno stabilizovani u modulu std::os::raw dodani su jezgru::ffi i std::ffi modulima (na primjer, tipovi c_uint i c_ulong su predloženi za tipove uint i 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
  • Rukovaoci niskog nivoa su stabilizovani za upotrebu sa Poll mehanizmom (u budućnosti se planira obezbediti pojednostavljeni API koji ne zahteva upotrebu struktura niskog nivoa kao što su Pull i Pin):

    • future::poll_fn
    • zadatak::spremni!
  • Atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkciji slice::from_raw_parts.
  • U cilju kompaktnijeg pohranjivanja podataka, promijenjen je memorijski raspored struktura Ipv4Addr, Ipv6Addr, SocketAddrV4 i SocketAddrV6. Možda postoji problem kompatibilnosti s paketima s jednim sandukom koji koriste std::mem::transmute za manipulaciju strukturama na niskom nivou.
  • Izrada rust kompajlera za Windows platformu koristi PGO optimizacije (optimizacija vođena profilom), što je omogućilo povećanje performansi kompilacije koda za 10-20%.
  • Kompajler je implementirao novo upozorenje o neiskorištenim poljima u određenim strukturama.

Osim toga, možete primijetiti izvještaj o stanju razvoja alternativne implementacije kompajlera jezika Rust, koji je pripremio gccrs projekat (GCC Rust) i odobren za uključivanje u GCC. Nakon integracije frontenda, standardni GCC alati se mogu koristiti za kompajliranje programa na Rust jeziku bez potrebe za instaliranjem rustc kompajlera, napravljenog pomoću LLVM razvoja. Sve dok razvoj bude na pravom putu i izuzimajući bilo kakve nepredviđene probleme, Rust frontend će biti integrisan u GCC 13 izdanje zakazano za maj sledeće godine. GCC 13 implementacija Rusta će biti u beta statusu, još uvijek nije omogućena po defaultu.

izvor: opennet.ru

Dodajte komentar