Rust 1.57 ការចេញផ្សាយភាសាសរសេរកម្មវិធី

ការចេញផ្សាយភាសាសរសេរកម្មវិធីប្រព័ន្ធ Rust 1.57 ដែលបង្កើតឡើងដោយគម្រោង Mozilla ប៉ុន្តែឥឡូវនេះត្រូវបានបង្កើតឡើងក្រោមការឧបត្ថម្ភរបស់អង្គការមិនរកប្រាក់ចំណេញឯករាជ្យ Rust Foundation ត្រូវបានបោះពុម្ពផ្សាយ។ ភាសាផ្តោតលើសុវត្ថិភាពនៃការចងចាំ ផ្តល់នូវការគ្រប់គ្រងអង្គចងចាំដោយស្វ័យប្រវត្តិ និងផ្តល់មធ្យោបាយដើម្បីសម្រេចបាននូវកិច្ចការស្របគ្នាខ្ពស់ដោយមិនប្រើឧបករណ៍ប្រមូលសំរាម ឬពេលដំណើរការ (ពេលវេលារត់ត្រូវបានកាត់បន្ថយទៅជាការចាប់ផ្តើមជាមូលដ្ឋាន និងការថែទាំបណ្ណាល័យស្តង់ដារ)។

ការគ្រប់គ្រងអង្គចងចាំដោយស្វ័យប្រវត្តិរបស់ Rust លុបបំបាត់កំហុសនៅពេលរៀបចំចំណុចចង្អុល និងការពារប្រឆាំងនឹងបញ្ហាដែលកើតឡើងពីការរៀបចំអង្គចងចាំកម្រិតទាប ដូចជាការចូលទៅកាន់តំបន់អង្គចងចាំបន្ទាប់ពីវាត្រូវបានដោះលែង ការបដិសេធទ្រនិចទទេ ការដំណើរការលើសចំណុះ។ល។ ដើម្បីចែកចាយបណ្ណាល័យ ធានាការប្រមូលផ្តុំ និងគ្រប់គ្រងភាពអាស្រ័យ គម្រោងកំពុងអភិវឌ្ឍកម្មវិធីគ្រប់គ្រងកញ្ចប់ទំនិញ។ ឃ្លាំង 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. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

ប្រភព: opennet.ru

បន្ថែមមតិយោបល់