Команда Rust выпустила версию 1.100.0.
Главным нововведением стала окончательная стабилизация типа !, над которым разработчики работали около 10 лет.
Кроме того, язык получил новые инструменты управления памятью, а Cargo научился предупреждать о ненужных зависимостях.
Читают прямо сейчас:
В Rust нашли опасную дыру в защите памяти — багу уже 11 лет — разбираем ошибки времени жизни ссылок и механизм Drop.
Пишем гороскоп на Rust — устанавливаем Rust, знакомимся с Cargo и подключаем зависимости.
Rust — молодой и дерзкий язык программирования — разбираем особенности языка, управление памятью и безопасность кода.
Тип, который ждали десять лет
Главное изменение Rust 1.100 — полноценная поддержка never type, обозначаемого символом !.
Этот тип используется для операций, которые никогда не возвращают значение. Например, когда функция завершает программу, выходит из текущего выполнения или работает в бесконечном цикле.
Раньше ! уже применялся в некоторых ситуациях, но теперь его можно использовать в любом месте, где допускается указание типа.
Разработчикам потребовалось 10 лет и пять неудачных попыток стабилизации, чтобы довести эту возможность до стабильного релиза.
При этом изменение может затронуть некоторые старые проекты из-за обновления правил вывода типов. Команда Rust заранее подготовила предупреждения о совместимости.
Новые возможности работы с памятью
В Rust 1.100 стабилизировали основные части Allocator API. Теперь разработчики библиотек могут создавать собственные распределители памяти и использовать их с Vec и Box.
Появился и новый инструмент DropGuard, который автоматически выполняет заданное действие при выходе из области видимости.
Например, с его помощью можно откатывать изменения, если операция завершилась ошибкой, без написания отдельной структуры с реализацией Drop.
Также добавили функцию conjure_zst для создания значений типов нулевого размера. Она требует использования unsafe, поскольку неправильное применение может нарушить гарантии безопасности программы.
Cargo стал удобнее и безопаснее
Менеджер пакетов Cargo теперь предупреждает о неиспользуемых зависимостях. Это поможет избавляться от лишних библиотек и сокращать время сборки проектов.
Еще одно важное нововведение — min-publish-age. Разработчики могут установить минимальный возраст версии пакета, например три дня.
В таком случае Cargo не будет автоматически выбирать только что опубликованные версии зависимостей. Это дает сообществу и системам проверки дополнительное время на обнаружение вредоносных обновлений.
Кроме того, разработчики переработали структуру каталога сборки, чтобы уменьшить конфликты кеша и избежать лишней перекомпиляции.
Rust 1.100 уже доступен для установки. Пользователи предыдущих версий могут обновиться командой:
rustup update stable
