IznÄcis Mozilla projekta dibinÄtÄs, bet tagad neatkarÄ«gÄs bezpeļÅas organizÄcijas Rust Foundation paspÄrnÄ izstrÄdÄtÄs sistÄmas programmÄÅ”anas valodas Rust 1.57 izlaidums. Valoda koncentrÄjas uz atmiÅas droŔību, nodroÅ”ina automÄtisku atmiÅas pÄrvaldÄ«bu un nodroÅ”ina lÄ«dzekļus augsta uzdevumu paralÄlisma sasniegÅ”anai, neizmantojot atkritumu savÄcÄju vai izpildlaiku (izpildlaiks tiek samazinÄts lÄ«dz standarta bibliotÄkas pamata inicializÄÅ”anai un uzturÄÅ”anai).
Rust automÄtiskÄ atmiÅas pÄrvaldÄ«ba novÄrÅ” kļūdas, manipulÄjot ar rÄdÄ«tÄjiem, un aizsargÄ pret problÄmÄm, kas rodas no zema lÄ«meÅa atmiÅas manipulÄcijÄm, piemÄram, piekļuves atmiÅas apgabalam pÄc tÄ atbrÄ«voÅ”anas, nulles rÄdÄ«tÄju novirzÄm, bufera pÄrtÄriÅiem utt. BibliotÄku izplatÄ«Å”anai, komplektÄÅ”anas nodroÅ”inÄÅ”anai un atkarÄ«bu pÄrvaldÄ«bai projektÄ tiek izstrÄdÄts Cargo pakotÅu pÄrvaldnieks. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
Galvenie jauninÄjumi:
- Makro āpanikas!ā izmantoÅ”ana ir stabilizÄta. kontekstos, kas izveidoti kompilÄcijas laikÄ, piemÄram, "const fn" deklarÄcijÄs. TurklÄt papildus "panikas!" const deklarÄcijas ļauj izmantot makro āassert!ā. un dažas citas standarta bibliotÄkas API. StabilizÄcija vÄl neaptver visu formatÄÅ”anas infrastruktÅ«ru, tÄpÄc paÅ”reizÄjÄ formÄ makro āpanic!ā var izmantot tikai ar statiskÄm virknÄm (panic!(...")) vai ar vienu interpolÄtu vÄrtÄ«bu "&str", aizstÄjot (panic!("{}", a)), kas jÄierobežo, aizstÄjot "{ }" bez formatÄjuma specifikÄcijÄm un citiem veidiem. NÄkotnÄ makro pielietojamÄ«ba konstantos kontekstos tiks paplaÅ”inÄta, taÄu stabilizÄtÄs iespÄjas jau ir pietiekamas, lai veiktu apgalvojumu pÄrbaudes kompilÄcijas stadijÄ: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = apgalvot!(std::mem::size_of:: () == 8);
- Cargo pakotÅu pÄrvaldnieks ļauj izmantot profilus ar patvaļīgiem nosaukumiem, ne tikai "dev", "release", "test" un "bench". PiemÄram, lai iespÄjotu optimizÄciju saistÄ«Å”anas stadijÄ (LTO) tikai tad, kad tiek Ä£enerÄti galaprodukta komplekti, vietnÄ Cargo.toml varat izveidot āražoÅ”anasā profilu un pievienot tam karogu ālto = trueā. TomÄr, definÄjot savus profilus, ir jÄnorÄda esoÅ”s profils, lai no tÄ mantotu noklusÄjuma iestatÄ«jumus. TÄlÄk sniegtajÄ piemÄrÄ tiek izveidots āražoÅ”anasā profils, kas papildina profilu āreleaseā, iekļaujot karogu ālto = trueā. Pats profils tiek aktivizÄts, izsaucot kravu ar opciju ā--profile productionā, un montÄžas artefakti tiks ievietoti direktorijÄ āmÄrÄ·is/produkcijaā. [profile.production] inherits = "izlaidums" lto = patiess
- Ir stabilizÄta try_reserve izmantoÅ”ana Vec, String, HashMap, HashSet un VecDeque tipiem, kas ļauj iepriekÅ” rezervÄt vietu noteiktam skaitam dotÄ tipa elementu, lai samazinÄtu atmiÅas pieŔķirÅ”anas operÄciju biežumu un izvairÄ«tos no avÄrijas darbÄ«bas laikÄ atmiÅas trÅ«kuma dÄļ.
- Ir atļauts norÄdÄ«t makro ar krokainÄm figÅ«riekavÄm tÄdÄs izteiksmÄs kÄ "m!{ .. }.method()" un "m!{ .. }?".
- Funkciju File::read_to_end un read_to_string izpilde ir optimizÄta.
- Unikoda specifikÄcijas atbalsts ir atjauninÄts uz versiju 14.0.
- PaplaÅ”inÄts to funkciju skaits, kas apzÄ«mÄtas ar "#[must_use]", lai sniegtu brÄ«dinÄjumu, ja tiek ignorÄta atgrieÅ”anas vÄrtÄ«ba, kas palÄ«dz identificÄt kļūdas, kas rodas, pieÅemot, ka funkcija mainÄ«s vÄrtÄ«bas, nevis atgriezÄ«s jaunu vÄrtÄ«bu.
- Pievienota eksperimentÄla aizmugursistÄma koda Ä£enerÄÅ”anai, izmantojot libgccjit.
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp ir stabilizÄtas pazÄ«mju metodes un ievieÅ”anas:
- [T; N]::as_mut_slice
- [T; N]::as_slice
- kolekcijas::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_rezervÄts
- Vec::mÄÄ£inÄt_rezervÄt_precÄ«zi
- VecDeque::try_reserve
- VecDeque::mÄÄ£inÄt_rezervÄt_precÄ«zi
- Iterators::map_while
- iter::MapWhile
- proc_macro::is_available
- Komanda::get_program
- Komanda::get_args
- Komanda::get_envs
- Komanda::get_current_dir
- CommandArgs
- CommandEnvs
- AtribÅ«ts āconstā, kas nosaka, vai to var izmantot jebkurÄ kontekstÄ, nevis konstantes, tiek izmantots funkcijÄ hint::unreachable_unchecked.
- TreÅ”ais atbalsta lÄ«menis ir ieviests ierÄ«cÄm armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi un armv7a solid_asp3-eabihf platformas. TreÅ”ais lÄ«menis ietver pamata atbalstu, taÄu bez automatizÄtas testÄÅ”anas, oficiÄlu bÅ«vÄjumu publicÄÅ”anas vai pÄrbaudes, vai kodu var izveidot.
Avots: opennet.ru