GitHub выложил в открытый доступ Rust-библиотеку casefold для Unicode case folding и показал скорость в несколько гибибайт в секунду, включая около 3 ГиБ/с на Apple M4 для строк без преобразований. Для обычного пользователя это звучит как микрооптимизация, но для поиска по гигантским кодовым базам такие вещи решают, будет ли выдача приходить сразу или после паузы на кофе.
Речь не о «оптимизации кода», а о нормализации строк
В исходной версии статьи был сбой в самой сути: GitHub не «оптимизировал код с помощью case-folding». Компания ускорила операцию case folding — приведение текста к форме для регистронезависимого сравнения. Это базовый кирпич для поиска, индексации и сопоставления строк.
Здесь важна и вторая техническая поправка. Библиотека реализует simple case folding, то есть только простые преобразования символов один к одному. Поэтому пример со словом straße в исходном тексте был неточным: полное Unicode-преобразование для ß в ss сюда как раз не входит. Корректнее говорить о сценариях вроде HELLO → hello или ÜBER → über.
Как GitHub добился скорости
По описанию проекта, библиотека хранит таблицу преобразований в компактном виде: через bitmap-индекс по страницам Unicode и упакованные последовательности диапазонов. За счет этого код быстро отсекает символы, для которых folding не нужен, и не тратит время на лишние проверки.
Главная практическая идея проста: ASCII-строки обрабатываются почти как «дешевая память», а для многих символов вне ASCII библиотека избегает полной разборки и пересборки кодовых точек. В документации проекта говорится о скорости в несколько ГиБ/с, а для чистого ASCII приводится показатель свыше 40 ГиБ/с. На смешанных Unicode-строках цифры ниже, но все равно заметно выше наивных реализаций.
Связь с поиском кода и Blackbird
У GitHub это не лабораторное упражнение. Компания давно развивает собственный движок поиска кода Blackbird, потому что искать по сотням миллионов репозиториев готовыми решениями оказалось слишком дорого и слишком медленно. По данным GitHub, в индексе нового поиска раньше было почти 45 млн репозиториев и около 115 ТБ кода; общий масштаб платформы с тех пор вырос еще сильнее.
На таком фоне ускорение даже одной низкоуровневой операции быстро превращается в реальную экономию на CPU и задержках. Для команд, которые строят внутренний поиск, анализаторы кода, IDE-плагины или системы дедупликации, это полезный сигнал: иногда выигрыш приходит не из очередной модели ИИ, а из аккуратной работы с Unicode и памятью.
Значение для рынка разработки
Для русскоязычных команд здесь два вывода. Первый: Unicode-обработка по-прежнему легко ломается плохим переводом терминов и неверными упрощениями, а значит готовые тексты про «поиск без учета регистра» стоит читать с осторожностью. Второй: GitHub показал хороший инженерный паттерн — вынести внутреннюю оптимизацию в open source и дать рынку не презентацию, а рабочую библиотеку на Rust. Оригинал: docs.rs/casefold, репозиторий GitHub: github/rust-gems.
Следующий логичный шаг — посмотреть, начнут ли такие компактные Unicode-библиотеки массово появляться в поисковых движках, индексаторах и инструментах для статического анализа, где каждая миллисекунда обычно стоит дороже громкого анонса.