Команда Rust рада сообщить о новой версии языка — 1.75.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.75.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta
) или nightly (rustup default nightly
). Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Что стабилизировано в 1.75.0
async fn
и возврат impl Trait
в трейтах
Как было объявлено на прошлой неделе, Rust 1.75 поддерживает использование async fn
и -> impl Trait
в трейтах. Однако этот выпуск поставляется с некоторыми ограничениями, которые описаны в анонсе.
Ожидается, что эти ограничения будут сняты в будущих версиях.
API для адресной арифметики в байтах
Раньше сырые указатели (*const T
и *mut T
) поддерживали в основном операции адресной арифметики, выражавшиеся в единицах T
. Например, <*const T>::add(1)
добавляет size_of::<T>()
байтов к адресу указателя. В некоторых случаях удобнее работать со смещениями указателей, выраженными в байтах, и эти новые API не требуют при вызове сначала приводить указатели к *const u8
/*mut u8
.
pointer::byte_add
pointer::byte_offset
pointer::byte_offset_from
pointer::byte_sub
pointer::wrapping_byte_add
pointer::wrapping_byte_offset
pointer::wrapping_byte_sub
Оптимизация компоновки кода в rustc
Компилятор Rust продолжает ускоряться: в этом выпуске добавлено использование BOLT в бинарных версиях, что в среднем на 2% ускоряет время работы в наших тестах. Этот инструмент оптимизирует компоновку кода библиотеки librustc_driver.so
, содержащей большую часть кода rustc, что позволяет лучше использовать кэш инструкций.
Кроме того, теперь мы собираем rustc с -Ccodegen-units=1
, что предоставляет больше возможностей для оптимизации в LLVM. Согласно нашим тестам, эта оптимизация принесла дополнительный выигрыш по времени в среднем на 1,5%.
В текущем выпуске эти оптимизации ограничены платформой x86_64-unknown-linux-gnu
, но мы ожидаем, что со временем они будут расширены и охватят больше платформ.
Стабилизированные API
Atomic*::from_ptr
FileTimes
FileTimesExt
File::set_modified
File::set_times
IpAddr::to_canonical
Ipv6Addr::to_canonical
Option::as_slice
Option::as_mut_slice
pointer::byte_add
pointer::byte_offset
pointer::byte_offset_from
pointer::byte_sub
pointer::wrapping_byte_add
pointer::wrapping_byte_offset
pointer::wrapping_byte_sub
Следующие API теперь можно использовать в контексте const
:
Ipv6Addr::to_ipv4_mapped
MaybeUninit::assume_init_read
MaybeUninit::zeroed
mem::discriminant
mem::zeroed
Прочие изменения
Проверьте всё, что изменилось в Rust, Cargo и Clippy.
Кто работал над 1.75.0
Многие люди собрались вместе, чтобы создать Rust 1.75.0. Без вас мы бы не справились. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.
Данную статью совместными усилиями перевели Browning, TelegaOvoshey и funkill.
MixSloboda
Зачем переводить три строчки кода с обилием ссылок на конкретику в оригинале, что за графоманство