Rust 1.58 Programming Language Release

Опубликован релиз языка программирования общего назначения Rust 1.58, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

ການຈັດການຄວາມຊົງຈໍາອັດຕະໂນມັດຂອງ Rust ກໍາຈັດຄວາມຜິດພາດໃນເວລາທີ່ manipulating pointers ແລະປ້ອງກັນບັນຫາທີ່ເກີດຈາກການຫມູນໃຊ້ຫນ່ວຍຄວາມຈໍາລະດັບຕ່ໍາ, ເຊັ່ນ: ການເຂົ້າເຖິງພາກພື້ນຫນ່ວຍຄວາມຈໍາຫຼັງຈາກທີ່ມັນໄດ້ຖືກປົດປ່ອຍ, null pointer dereferences, buffer overruns, ແລະອື່ນໆ. ເພື່ອແຈກຢາຍຫ້ອງສະຫມຸດ, ຮັບປະກັນການປະກອບແລະການຄຸ້ມຄອງການເພິ່ງພາອາໄສ, ໂຄງການກໍາລັງພັດທະນາຜູ້ຈັດການຊຸດສິນຄ້າ. ຄັງເກັບ crates.io ໄດ້ຮັບການສະຫນັບສະຫນູນສໍາລັບການເປັນເຈົ້າພາບຫ້ອງສະຫມຸດ.

ນະວັດຕະກໍາຕົ້ນຕໍ:

  • В блоках форматирования строк, в дополнение к ранее доступной возможности подстановки явно перечисленных после строки переменных по номеру и имени, реализована возможность подстановки произвольных идентификаторов через добавление в строку выражений «{идентификатор}». Например: // Ранее поддерживались конструкции: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!(«Hello, {person}!», person = get_person()); // теперь можно указывать let person = get_person(); println!(«Hello, {person}!»);

    Идентификаторы также можно указывать непосредственно в параметрах форматирования. let (width, precision) = get_format(); for (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }

    Новая подстановка работает во всех макросах, поддерживающих определение формата строки, за исключением макроса «panic!» в версиях языка Rust 2015 и 2018, в которых panic!(«{ident}») обрабатывается как обычная строка (в Rust 2021 подстановка срабатывает).

  • Изменено поведение структуры std::process::Command на платформе Windows, которая при выполнении команд из соображений безопасности больше не ищет исполняемые файлы в текущем каталоге. Текущий каталог исключён так как может быть использован для организации выполнения кода злоумышленника в случае запуска программ в не заслуживающих доверия каталогах (CVE-2021-3013). Новая логика определения исполняемых файлов подразумевает поиск в каталогах Rust, в каталоге приложения, системном каталоге Windows и каталогах, указанных в переменной окружения PATH.
  • В стандартной библиотеке расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
  • ພາກສ່ວນໃຫມ່ຂອງ API ໄດ້ຖືກຍ້າຍໄປຢູ່ໃນປະເພດຂອງຄວາມຫມັ້ນຄົງ, ລວມທັງວິທີການແລະການຈັດຕັ້ງປະຕິບັດລັກສະນະຕ່າງໆແມ່ນມີຄວາມຫມັ້ນຄົງ:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Result::unwrap_unchecked
    • Result::unwrap_err_unchecked
  • ຄຸນລັກສະນະ "const", ເຊິ່ງກໍານົດຄວາມເປັນໄປໄດ້ຂອງການນໍາໃຊ້ມັນໃນສະພາບການໃດກໍ່ຕາມແທນທີ່ຈະເປັນຄ່າຄົງທີ່, ຖືກນໍາໃຊ້ໃນຫນ້າທີ່:
    • Duration::new
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Разрешено разыменование указателей «*const T» в контекстах «const».
  • В пакетном менеджере Cargo в метаданные пакета добавлено поле rust_version, а в команду «cargo install» добавлена опция «—message-format».
  • В компиляторе реализована поддержка механизма защиты CFI (Control Flow Integrity), добавляющего перед каждым косвенным вызовом функции проверки для выявления некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
  • В компиляторе добавлена поддержка 5 и 6 версии формата coverage-сопоставлений LLVM, используемого для оценки охвата кода при тестировании.
  • В компиляторе требования к минимальной версии LLVM подняты до LLVM 12.
  • Реализован третий уровень поддержки для платформы x86_64-unknown-none. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Дополнительно можно отметить публикацию компанией Microsoft выпуска библиотек Rust for Windows 0.30, позволяющих использовать язык Rust для разработки приложений для ОС Windows. В набор входят два crate-пакета (windows и windows-sys), через которые можно обращаться к Win API в программах на языке Rust. Код для поддержки API генерируется динамически из метаданных с описанием API, что позволяет реализовать поддержку не только уже существующих вызовов Win API, но вызовов, которые появятся в будущем. В новой версии добавлена поддержка целевой платформы UWP (Universal Windows Platform), реализованы типажи Handle и Debug.

ແຫຼ່ງຂໍ້ມູນ: opennet.ru

ເພີ່ມຄວາມຄິດເຫັນ