Rust программалоо тили релиз 2021 (1.56)

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.56 системалык программалоо тилинин чыгарылышы жарык көрдү. Кадимки версия номеринен тышкары, релиз дагы Rust 2021 деп аталат жана акыркы үч жылда сунушталган өзгөртүүлөрдүн турукташтырылганын белгилейт. Rust 2021 ошондой эле кийинки үч жыл ичинде функционалдык мүмкүнчүлүктөрдү жогорулатуу үчүн негиз болуп кызмат кылат, ошондой эле Rust 2018 чыгаруу акыркы үч жылда тилди өнүктүрүү үчүн негиз болгон сыяктуу.

Шайкештикти сактоо үчүн, иштеп чыгуучулар өз программаларында "2015", "2018" жана "2021" энбелгилерин колдонушу мүмкүн, бул программаларга Rustтун тандалган басылмаларына туура келген тил абалынын кесимдери менен байланыштырууга мүмкүндүк берет. Басылмалар өзүнчө шайкеш келбеген өзгөртүүлөр үчүн киргизилген жана жүк пакеттеринин метаберилиштеринде “[пакет]” бөлүмүндөгү “чыгарма” талаасы аркылуу конфигурацияланган. Мисалы, "2018" чыгарылышы 2018-жылдын акырына карата абал боюнча турукташкан функцияларды камтыйт жана ошондой эле шайкештикти бузбаган бардык кийинки өзгөртүүлөрдү камтыйт. 2021-жылдагы чыгарылыш кошумча түрдө учурдагы 1.56 релизинде сунушталган жана келечекте ишке ашыруу үчүн бекитилген өз ара аракеттенүү мүмкүнчүлүгүн бузган функцияларды камтыйт. Тилдин өзүнөн тышкары, редакторлор куралдардын жана документтердин абалын да эске алышат.

Rust 2021-жылы катталган негизги шайкеш келбестиктер:

  • Жабыктарда өзүнчө тартуу - Жабыктар эми бүт идентификатордун ордуна жеке талаа аттарын тарта алат. Мисалы, "|| ax + 1" "a" ордуна "балтаны" гана басып алат.
  • Массивдер үчүн IntoIterator касиети: array.into_iter() массив элементтерин шилтемелер боюнча эмес, баалуулуктар боюнча итерациялоого мүмкүндүк берет.
  • “|” туюнтмаларын иштетүү макро_эрежелерде өзгөртүлдү (Логикалык ЖЕ) үлгүлөрдөгү - дал келүүлөрдөгү ":pat" спецификациясы эми "A | Б".
  • Жүк пакетинин менеджери демейки боюнча функцияларды чечүүчүнүн экинчи версиясын камтыйт, аны колдоо Rust 1.51де пайда болгон.
  • Прелюдия стандарттык китепкана модулуна TryFrom, TryInto жана FromIterator белгилери кошулду.
  • Паника!(..) жана assert!(expr, ..) макролору азыр дайыма println!() сыяктуу саптарды форматтоо үчүн format_args!(..) колдонушат.
  • ident#, ident»..." жана ident'...' туюнтмалары тил синтаксисинде сакталган.
  • bare_trait_objects жана ellipsis_inclusive_range_patterns эскертүүлөрү каталарга жылдырылды.

Rust 1.56дагы жаңы:

  • Cargo.toml сайтында, “[пакет]” бөлүмүндө дат-версия талаасы кошулду, ал аркылуу сиз куту пакети үчүн Rustтун минималдуу колдоого алынган версиясын аныктай аласыз. Эгерде учурдагы версия көрсөтүлгөн параметрге дал келбесе, Cargo ката билдирүүсү менен ишин токтотот.
  • Үлгү дал келүүдө "binding @ pattern" туюнтмаларын колдонуу менен, кошумча байланыштарды көрсөтүү үчүн колдоо көрсөтүлөт (мисалы, "matrix @ 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::transmute
    • [T]::биринчи
    • [T]::биринчи бөлүү
    • [T]::акыркы
    • [T]:: акыркы_бөлүү
  • Компилятор LLVM 13 версиясын колдонууга которулган.
  • Колдоонун экинчи деңгээли aarch64-apple-ios-sim платформасы жана үчүнчү деңгээли powerpc-unknown-freebsd жана riscv32imc-esp-espidf платформалары үчүн ишке ашырылган. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.

Эске салсак, Rust эстутумдун коопсуздугуна багытталган, эстутумду автоматтык башкарууну камсыз кылат жана таштанды жыйноочу же иштөө убактысын колдонбостон ишти аткарууда жогорку параллелизмге жетүү үчүн каражатты камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутумдун автоматтык башкаруусу көрсөткүчтөрдү манипуляциялоодо каталарды жок кылат жана эстутумдун төмөнкү деңгээлдеги манипуляциясынан келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутум аймагына ал бошогондон кийин жетүү, нөл көрсөткүчтөр шилтемелери, буферди ашып кетүү ж.б. Китепканаларды жайылтуу, чогултууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгууда. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

Source: opennet.ru

Комментарий кошуу