Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

19-летняя девушка-разработчик ускорила serde_json на 32% и рассказала, как достигла этого

Новости

19-летняя разработчица Алиса Сиренева из Москвы ускорила библиотеку serde_json на языке Rust на 32%, оптимизировав обработку ошибок и парсинг строк.

9К открытий42К показов
19-летняя девушка-разработчик ускорила serde_json на 32% и рассказала, как достигла этого

Алиса Сиренева — 19-летняя разработчица из Москвы. В своем блоге она опубликовала пост, в котором рассказала, как, работая с библиотекой serde_json на языке Rust, она заметила значительное замедление при обработке ошибок.

Это вызвало у нее интерес к анализу и поиску оптимизаций, особенно после использования новой библиотеки #[iex], которая фокусируется на улучшении обработки ошибок.

Анализ показал, что путь обработки ошибок в serde_json в два раза медленнее успешного, и основной причиной этого стала функция position_of_index, ответственная за определение позиции строки и колонки в случае ошибки.

Решение через оптимизацию

Чтобы устранить узкое место, разработчица предложила заменить функцию position_of_index на более эффективную реализацию с использованием библиотеки memchr, которая задействует SIMD-инструкции для быстрого поиска символов.

Это привело к значительному ускорению обработки ошибок, практически устранив разницу в скорости между успешным и ошибочным путями. Эта оптимизация была одобрена и принята сообществом разработчиков serde_json.

Новые горизонты оптимизации

Воодушевленная успехом, девушка продолжила поиск возможностей для улучшений. Ее внимание привлекли циклы, ответственные за парсинг строк, которые также можно было оптимизировать с помощью SIMD и SWAR (SIMD Within A Register).

Хотя не все предложенные методы показали себя одинаково эффективно, использование SWAR оказалась более продуктивным и привело к значительным улучшениям производительности.

По итогу идеи, предложенные Алисой, показали прирост скорости работы serde_json до 32% в различных тестах, связанных с обработкой строк.

Эти изменения существенно повышают производительность библиотеки и положительно сказываются на многих проектах, использующих ее.

Следите за новыми постами
Следите за новыми постами по любимым темам
9К открытий42К показов