Publikimi i gjuhës programuese Rust 1.73

Gjuha e programimit për qëllime të përgjithshme Rust 1.73, 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:

  • Formati i mesazheve të lëshuara nga mbajtësi i parazgjedhur i dështimit të programit (paniku) është ridizajnuar. Teksti i specifikuar në makro "panik!" tani shfaqet në një rresht të veçantë pa thonjëza, duke e bërë mesazhin më të lehtë për t'u lexuar dhe duke eliminuar konfuzionin kur thonjëzat e mbivendosura janë të pranishme ose të ndara në disa rreshta. fn main() { let file = "ferris.txt"; panik! ("oh jo! {file:?} nuk u gjet!"); } Nuk ishte thread 'kryesore' në panik në 'oh jo! "ferris.txt" nuk u gjet!', src/main.rs:3:5 Tema 'main' u panik në src/main.rs:3:5: oh jo! "ferris.txt" nuk u gjet!

    Dalja e mesazheve të shfaqura kur aktivizohen makrot "assert_eq" dhe "assert_ne" është ripunuar gjithashtu. fn main() { assert_eq!("🦀", "🐟", "ferris nuk është peshk"); } Kishte një temë "kryesore" në panik në "pohimi dështoi: `(majtas == djathtas)` majtas: `"🦀"`, djathtas: `"🐟"`: ferris nuk është peshk', src/main.rs: 2 :5 Tema 'kryesore' u panik në src/main.rs:2:5: pohimi `majtas == djathtas` dështoi: ferri nuk është një peshk majtas: "🦀" djathtas: "🐟"

  • Në përputhje me RFC 3184, është shtuar aftësia për të manipuluar drejtpërdrejt çelësat e ruajtjes së thread-local (thread_local) LocalKey > dhe LocalKey > nëpërmjet përdorimit të metodave get(), set(), take() dhe replace(), në vend të përdorimit të mbylljes "with(|inner| ...)", e cila eliminon nevojën për kod shtesë inicializimi për parazgjedhjen vlerat e specifikuara për thread-et e reja kur përdorni makro "thread_local!" thread_local! { GJËRAT statike: Qelizë > = Qeliza::new(Vec::new()); } fn f() { // ishte GJËRAT.me(|i| i.set(vec![32, 1, 2])); // u bë THINGS.set(vec![3, 1, 2]); // ... // u le v = GJËRAT.me(|i| i.marr()); // u bë let v: Vec = THINGS.take(); }
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • I panënshkruar {integer}::div_ceil
    • I panënshkruar {integer}::next_multiple_of
    • I panënshkruar {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulGabim
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Çelësi Lokal:: >::merr
    • Çelësi Lokal:: >:: vendosur
    • Çelësi Lokal:: >::merr
    • Çelësi Lokal:: >:: zëvendëso
    • Çelësi Lokal:: >::with_borrow
    • Çelësi Lokal:: >::with_borrow_mut
    • Çelësi Lokal:: >:: vendosur
    • Çelësi Lokal:: >::merr
    • Çelësi Lokal:: >:: zëvendëso
  • Atributi "const", i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në funksionet:
    • rc::I dobët::i ri
    • sinkronizimi::i dobët::i ri
    • NonNull::as_ref
  • Përpiluesi siguron regjistrimin e informacionit të versionit në seksionin ". koment", ngjashëm me GCC dhe Clang.
  • Niveli i tretë i mbështetjes është zbatuar për platformat aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl dhe x86_64-unknown-linux -ohos. Niveli i tretë përfshin mbështetjen bazë, por pa testim të automatizuar, publikim të ndërtimeve zyrtare ose kontrollim nëse kodi mund të ndërtohet.
  • Niveli i dytë i mbështetjes për platformën e synuar wasm32-wasi-preview1-threads është zbatuar. Niveli i dytë i mbështetjes përfshin një garanci montimi.

Burimi: opennet.ru

Shto një koment