Rust 1.57 Программалоо тили релиз

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

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

Негизги инновациялар:

  • Стабилизировано использование макроса «panic!» в контекстах, создаваемых при компиляции, таких как объявления «const fn». Кроме того, помимо использования «panic!» в const-объявлениях разрешено использование макроса «assert!» и некоторых других API стандартной библиотеки. Стабилизация пока не охватывает всю инфраструктуру форматирования, поэтому в текущем виде макрос «panic!» может использоваться только со статическими строками (panic!(«…»)) или с одним интерполированным значением «&str» при подстановке (panic!(«{}», a)), которое должно ограничиваться подстановкой «{}» без спецификаторов форматирования и других типажей. В будущем применимость макросов в константных контекстах будет расширена, но стабилизированных возможностей уже достаточно для выполнения assert-проверок на этапе компиляции: const _: () = assert!(std::mem::size_of::<u64>() == 8); const _: () = assert!(std::mem::size_of::<u8>() == 1);
  • В пакетном менеджере Cargo разрешено использование профилей с произвольными именами, не ограниченными «dev», «release», «test» и «bench». Например, для включения оптимизации на этапе связывания (LTO) только при формирования финальных сборок продукта можно в Cargo.toml создать профиль «production» и добавить в него флаг «lto = true». При этом при определении собственных профилей обязательно требуется указать существующий профиль для наследования из него настроек по умолчанию. В примере ниже создаётся профиль «production», который дополняет профиль «release» включением флага «lto = true». Сам профиль активируется при вызове cargo с опцией «—profile production», а сборочные артефакты будут размещены в каталоге «target/production». [profile.production] inherits = «release» lto = true
  • Стабилизировано использование try_reserve для типов Vec, String, HashMap, HashSet и VecDeque, что позволяет заранее резервировать место для определённого числа элементов заданного типа для того, чтобы снизить частоту выполнения операций выделения памяти и избежать аварийного завершения в процессе работы из-за нехватки памяти.
  • Разрешено указание макросов с фигурными скобками в выражениях подобных «m!{ .. }.method()» и «m!{ .. }?».
  • Оптимизировано выполнение функций File::read_to_end и read_to_string.
  • Юникоддун спецификациясын колдоо 14.0 версиясына жаңыртылган.
  • Расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
  • Добавлен экспериментальный бэкенд для генерации кода с использованием libgccjit.
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции hint::unreachable_unchecked.
  • Реализован третий уровень поддержки для платформ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi и armv7a-kmc-solid_asp3-eabihf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Source: opennet.ru

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