PERFORMANCE

PERFORMANCE


У нас в JetBrains эксперимент проводили — переписали библиотеку miniz с Си на Rust (ну не С++, а Си, окей).

miniz — это сейчас типа самая убероптимизированная inflate/deflate либа, быстрее zlib. Соотв. inflate/deflate — это чистая числодробилка. Есть массив байт на входе, нужно получить другой массив байт на выходе. Только алгоритм реализуй. Ну эта "убероптимизированность" miniz выражается в т.ч. в экстремально нечитаемом коде, где все состоит из макросов со всякими нелокальными goto и прочим. Полное адище.

На Rust переписыали буквально по одной функции — Rust с Си превосходно линкуется. Т.е. БУКВАЛЬНО по одной функции переписывали, линковали и прогоняли тесты. Т.е. один в один вся реализация и структура программы сохранены остались. Как переписано было все, уже начали рефакторить. Короче получился очень красивый и читаемый код, просто ни в какое сравнение с оригиналом. Кроме того, благодаря расту получаем статически гарантируемый type/memory safety.

А дальше уже стали ЕГО ОПТИМИЗИРОВАТЬ ЕЩЁ. Потому что код читаемый, понятно что как работает и зачем нужно — можно оптимизировать. А когда у тебя все на макросах с goto и небезопасно — там хуй что поймешь и боишься что-то трогать. В итоге у нас на 10-20% быстрее оригинала по разным бенчам. ДА, НА РАСТЕ БЫСТРЕЕ ЧЕМ НА СИ. А секрет прост — раст не меньше чем Си дает контроля за тем, какой там код будет сгенерен. Ты пишешь код, и понимаешь, что у тебя в ассемблере будет в этом месте. При этом type/memory/thread safety и вообще красивые абстракции.

Report Page