[Перевод] Rust 1.54.0: Поддержка SIMD инструкций в WebAssembly и инкрементальная компиляция снова включена по умолчанию

7937dff2b84e9ec9940a701002445e96

Команда Rust рада сообщить о выпуске новой версии — Rust 1.54.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас установлена предыдущая версия Rust через rustup, то обновиться на версию языка Rust 1.54.0 все так же просто, как никогда:

rustup update stable

Если вы всё ещё не используете rustup, вы можете установить rustup на соответствующей странице нашего веб-сайта и ознакомиться с подробными примечаниями к выпуску 1.54.0 на GitHub.


Что стабилизировано в 1.54.0

Этот выпуск содержит несколько новых возможностей языка.


  • Добавлены новые сценарии использования макросов
  • Стабилизированы компиляторные вставки на платформе wasm32
  • Инкрементальная компиляция по умолчанию


Атрибуты могут вызывать макросы подобные функциям

Rust 1.54 поддерживает вызов макросов подобных функциям внутри атрибутов. Такие макросы могут быть основаны на macro_rules! или быть процедурными макросами, которые вызываются как macro!(...). Одним из примечательных вариантов использования этого является включение документации из других файлов в комментарии к документации Rust. Например, если README вашего проекта представляет собой хороший комментарий к документации, вы можете использовать include_str! для непосредственного включения содержимого. Раньше различные обходные пути допускали аналогичную функциональность, но с версии 1.54 это стало намного эргономичнее.

#![doc = include_str!("README.md")]

Макросы также могут быть вложены в атрибут, например, для включения содержимого, созданного сценарием сборки:

#[path = concat!(env!("OUT_DIR"), "/generated.rs")]
mod generated;

Подробнее читайте здесь.


Стабилизация компиляторных вставок (intrinsics) в wasm32

Стабилизирован ряд компиляторных вставок использующихся на платформе wasm32, что даёт доступ к инструкциям SIMD в WebAssembly.

Примечательно, что, в отличие от ранее стабилизированных x86 и x86_64, у них нет требований безопасности, которые должны вызываться только при включении соответствующей целевой функциональности. Это связано с тем, что WebAssembly был написан с самого начала для безопасной проверки кода перед его выполнением, поэтому инструкции гарантированно декодируются правильно (или не декодируются вообще).

Это означает, что мы можем предоставить некоторые компиляторные вставки как полностью безопасные, например v128_bitselect. Однако есть некоторые компиляторные вставки, которые небезопасны, потому что они используют сырые указатели, например v128_load.


Инкрементальная компиляция снова включена по умолчанию

Инкрементальная компиляция была повторно включена по умолчанию в этом выпуске после того, как она была отключена по умолчанию в 1.52.1.

В Rust 1.52 была добавлена дополнительная проверка при загрузке данных инкрементной компиляции из кеша на диске. Это привело к обнаружению ряда ранее существовавших потенциальных проблем с надёжностью, поскольку проверка изменила эти скрытые ошибки на внутренние ошибки компилятора (ICE). В ответ команда разработки компилятора решила отключить инкрементную компиляцию в исправлении 1.52.1, что позволило пользователям избежать столкновения с ICE и лежащей в их основе несостоятельностью за счёт более длительного времени компиляции. [^1]

С тех пор мы провели серию ретроспектив, и участники усердно работали над устранением обнаруженных проблем, при этом некоторые исправления были внесены в 1.53, а большинство — в этом выпуске. [^2]

В настоящее время есть ещё две известные проблемы, которые могут привести к ICE. Из-за отсутствия автоматических отчётов о сбоях мы не можем быть полностью уверены какое влияние они оказывают. Однако на основании отзывов, полученных от пользователей, затронутых выпуском 1.52, мы считаем, что оставшиеся проблемы на практике возникают редко.

Поэтому в этом выпуске снова включена инкрементная компиляция!

[^1]: [примечания к выпуску 1.52.1] содержат более подробное описание этих событий.

[^2]: Задача для отслеживания: #84970.


Стабилизированные API

Стабилизированы следующие методы и реализации типажей.


Прочие изменения

В выпуске Rust 1.54.0 есть и другие изменения: узнайте, что изменилось в Rust, Cargo и Clippy.

Также был исправлен rustfmt в версии 1.54.0 для правильного форматирования вложенных автономных модулей. Это может вызвать изменения в форматировании файлов, которые игнорировались 1.53.0 rustfmt. Подробности смотрите здесь.


Участники сделавшие вклад в версию 1.54.0

Многие люди собрались вместе, чтобы создать Rust 1.54.0. Без вас мы бы не справились. Спасибо!



От переводчиков

С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.
Также можете поддержать нас на OpenCollective.

Данную статью совместными усилиями перевели andreevlex, TelegaOvoshey, blandger, Belanchuk и funkill.

© Habrahabr.ru