[Перевод] Rust 1.76.0: обновление совместимости ABI, получение имени типа из ссылки
Команда Rust рада сообщить о новой версии языка — 1.76.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.76.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta
) или nightly (rustup default nightly
). Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Что стабилизировано в 1.76.0
Этот релиз относительно небольшой, но, как всегда, даже небольшие улучшения выливаются в нечто большее. Некоторые из изменений будут освещены в этом анонсе, другие же более нишевые — их можно найти в подробных примечаниях к выпуску.
Обновление совместимости ABI
Новая секция «Совместимость ABI» в документации по указателям на функции определяет ABI-совместимость сигнатур функций. В ней описана совместимость типов аргументов и возвращаемого типа, а также приведён список типов, которые сейчас считаются совместимыми в Rust. По большей части эта документация не добавляет каких-либо новых гарантий, а только описывает текущее состояние совместимости.
Единственным новым дополнением является то, что char
и u32
теперь гарантированно имеют совместимый ABI. У них всегда одинаковый размер и выравнивание, но теперь, в соответствии с документацией выше, они рассматриваются как эквивалентные даже в ABI вызова функций.
Получение имени типа из ссылки
В целях отладки в Rust 1.38 был добавлен any::type_name::
для возврата строки, описывающей тип T
, однако это требовало явного указания параметра типа. Было не всегда просто указать конкретный тип, особенно для безымянных типов, таких как замыкания или непрозрачные возвращаемые типы. Теперь type_name_of_val(&T)
предоставляет возможность получить описательное название из любой ссылки на тип.
fn get_iter() -> impl Iterator- {
[1, 2, 3].into_iter()
}
fn main() {
let iter = get_iter();
let iter_name = std::any::type_name_of_val(&iter);
let sum: i32 = iter.sum();
println!("The sum of the `{iter_name}` is {sum}.");
}
Теперь выведет:
The sum of the `core::array::iter::IntoIter` is 6.
Стабилизированные API
Прочие изменения
Проверьте всё, что изменилось в Rust, Cargo и Clippy.
Кто работал над 1.76.0
Многие люди собрались вместе, чтобы создать Rust 1.76.0. Без вас мы бы не справились. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.
Данную статью совместными усилиями перевели Browning, TelegaOvoshey и funkill.