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

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

វិធីសាស្ត្រគ្រប់គ្រងអង្គចងចាំរបស់ Rust ជួយសង្រ្គោះអ្នកអភិវឌ្ឍន៍ពីកំហុសនៅពេលរៀបចំទ្រនិច និងការពារពីបញ្ហាដែលកើតឡើងដោយសារការគ្រប់គ្រងអង្គចងចាំកម្រិតទាប ដូចជាការចូលប្រើតំបន់អង្គចងចាំបន្ទាប់ពីវាត្រូវបានដោះលែង ការពន្យារទ្រនិចចង្អុលទទេ ការដំណើរការលើសចំណុះ។ល។ ដើម្បីចែកចាយបណ្ណាល័យ ផ្តល់ការកសាង និងគ្រប់គ្រងភាពអាស្រ័យ គម្រោងអភិវឌ្ឍកម្មវិធីគ្រប់គ្រងកញ្ចប់ទំនិញ។ ឃ្លាំង crates.io ត្រូវបានគាំទ្រសម្រាប់ការបង្ហោះបណ្ណាល័យ។

សុវត្ថិភាពនៃអង្គចងចាំត្រូវបានផ្តល់ជូននៅក្នុង Rust នៅពេលចងក្រងតាមរយៈការត្រួតពិនិត្យឯកសារយោង ការរក្សាដាននៃភាពជាម្ចាស់វត្ថុ ការតាមដានអាយុកាលរបស់វត្ថុ (វិសាលភាព) និងការវាយតម្លៃភាពត្រឹមត្រូវនៃការចូលប្រើអង្គចងចាំអំឡុងពេលដំណើរការកូដ។ ច្រែះក៏ផ្តល់ការការពារប្រឆាំងនឹងចំនួនគត់លើសចំណុះ ទាមទារការចាប់ផ្តើមចាំបាច់នៃតម្លៃអថេរមុនពេលប្រើ ដោះស្រាយកំហុសបានប្រសើរជាងនៅក្នុងបណ្ណាល័យស្តង់ដារ អនុវត្តគោលគំនិតនៃសេចក្តីយោងដែលមិនអាចផ្លាស់ប្តូរបាន និងអថេរតាមលំនាំដើម ផ្តល់នូវការវាយអក្សរឋិតិវន្តខ្លាំង ដើម្បីកាត់បន្ថយកំហុសឡូជីខល។

ការច្នៃប្រឌិតសំខាន់ៗ៖

  • Повышены требования к окружению Linux в компиляторе, пакетном менеджере Cargo и стандартной библиотеке libstd — минимальные требования к Glibc подняты с версии 2.11 до 2.17, а ядра Linux c версии 2.6.32 до 3.2. Ограничения также распространяются на исполняемые файлы Rust-приложений, собранных с libstd. Новым требованиям соответствуют дистрибутивы RHEL 7, SLES 12-SP5, Debian 8 и Ubuntu 14.04. Будет прекращена поддержка RHEL 6, SLES 11-SP4, Debian 7 и Ubuntu 12.04. Пользователям, которые используют собранные инструментарием Rust исполняемые файлы в окружениях со старым ядром Linux, предложено обновить свои системы, оставаться на старых выпусках компилятора или самостоятельно поддерживать своё ответвление libstd с прослойками для сохранения совместимости.

    Среди причин прекращения поддержки старых Linux-систем упоминаются ограниченные ресурсы по продолжению сопровождения совместимости со старыми окружениями. Поддержка старых Glibc требует использования старого инструментария при проверке в системе непрерывной интеграции, в условиях повышения требований к версиям в LLVM и утилитах кросс-компиляции. Повышение требований к версии ядра связано с возможностью использования в libstd новых системных вызовов без необходимости поддержания прослоек для обеспечения совместимости со старыми ядрами.

  • Стабилизирован типаж IntoFuture, который напоминает IntoIterator, но отличается от последнего использованием «.await» вместо циклов «for … in …». В сочетании с IntoFuture ключевое слово «.await» может ожидать не только типаж Future, но и любые другие типы, которые можно сконвертировать в Future.
  • Утилита rust-analyzer включена в состав коллекции утилит, поставляемой в выпусках Rust. Утилита также доступа для установки при помощи rustup (rustup component add rust-analyzer).
  • В пакетном менеджере Cargo реализована возможность наследования рабочей области для исключения дублирования между пакетами типовых значений полей, таких как версии Rust и URL репозиториев. Также добавлена поддержка сборки сразу для нескольких целевых платформ (в опции «—target» теперь можно указывать более одного параметра).
  • ផ្នែកថ្មីនៃ API ត្រូវបានផ្លាស់ទីទៅប្រភេទនៃស្ថេរភាព រួមទាំងវិធីសាស្រ្ត និងការអនុវត្តលក្ខណៈត្រូវបានធ្វើឱ្យមានស្ថេរភាព៖
    • future::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • В основной состав (core) и библиотеку alloc добавлены Си-совместимые типы, ранее стабилизированные в модуле std::ffi:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • В модули core::ffi и std::ffi добавлены Си-типы, ранее стабилизированные в модуле std::os::raw (например, для Си-типов uint и ulong предложены типы c_uint и c_ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Стабилизированы низкоуровневые обработчики для использования с механизмом Poll (в будущем планируется предоставить упрощённый API, не требующих использования низкоуровневых структур типа Pull и Pin):

    • future::poll_fn
    • task::ready!
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции slice::from_raw_parts.
  • С целью более компактного хранения данных изменена раскладка памяти структур Ipv4Addr, Ipv6Addr, SocketAddrV4 и SocketAddrV6. Возможно нарушение совместимости с единичными crate-пакетами, которые используют std::mem::transmute для низкоуровневых манипуляций со структурами.
  • В сборке компилятора rust для платформы Windows задействованы PGO-оптимизации (profile-guided optimization), позволившие поднять производительность компиляции кода на 10-20%.
  • В компиляторе реализовано новое предупреждение о неиспользуемых полях в определённых структурах.

Дополнительно можно отметить отчёт о состоянии разработки альтернативной реализации компилятора языка Rust, подготовленной проектом gccrs (GCC Rust) и одобренной для включения в состав GCC. После интеграции фронтэнда штатный инструментарий GCC сможет использоваться для компиляции программ на языке Rust без необходимости установки компилятора rustc, построенного с использованием наработок LLVM. Пока разработка идёт по плану и если не возникнет непредвиденных проблем, фронтэнд для языка Rust будет интегрирован в состав выпуска GCC 13, намеченного на май следующего года. Реализация Rust в GCC 13 будет иметь статус бета-версии, пока не включаемой по умолчанию.

ប្រភព: opennet.ru

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