Rust programmÄ“Å”anas valodas izlaidums 2021 (1.56)

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.56 izlaidums. Papildus parastajam versijas numuram izlaidums ir arÄ« apzÄ«mēts ar Rust 2021 un iezÄ«mē pēdējo trÄ«s gadu laikā ierosināto izmaiņu stabilizÄ“Å”anos. Rust 2021 kalpos arÄ« par pamatu funkcionalitātes palielināŔanai nākamo trÄ«s gadu laikā, lÄ«dzÄ«gi kā Rust 2018 izlaidums kļuva par pamatu valodas attÄ«stÄ«bai pēdējo trÄ«s gadu laikā.

Lai saglabātu saderÄ«bu, izstrādātāji savās programmās var izmantot etiÄ·etes "2015", "2018" un "2021", ļaujot saistÄ«t programmas ar valodas stāvokļa Ŕķēlēm, kas atbilst atlasÄ«tajiem Rust izdevumiem. Izdevumi tika ieviesti, lai atdalÄ«tu nesaderÄ«gas izmaiņas, un tie ir konfigurēti kravas paku metadatos, izmantojot lauku ā€œizdevumsā€ sadaļā ā€œ[paka]ā€. Piemēram, izdevums ā€œ2018ā€ ietver funkcionalitāti, kas stabilizēta 2018. gada beigās, kā arÄ« visas turpmākās izmaiņas, kas nepārkāpj saderÄ«bu. 2021. gada izdevumā papildus ir iekļautas sadarbspēju traucējoÅ”as funkcijas, kas ierosinātas paÅ”reizējā 1.56 laidienā un apstiprinātas turpmākai ievieÅ”anai. Papildus paÅ”ai valodai redaktori ņem vērā arÄ« rÄ«ku un dokumentācijas stāvokli.

Galvenās Rust 2021 reģistrētās nesaderības:

  • AtseviŔķa tverÅ”ana slēgÅ”anā ā€” tagad slēgÅ”anā var tvert atseviŔķus lauku nosaukumus, nevis visu identifikatoru. Piemēram, "|| ax + 1" tver tikai "ax", nevis "a".
  • IntoIterator iezÄ«me masÄ«viem: array.into_iter() ļauj atkārtot masÄ«va elementus pēc vērtÄ«bām, nevis pēc atsaucēm.
  • Izteicienu ā€œ|ā€ apstrāde ir mainÄ«ta macro_rules (BÅ«la VAI) modeļos ā€” atbilstÄ«bas specifikācija ":pat" tagad attiecas uz "A | B".
  • Kravas pakotnes pārvaldnieks pēc noklusējuma ietver funkciju atrisinātāja otro versiju, kuras atbalsts parādÄ«jās Rust 1.51.
  • TryFrom, TryInto un FromIterator iezÄ«mes ir pievienotas prelÅ«dijas standarta bibliotēkas modulim.
  • Panic!(..) un assert!(expr, ..) makro tagad vienmēr izmanto format_args!(..), lai formatētu virknes, lÄ«dzÄ«gi kā println!().
  • Izteicieni ident#, identĀ»..." un ident'...' ir rezervēti valodas sintaksē.
  • Bare_trait_objects un ellipsis_inclusive_range_patterns brÄ«dinājumi ir pārvietoti uz kļūdām.

Jaunums Rust 1.56:

  • Vietnē Cargo.toml sadaļā ā€œ[package]ā€ ir pievienots lauks Rust-version, caur kuru var noteikt minimāli atbalstÄ«to Rust versiju kastes pakotnei. Ja paÅ”reizējā versija neatbilst norādÄ«tajam parametram, Cargo pārtrauks darbu ar kļūdas ziņojumu.
  • Veidojot saskaņoÅ”anu, izmantojot izteiksmes "binding @ pattern", tiek nodroÅ”ināts atbalsts papildu saiÅ”u norādÄ«Å”anai (piemēram, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazÄ«mju metodes un ievieÅ”anas:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Funkcijās tiek izmantots atribÅ«ts ā€œconstā€, kas nosaka iespēju izmantot jebkurā kontekstā, nevis konstantes
    • std::mem::transmute
    • [T]::pirmais
    • [T]::sadalÄ«t_pirmais
    • [T]::pēdējais
    • [T]::split_last
  • Kompilators ir pārslēgts uz LLVM versiju 13.
  • Otrais atbalsta lÄ«menis ir ieviests platformai aarch64-apple-ios-sim un treÅ”ais lÄ«menis platformām powerpc-unknown-freebsd un riscv32imc-esp-espidf. 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.

Atgādiniet, ka Rust ir vērsta uz atmiņas droŔību, nodroÅ”ina automātisku atmiņas pārvaldÄ«bu un nodroÅ”ina lÄ«dzekļus, lai sasniegtu augstu paralēlismu darba izpildē, 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.

Avots: opennet.ru

Pievieno komentāru