Publikimi i gjuhës programuese Rust 1.58

Është publikuar publikimi i gjuhës së programimit për qëllime të përgjithshme Rust 1.58, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të detyrave pa përdorur një grumbullues mbeturinash ose kohëzgjatjeje (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Menaxhimi automatik i kujtesës i Rust eliminon gabimet gjatë manipulimit të treguesve dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të memories, të tilla si qasja në një rajon memorie pasi të jetë liruar, mosreferencat e treguesit null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë, projekti po zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Risitë kryesore:

  • Në blloqet e formatimit të rreshtave, përveç aftësisë së disponueshme më parë për të zëvendësuar variablat e listuara në mënyrë eksplicite pas një rreshti sipas numrit dhe emrit, zbatohet aftësia për të zëvendësuar identifikuesit arbitrarë duke shtuar shprehjen "{identifier}" në rresht. Për shembull: // Ndërtimet e mbështetura më parë: println!("Përshëndetje, {}!", get_person()); println!("Përshëndetje, {0}!", get_person()); println!("Përshëndetje, {person}!", person = get_person()); // tani mund të specifikoni let person = get_person(); println!("Përshëndetje, {person}!");

    Identifikuesit gjithashtu mund të specifikohen drejtpërdrejt në opsionet e formatimit. le (gjerësia, saktësia) = marr_format(); për (emri, rezultati) në get_scores() { println!("{emri}: {score:width$.precision$}"); }

    Zëvendësimi i ri funksionon në të gjitha makrot që mbështesin përcaktimin e formatit të vargut, me përjashtim të makros "panik!". në versionet 2015 dhe 2018 të gjuhës Rust, në të cilën paniku!("{ident}") trajtohet si një varg i rregullt (në Rust 2021 zëvendësimi funksionon).

  • Sjellja e std::process::Struktura e komandës në platformën Windows është ndryshuar në mënyrë që gjatë ekzekutimit të komandave, për arsye sigurie, të mos kërkojë më skedarë të ekzekutueshëm në drejtorinë aktuale. Drejtoria aktuale është e përjashtuar sepse mund të përdoret për të ekzekutuar kodin keqdashës nëse programet ekzekutohen në drejtori të pabesueshme (CVE-2021-3013). Logjika e re e zbulimit të ekzekutueshëm përfshin kërkimin e drejtorive Rust, direktorisë së aplikacionit, direktorisë së sistemit Windows dhe drejtorive të specifikuara në variablin e mjedisit PATH.
  • Biblioteka standarde ka zgjeruar numrin e funksioneve të shënuara "#[must_use]" për të lëshuar një paralajmërim nëse vlera e kthyer shpërfillet, gjë që ndihmon në identifikimin e gabimeve të shkaktuara duke supozuar se një funksion do të ndryshojë vlerat në vend që të kthejë një vlerë të re.
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • Metadata::is_symlink
    • Shtegu::is_symlink
    • {integer}::saturating_div
    • Opsioni::unwrap_unchecked
    • Rezultati::unwrap_unchecked
    • Rezultati::unwrap_err_unchecked
  • Atributi "const", i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në funksionet:
    • Kohëzgjatja:: e re
    • Kohëzgjatja::checked_add
    • Kohëzgjatja::saturating_add
    • Kohëzgjatja::checked_sub
    • Kohëzgjatja::saturating_sub
    • Kohëzgjatja::checked_mul
    • Kohëzgjatja::saturating_mul
    • Kohëzgjatja::checked_div
  • Lejohet çreferencimi i treguesve "*const T" në kontekstet "const".
  • Në menaxherin e paketave Cargo, fusha rust_version është shtuar në metadatat e paketës dhe opsioni "--message-format" është shtuar në komandën "cargo install".
  • Përpiluesi zbaton mbështetje për mekanizmin e mbrojtjes CFI (Control Flow Integrity), i cili shton kontrolle përpara çdo thirrjeje indirekte për të zbuluar disa forma të sjelljes së papërcaktuar që mund të çojnë në një shkelje të urdhrit normal të ekzekutimit (rrjedhës së kontrollit) si rezultat i përdorimi i shfrytëzimeve që ndryshojnë treguesit e ruajtur në memorie në funksione.
  • Përpiluesi ka shtuar mbështetje për versionet 5 dhe 6 të formatit të krahasimit të mbulimit LLVM, i përdorur për të vlerësuar mbulimin e kodit gjatë testimit.
  • Në përpilues, kërkesat për versionin minimal të LLVM janë ngritur në LLVM 12.
  • Niveli i tretë i mbështetjes për platformën x86_64-unknown-none është zbatuar. 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.

Për më tepër, mund të vërejmë publikimin nga Microsoft të lëshimit të bibliotekave Rust për Windows 0.30, të cilat ju lejojnë të përdorni gjuhën Rust për të zhvilluar aplikacione për sistemin operativ Windows. Kompleti përfshin dy paketa arkë (windows dhe windows-sys), përmes të cilave mund të përdorni Win API në programet Rust. Kodi për mbështetjen e API-së gjenerohet në mënyrë dinamike nga meta të dhënat që përshkruajnë API-në, e cila ju lejon të zbatoni mbështetje jo vetëm për thirrjet ekzistuese Win API, por edhe për thirrjet që do të shfaqen në të ardhmen. Versioni i ri shton mbështetjen për platformën e synuar UWP (Universal Windows Platform) dhe zbaton llojet Handle dhe Debug.

Burimi: opennet.ru

Shto një koment