Rust 1.57 programmēŔanas valodas izlaidums

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

Pievieno komentāru