Publikimi i gjuhës programuese Rust 1.64

Gjuha e programimit për qëllime të përgjithshme Rust 1.64, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Risitë kryesore:

  • Kërkesat për mjedisin Linux në përpilues, menaxherin e paketave Cargo dhe bibliotekën standarde libstd janë rritur - kërkesat minimale për Glibc janë rritur nga versioni 2.11 në 2.17 dhe kerneli Linux nga versioni 2.6.32 në 3.2. Kufizimet zbatohen gjithashtu për ekzekutuesit e aplikacionit Rust të ndërtuara me libstd. Kompletet e shpërndarjes RHEL 7, SLES 12-SP5, Debian 8 dhe Ubuntu 14.04 plotësojnë kërkesat e reja. Mbështetja për RHEL 6, SLES 11-SP4, Debian 7 dhe Ubuntu 12.04 do të ndërpritet. Përdoruesit që përdorin ekzekutues të ndërtuar nga Rust në mjedise me një kernel më të vjetër Linux inkurajohen të përmirësojnë sistemet e tyre, të qëndrojnë në versionet më të vjetra të përpiluesit ose të mbajnë forkun e tyre libstd me shtresa për të ruajtur përputhshmërinë.

    Ndër arsyet për përfundimin e mbështetjes për sistemet e vjetra Linux janë burimet e kufizuara për të vazhduar ruajtjen e përputhshmërisë me mjediset e vjetra. Mbështetja për Glibc-në e vjetër kërkon përdorimin e mjeteve të trashëgimisë kur kontrollohet në një sistem integrimi të vazhdueshëm, përballë kërkesave në rritje të versionit në LLVM dhe shërbimet e ndërthurjes. Rritja e kërkesave për versionin e kernelit është për shkak të aftësisë për të përdorur thirrjet e reja të sistemit në libstd pa pasur nevojë të mirëmbahen shtresa për të siguruar përputhshmëri me kernelët e vjetër.

  • Është stabilizuar tipari IntoFuture, i cili i ngjan IntoIteratorit, por ndryshon nga ky i fundit duke përdorur unazat ".prit" në vend të "for ... në ...". Kur kombinohet me IntoFuture, fjala kyçe ".wait" mund të presë jo vetëm një tipar të së ardhmes, por edhe çdo lloj tjetër që mund të konvertohet në një të ardhme.
  • Shërbimi analizues i ndryshkut përfshihet në koleksionin e shërbimeve të ofruara me lëshimet e ndryshkut. Shërbimi është gjithashtu i disponueshëm për instalim duke përdorur rustup (komponenti rutup shton analizuesin e ndryshkut).
  • Menaxheri i paketave Cargo përfshin trashëgiminë e hapësirës së punës për të eliminuar dyfishimin e vlerave të fushës së përbashkët midis paketave, të tilla si versionet Rust dhe URL-të e depove. Shtoi gjithashtu mbështetje për ndërtimin për disa platforma të synuara menjëherë (tani mund të specifikoni më shumë se një parametër në opsionin "--target").
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • ardhmen::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
  • Llojet e përputhshme me C, të stabilizuara më parë në modulin std::ffi, janë shtuar në bazën dhe bibliotekën alloc:
    • bërthamë::ffi::CStr
    • bërthamë::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulGabim
  • Llojet C të stabilizuara më parë në modulin std::os::raw janë shtuar në modulet kryesore::ffi dhe std::ffi (për shembull, llojet c_uint dhe c_ulong janë propozuar për llojet uint dhe 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_short
  • Trajtuesit e nivelit të ulët janë stabilizuar për përdorim me mekanizmin Poll (në të ardhmen është planifikuar të ofrohet një API e thjeshtuar që nuk kërkon përdorimin e strukturave të nivelit të ulët si Pull dhe Pin):

    • ardhmen::poll_fn
    • detyrë::gati!
  • Atributi “const”, i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në funksionin slice::from_raw_parts.
  • Për të ruajtur në mënyrë më kompakte të dhënat, paraqitja e memories së strukturave Ipv4Addr, Ipv6Addr, SocketAddrV4 dhe SocketAddrV6 është ndryshuar. Mund të ketë një problem përputhshmërie me paketat me një arkë që përdorin std::mem::transmute për manipulimin e strukturave në nivel të ulët.
  • Ndërtimi i përpiluesit të ndryshkut për platformën Windows përdor optimizimet PGO (optimizimi i drejtuar nga profili), i cili bëri të mundur rritjen e performancës së përpilimit të kodit me 10-20%.
  • Përpiluesi ka zbatuar një paralajmërim të ri për fushat e papërdorura në struktura të caktuara.

Për më tepër, mund të vini re raportin e statusit për zhvillimin e një zbatimi alternativ të përpiluesit të gjuhës Rust, të përgatitur nga projekti gccrs (GCC Rust) dhe të miratuar për përfshirje në GCC. Pas integrimit të frontendit, mjetet standarde të GCC mund të përdoren për të përpiluar programe në gjuhën Rust pa pasur nevojë të instaloni përpiluesin rustc, të ndërtuar duke përdorur zhvillimet LLVM. Për sa kohë që zhvillimi është në rrugën e duhur dhe duke përjashtuar çdo problem të paparashikuar, frontendi i Rust do të integrohet në lëshimin e GCC 13 të planifikuar për majin e vitit të ardhshëm. Zbatimi i GCC 13 i Rust do të jetë në statusin beta, i pa aktivizuar ende si parazgjedhje.

Burimi: opennet.ru

Shto një koment