Стабилизированы сдвиги funnel_shl и funnel_shr вместе с unchecked-версиями
29.09.2026Методы funnel_shl и funnel_shr стабилизированы для всех беззнаковых целых, вместе с const-формами и unsafe-версиями unchecked_funnel_shl / unchecked_funnel_shr.
Что это за операция
Обычный сдвиг в Rust выбрасывает уходящие за границу биты и подставляет нули. Funnel-shift вместо этого «протаскивает» их на другой край: старшие биты, вытесненные вправо, появляются слева, и наоборот. Это ровно то, что делает аппаратная инструкция, поэтому замена цикла на один вызов обычно ускоряет код.
Зачем const и unchecked
const-формы позволяют считать битовые поля в компиляции. unchecked-версия пропускает проверку, что сдвиг меньше размера типа, — как и в обычных shl/shr, от вызывающего требуется гарантия корректности.
Автор мотивирует стабилизацию тем, что методы существуют почти год, некорректные варианты — несколько месяцев, они небольшие и спорные, а добиться сопоставимой производительности фолбэком трудно.
Доступны для u8, u16, u32, u64, u128 и usize. Автор — tgross35.
Оригинал
Stabilize funnel_shifts (including const)
Упоминаний: 1 · Просмотров: 3