Стабилизированы сдвиги 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