Lëshimi i Rust 1.91

Është publikuar versioni i gjuhës së programimit Rust 1.91, i bazuar në projektin Mozilla, por tani i zhvilluar nën mbikëqyrjen e organizatës jo-fitimprurëse Rust Foundation. Gjuha fokusohet në punën e sigurt me kujtesën dhe ofron mjete për arritjen e një paralelizmi të lartë të ekzekutimit të detyrave, duke mos përdorur mbledhës mbetje dhe runtime (runtime reduktohet në inicializimin bazë dhe mbështetje për bibliotekën standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • Përmirësuar mbështetja për sistemet 64-bit ARM me OS Windows. Platforma e synuar «aarch64-pc-windows-msvc» u kalua nga niveli i dytë në nivelin e parë të mbështetjes. U sigurua niveli i dytë i mbështetjes për arkitekturat aarch64-pc-windows-gnullvm dhe x86_64-pc-windows-gnullvm. Niveli i parë i mbështetjes parashikon formimin e ndërtimit binar, kryerjen e testimit të detajuar dhe ofrimin e garancisë më të lartë të mbështetjes për platformën - çdo ndryshim në kompilator kontrollohet përmes ekzekutimit të një grupe të plotë testesh. Niveli i dytë i mbështetjes përfshin formimin e ndërtimit binar dhe garancinë për ndërtim, por nuk garanton kalimin e grupit të testimeve. Niveli i tretë mbulon mbështetje bazë, por pa testim automatizuar, publikimin e ndërtimeve zyrtare dhe verifikimin e mundësisë për ndërtimin e kodit.
  • Shtuar paralajmërimi lint «dangling_pointers_from_locals» për të identifikuar kthimet nga funksionet të treguesve të varur (dangling raw pointer), që tregojnë në të dhëna të mbajtura në variabla lokalë të përcaktuar në funksionin e thirrur. Këto variabla hiqen pas përfundimit të funksionit, dhe treguesit raw në të dhënat e lidhura me këto variabla bëhen të varur, dmth. tregojnë në memorie të liruar. Shkëputja e mëtejshme e një treguesi të tillë rezulton në sjellje të pasigurt. fn f() -> *const u8 { let x = 0; &x // paralajmërim: do të prodhohet një tregues i varur sepse variabli lokal «x» do të hiqet }
  • Shtuar paralajmërimi lint «integer_to_ptr_transmutes», që informon për konvertimin e numrave të plotë në tregues përmes funksionit std::mem::transmute.
  • Në menaxherin e paketave Cargo u stabilizua mbështetja për parametrin «build.build-dir», që përcakton katalogun për ruajtjen e artefakteve temporale të ndërtimit, të krijuara nga cargo dhe rustc gjatë fazës së ndërtimit.
  • Për ABI sysv64, win64, efiapi dhe aapcs u stabilizua mbështetja për shpalljen e funksioneve me numër variabil argumentesh në stilin C.
  • U stabilizua mbështetja për assembler-in inline për arkitekturën LoongArch32.
  • Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
    • Path::file_prefix
    • AtomicPtr::fetch_ptr_add
    • AtomicPtr::fetch_ptr_sub
    • AtomicPtr::fetch_byte_add
    • AtomicPtr::fetch_byte_sub
    • AtomicPtr::fetch_or
    • AtomicPtr::fetch_and
    • AtomicPtr::fetch_xor
    • {integer}::strict_add
    • {integer}::strict_sub
    • {integer}::strict_mul
    • {integer}::strict_div
    • {integer}::strict_div_euclid
    • {integer}::strict_rem
    • {integer}::strict_rem_euclid
    • {integer}::strict_neg
    • {integer}::strict_shl
    • {integer}::strict_shr
    • {integer}::strict_pow
    • i{N}::strict_add_unsigned
    • i{N}::strict_sub_unsigned
    • i{N}::strict_abs
    • u{N}::strict_add_signed
    • u{N}::strict_sub_signed
    • PanicHookInfo::payload_as_str
    • core::iter::chain
    • u{N}::checked_signed_diff
    • core::array::repeat
    • PathBuf::add_extension
    • PathBuf::with_added_extension
    • Duration::from_mins
    • Duration::from_hours
    • impl PartialEq<str> for PathBuf
    • impl PartialEq<String> for PathBuf
    • impl PartialEq<str> for Path
    • impl PartialEq<String> for Path
    • impl PartialEq<PathBuf> for String
    • impl PartialEq<Path> for String
    • impl PartialEq<PathBuf> for str
    • impl PartialEq<Path> for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    • Cell::as_array_of_cells
    • u{N}::carrying_add
    • u{N}::borrowing_sub
    • u{N}::carrying_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl Debug for windows::ffi::EncodeWide<‘_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • impl Sum for Saturating<u{N}>
    • impl Sum<&Self> for Saturating<u{N}>
    • impl Product for Saturating<u{N}>
    • impl Product<&Self> for Saturating<u{N}>
  • Priznaku «const» aplicohet në funksione:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Kompilatori është përditësuar në degën LLVM 21.

Burimi: opennet.ru

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster