Технологии01.08.2026, 01:452 мин чтенияNEWS

GitHub ускорил case folding для поиска по коду до 45+ GiB/s на ядро

Инженеры GitHub представили Rust-крейт casefold с безусловным циклом и арифметикой в байтовом пространстве

Схема оптимизации case folding
КРАТКО

Что нужно знать

  • GitHub оптимизировал case folding до скорости более 45 GiB/s на одном ядре.
  • Ключевая идея — отказ от раннего выхода из цикла и полное устранение ветвлений.
  • Результат опубликован в виде Rust-крейта casefold.
ИсточникGitHub Blog ↗

Инженеры GitHub Александр Нойбек и Грег Орзелл опубликовали техническую статью, в которой рассказали, как ускорили операцию case folding — приведение текста к единому регистру для сравнения — до скорости более 45 GiB/s на одном ядре. Оптимизация применяется в поисковом движке Blackbird, который индексирует более 180 миллионов репозиториев и 480 ТБ исходного кода. Результат опубликован в виде Rust-крейта casefold.

Зачем нужен case folding

Case folding — это операция приведения текста к канонической форме, которая стирает различия в регистре. Она используется в поисковых системах, регулярных выражениях с флагом (?i), а также для регистронезависимых имён пользователей и хостов. В отличие от lowercasing, case folding не зависит от локали и контекста: например, греческая конечная сигма в нижнем регистре пишется как ς в конце слова и σ в остальных случаях, а турецкая I преобразуется иначе, чем английская. Case folding же всегда даёт одинаковый результат.

Ключевая идея: не останавливаться рано

Основной выигрыш в скорости для ASCII-текста дало удаление раннего выхода из цикла. Наивная реализация проверяет каждый байт и останавливается при первом не-ASCII символе, передавая управление Unicode-пути. Однако такая реализация работает со скоростью около 3 GiB/s на Apple M4, что более чем в 15 раз медленнее оптимальной.

Инженеры убрали все ветвления в цикле: вместо проверки каждого байта на не-ASCII они накапливают результат в аккумуляторе и проверяют его после цикла. Проверка диапазона A..=Z заменена арифметической операцией b.wrapping_sub(b'A') < 26, а условная запись — безусловной операцией *b |= u8::from(is_upper)

ВОПРОСЫ И ОТВЕТЫ

Коротко о главном

Что такое case folding?

Case folding — это операция приведения текста к канонической форме, которая стирает различия в регистре, чтобы строки, отличающиеся только регистром, считались равными.

Почему case folding важен для GitHub?

GitHub использует case folding в поисковом движке Blackbird, который индексирует более 180 миллионов репозиториев и 480 ТБ исходного кода. Каждый байт кода проходит через эту операцию.

Какой скорости удалось достичь?

На чистом ASCII скорость превышает 45 GiB/s на одном ядре, что более чем в 15 раз быстрее наивной реализации.

Где опубликован исходный код?

Исходный код опубликован в виде Rust-крейта casefold на GitHub.

Как подготовлен материал

Черновик был создан с помощью AI по указанному первоисточнику и опубликован в формате ITBlogs. Факты следует сверять с оригинальной публикацией.

С
АВТОР

Сергей

Администратор проекта

DISCUSSION

Комментарии · 0

Войдите, чтобы участвовать в обсуждении.