Rust 1.51 programmeerimiskeele väljalase

Ilmus Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all arendatud süsteemi programmeerimiskeele Rust 1.51 väljalase. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja pakub vahendeid ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata (käitusaeg taandub standardse teegi põhikäivitamise ja hoolduseni).

Rusti automaatne mäluhaldus välistab osutitega manipuleerimisel tekkivad vead ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu mälupiirkonnale juurdepääs pärast selle vabastamist, null-osuti viited, puhvri ületamised jne. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks arendatakse projektis Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Peamised uuendused:

  • Konstantide geneeriliste tüüpide kasutamisega seotud funktsionaalsus on nimetatud minimaalselt elujõuliseks tooteks (MVP), mis annab rohelise tule laialdaseks kasutuselevõtuks. Konstantide geneerilised tüübid võimaldavad üldistada tüüpe konstantsete väärtuste jaoks, st kasutada üldisi argumente, mis on piiratud konstantsete väärtuste vahemikuga, mitte tüüpi või elueaga. See võimalus võimaldab kasutada täisarvuliste parameetritega tüüpe ja abstraktsiooni mis tahes suurusega massiivide tunnuste loomisel, ilma et oleks vaja luua iga kehtivate väärtuste vahemiku jaoks eraldi tüüp, et tagada kehtiva vahemiku mitte ületamine.

    Alates praegusest versioonist on massiividel tüübiga "[T; N]" (tüüp T ja suurus N) nüüd võimalik abstraktselt määrata tüüp ja suurus, kasutades mis tahes täisarvu, tõeväärtust või märgitüüpi (struct ja enum tüübid pole veel toetatud). Const geneerilised versioonid lihtsustavad oluliselt teekide arendamist; näiteks massiivi kasutamiseks, mis pole seotud kindla tüübi ja suurusega, saate määrata: struct Array { // ^^^^^^^^^^^^^^^^^^^^^^ konstandi üldise loendi definitsioon: [T; LENGTH] // ^^^^^^ selle kasutamine }

    Selle definitsiooniga koos kasutades tähendab "Array "kompilaator genereerib massiivi monomorfse versiooni: struct Array" { nimekiri: [u8; 32] }

  • Konstantsetel geneerilistel väärtustel põhinev std::array::IntoIter API on stabiliseeritud. Selle abil saate luua mis tahes massiivi jaoks väärtuse järgi iteraatoreid: fn main() { let array = [1, 2, 3, 4, 5]; // Varem pidite väärtuse itereerimiseks kutsuma array.iter().copied() jaoks meetodi .iter() { println!(«{}», item); } // Nüüd saate määrata std::array::IntoIter::new(array) jaoks { println!(«{}», item); } }
  • Cargo paketihaldur toetab nüüd uut resolveri välja failis Cargo.toml, mida saab kasutada funktsioonide resolveri teise versiooni lubamiseks. See uus resolver väldib jaotises "[funktsioonid]" loetletud sõltuvusfunktsioonide liitmist, kui see pole kohane, näiteks kui lisatakse sõltuvus, mis nõuab ehitusskriptides ja makrodes standardfunktsiooni, kuid kasutab lõplikus käivitatavas failis mittestandardset funktsiooni.

    Varem liideti sõltuvusgraafikus mitu korda mainitud paketi võimed. Näiteks kui projekt sisaldas sõltuvust foo, mis defineeris võimed A ja B, ning seda paketti kasutati teistes pakettides bar ja baz ning bar sõltus foo-st võimekusega A ja baz sõltus foo-st võimekusega B, siis cargo liidaks need võimed ja kompileeriks foo lubatud võimetega A ja B. See meetod võis viia olukorrani, kus sõltuvuse poolt lubatud võimekus ei ühildu sihtsüsteemiga, mille jaoks lõplik ehitamine tehti. Näiteks kui käivitatavas failis, mis oli ehitatud "#![no_std]", oli vaja kasutada foo versiooni, millel oli "#![no_std]", ja build.rs-i ehitamise ajal oli vaja kasutada foo versiooni, millel oli "std". Määrates Cargo.toml-is resolver="2", püüab paketihaldur nüüd seda konflikti õigesti käsitleda, eraldades dev, host ja target sõltuvused.

  • В cargo реализована опция split-debuginfo, задаваемая в секции «[profile]» и соответствующий флаг «-Csplit-debuginfo=unpacked» в rustc, предлагающие реализацию нового метода сохранения отладочной информации, который позволяет избавиться от необходимости вызова утилиты dsymutil и существенно ускорить процесс сборки с отладочной информацией в macOS.
  • Makrod "ptr::addr_of!" ja "ptr::addr_of_mut!" on stabiliseeritud, võimaldades luua töötlemata pointereid joondamata väljadele. use std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // &packed.f2 loob joondamata pointeri, mis viib defineerimata käitumiseni let raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
  • API uus osa on üle viidud stabiilsesse kategooriasse, sealhulgas on stabiliseeritud järgmised meetodid:
    • Arc::vähenduse_tugevuste_arv
    • Arc::increment_strong_count
    • Once::call_once_force
    • Peekable::next_if_eq
    • Peekable::next_if
    • Seek::stream_position
    • massiiv::IntoIter
    • paanika::paanika_any
    • ptr::adr_of!
    • ptr::mut_aadress!
    • viil::täida_koos
    • viil::split_inclusive_mut
    • viil::jagatud_kaasa arvatud
    • viil::riba_eesliide
    • viil::riba_järelliide
    • str::split_inclusive
    • sünkroniseerimine::OnceState
    • ülesanne::Äratus
  • 3. taseme tugi on rakendatud platvormidele i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 ja aarch64_be-unknown-linux-gnu_ilp32. 3. tase pakub põhituge, kuid ilma automaatse testimise, ametlike järkude või järkude verifitseerimiseta.

Allikas: opennet.ru

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster