Pull to refresh

Rust 1.76.0: обновление совместимости ABI, получение имени типа из ссылки

Level of difficultyEasy
Reading time2 min
Views1.6K
Original author: The Rust Release Team

Команда 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>() для возврата строки, описывающей тип T, однако это требовало явного указания параметра типа. Было не всегда просто указать конкретный тип, особенно для безымянных типов, таких как замыкания или непрозрачные возвращаемые типы. Теперь type_name_of_val(&T) предоставляет возможность получить описательное название из любой ссылки на тип.


fn get_iter() -> impl Iterator<Item = i32> {
    [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<i32, 3>` is 6.

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



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


Проверьте всё, что изменилось в Rust, Cargo и Clippy.


Кто работал над 1.76.0


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


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


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


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

Tags:
Hubs:
Total votes 12: ↑12 and ↓0+12
Comments2

Articles