Izdanje Rust programskog jezika 1.64

Objavljen je programski jezik opće namjene Rust 1.64, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • Povećani su zahtjevi za Linux okruženje u kompajleru, Cargo package manageru i libstd standardnoj biblioteci - minimalni zahtjevi za Glibc podignuti su s verzije 2.11 na 2.17, a Linux kernel s verzije 2.6.32 na 3.2. Ograničenja se također odnose na izvršne datoteke Rust aplikacije izgrađene s libstd. Distribucijski paketi 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 bit će prekinuta. Korisnici koji koriste izvršne datoteke izgrađene na Rustu u okruženjima sa starijom jezgrom Linuxa potiču se da nadograde svoje sustave, ostanu na starijim izdanjima prevoditelja ili održavaju vlastiti libstd fork sa slojevima kako bi održali kompatibilnost.

    Među razlozima za ukidanje podrške za starije Linux sustave 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 kontinuiranom integracijskom sustavu, suočen sa sve većim zahtjevima za verzijom u LLVM-u i uslužnim programima za unakrsnu kompilaciju. Povećanje zahtjeva za verzijom 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 značajka IntoFuture, koja sliči IntoIteratoru, ali se od potonjeg razlikuje korištenjem petlji ".await" umjesto "for ... in ...". U kombinaciji s IntoFuture, ključna riječ ".await" može očekivati ​​ne samo značajku Future, već i sve druge vrste koje se mogu pretvoriti u Future.
  • Uslužni program rust-analyzer uključen je u kolekciju uslužnih programa koji se isporučuju uz Rust izdanja. Uslužni program je također dostupan za instalaciju koristeći rustup (komponenta rustup add rust-analyzer).
  • Upravitelj paketa Cargo uključuje nasljeđivanje radnog prostora kako bi se uklonilo dupliciranje zajedničkih 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 navesti više od jednog parametra u opciji “--target”).
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • budućnost::U budućnost
    • 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 stabilizirani u std::ffi modulu, dodani su jezgri i biblioteci alloc:
    • jezgra::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Tipovi C prethodno stabilizirani u modulu std::os::raw dodani su modulima core::ffi i std::ffi (na primjer, tipovi c_uint i c_ulong predloženi su 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_kratko
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ukratko
  • Rukovatelji niske razine stabilizirani su za korištenje s mehanizmom ankete (u budućnosti se planira pružiti pojednostavljeni API koji ne zahtijeva upotrebu struktura niske razine kao što su Pull i Pin):

    • budućnost::poll_fn
    • zadatak::spreman!
  • Atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkciji slice::from_raw_parts.
  • Radi kompaktnije pohrane podataka promijenjen je raspored memorije struktura Ipv4Addr, Ipv6Addr, SocketAddrV4 i SocketAddrV6. Može postojati problem kompatibilnosti s pojedinačnim paketima sanduka koji koriste std::mem::transmute za manipulaciju strukturama na niskoj razini.
  • Izrada rust prevoditelja za Windows platformu koristi PGO optimizacije (optimizacija vođena profilom), što je omogućilo povećanje performansi kompilacije koda za 10-20%.
  • Prevodilac je implementirao novo upozorenje o neiskorištenim poljima u određenim strukturama.

Dodatno, možete vidjeti izvješće o statusu razvoja alternativne implementacije prevoditelja jezika Rust, koje je pripremio gccrs projekt (GCC Rust) i odobreno za uključivanje u GCC. Nakon integracije sučelja, standardni GCC alati mogu se koristiti za kompajliranje programa u Rust jeziku bez potrebe za instaliranjem rustc prevoditelja, izgrađenog korištenjem LLVM razvoja. Sve dok je razvoj na pravom putu i osim bilo kakvih nepredviđenih problema, sučelje Rusta bit će integrirano u izdanje GCC 13 zakazano za svibanj sljedeće godine. GCC 13 implementacija Rusta bit će u beta statusu, još nije omogućena prema zadanim postavkama.

Izvor: opennet.ru

Dodajte komentar