Нашри забони барномасозии Rust 2021 (1.56)

Нашри забони барномасозии системавии Rust 1.56, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии ташкилоти мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Илова ба рақами версияи муқаррарӣ, нашр инчунин Rust 2021 номида мешавад ва мӯътадил шудани тағйироти дар тӯли се соли охир пешниҳодшударо нишон медиҳад. Rust 2021 инчунин ҳамчун асос барои афзоиши функсияҳо дар тӯли се соли оянда хидмат хоҳад кард, ба монанди он, ки нашри Rust 2018 дар се соли охир заминаи рушди забон гардид.

Барои нигоҳ доштани мутобиқат, таҳиягарон метавонанд дар барномаҳои худ тамғакоғазҳои "2015", "2018" ва "2021" -ро истифода баранд, ки ба барномаҳо имкон медиҳад, ки ба порчаҳои ҳолати забонии мувофиқ ба нашрҳои интихобшудаи Rust пайваст шаванд. Нашрияҳо барои ҷудо кардани тағйироти номувофиқ ҷорӣ карда шуданд ва дар метамаълумоти бастаҳои боркаш тавассути майдони "нашри" дар бахши "[баста]" танзим карда мешаванд. Масалан, нашри "2018" функсияҳоеро дар бар мегирад, ки дар охири соли 2018 мӯътадил шудааст ва инчунин ҳама тағиротҳои минбаъдаро дар бар мегирад, ки мутобиқатро вайрон намекунанд. Нашри соли 2021 ба таври илова хусусиятҳои вайронкунандаи ҳамоҳангсозиро дар бар мегирад, ки дар версияи кунунии 1.56 пешниҳод шудаанд ва барои татбиқи оянда тасдиқ карда шудаанд. Ба гайр аз худи забон, мухаррирон холати асбобхо ва хуччатхоро низ ба назар мегиранд.

Носозгориҳои асосии дар Rust 2021 сабтшуда:

  • Забти ҷудогона дар бастаҳо - Бастанҳо акнун метавонанд ба ҷои тамоми идентификатор номҳои майдонҳои инфиродиро сабт кунанд. Масалан, "|| ax + 1" ба ҷои "a" танҳо "табар" -ро мегирад.
  • Хусусияти IntoIterator барои массивҳо: array.into_iter() ба шумо имкон медиҳад, ки элементҳои массивро на аз рӯи истинодҳо, балки аз рӯи арзишҳо такрор кунед.
  • Коркарди ибораҳои "|" дар macro_rules тағир дода шудааст (Ё инки мантиқӣ) дар намунаҳо - Муайянкунандаи ":pat" дар мувофиқатҳо ҳоло эҳтироми "A | Б».
  • Менеҷери бастаи бор ба таври нобаёнӣ версияи дуюми ҳалли хусусиятро дар бар мегирад, ки дастгирии он дар Rust 1.51 пайдо шудааст.
  • Хусусиятҳои TryFrom, TryInto ва FromIterator ба модули стандартии китобхонаи муқаддима илова карда шудаанд.
  • Макросҳои воҳима!(..) ва assert!(expr, ..) ҳоло ҳамеша формат_args!(..)-ро барои формат кардани сатрҳо, ба мисли println!() истифода мебаранд.
  • Ибораҳои ident#, ident»..." ва ident'...' дар синтаксиси забон маҳфузанд.
  • Огоҳиҳои bare_trait_objects ва ellipsis_inclusive_range_patterns ба хатогиҳо интиқол дода шуданд.

Нав дар Rust 1.56:

  • Дар Cargo.toml, дар бахши "[баста], майдони версияи занг илова карда шудааст, ки тавассути он шумо метавонед версияи ҳадди ақали пуштибонии Rust-ро барои бастаи сандуқ муайян кунед. Агар версияи ҷорӣ ба параметри муқарраршуда мувофиқат накунад, Cargo кор бо паёми хатогӣ қатъ мешавад.
  • Ҳангоми мувофиқати намуна бо истифода аз ибораҳои "binding @ pattern", дастгирӣ барои муайян кардани пайвандҳои иловагӣ таъмин карда мешавад (масалан, "бигзор матритса @ Matrix { row_len, .. } = get_matrix ();").
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • 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
  • Аттрибути "const", ки имкони истифода дар ҳама гуна контекст ба ҷои константаҳоро муайян мекунад, дар функсияҳо истифода мешавад.
    • std :: mem :: интиқол
    • [T]::аввал
    • [T]::split_first
    • [T]:: охир
    • [T]::split_last
  • Компилятор ба истифодаи версияи LLVM 13 иваз карда шудааст.
  • Сатҳи дуюми дастгирӣ барои платформаи aarch64-apple-ios-sim ва сатҳи сеюм барои платформаҳои powerpc-unknown-freebsd ва riscv32imc-esp-espidf амалӣ карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.

Ёдовар мешавем, ки Rust ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланд дар иҷрои кор бидуни истифодаи коллектори партов ё вақти корӣ таъмин мекунад (вақти кор то ибтидосозӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Идоракунии хотираи автоматии Rust хатогиҳоро ҳангоми коркарди нишондиҳандаҳо бартараф мекунад ва аз мушкилоте, ки аз коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, истинодҳои нули нишоннамо, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмини ҷамъбаст ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Манбаъ: opennet.ru

Илова Эзоҳ