-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathperformance.html
44 lines (44 loc) · 3.57 KB
/
performance.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Добро пожаловать отсюда</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<main>
<article>
<h1>PERFORMANCE</h1>
<p>У нас в JetBrains эксперимент проводили — переписали библиотеку miniz с Си на Rust (ну не С++, а Си, окей).</p>
<p>
miniz — это сейчас типа самая убероптимизированная inflate/deflate либа, быстрее zlib.
Соотв. inflate/deflate — это чистая числодробилка.
Есть массив байт на входе, нужно получить другой массив байт на выходе.
Только алгоритм реализуй.
Ну эта "убероптимизированность" miniz выражается в т.ч. в экстремально нечитаемом коде,
где все состоит из макросов со всякими нелокальными goto и прочим.
Полное адище.
</p>
<p>
На Rust переписыали буквально по одной функции — Rust с Си превосходно линкуется.
Т.е. БУКВАЛЬНО по одной функции переписывали, линковали и прогоняли тесты.
Т.е. один в один вся реализация и структура программы сохранены остались.
Как переписано было все, уже начали рефакторить.
Короче получился очень красивый и читаемый код, просто ни в какое сравнение с оригиналом.
Кроме того, благодаря расту получаем статически гарантируемый type/memory safety.
</p>
<p>
А дальше уже стали ЕГО ОПТИМИЗИРОВАТЬ ЕЩЁ.
Потому что код читаемый, понятно что как работает и зачем нужно — можно оптимизировать.
А когда у тебя все на макросах с goto и небезопасно — там хуй что поймешь и боишься что-то трогать.
В итоге у нас на 10-20% быстрее оригинала по разным бенчам.
ДА, НА РАСТЕ БЫСТРЕЕ ЧЕМ НА СИ.
А секрет прост — раст не меньше чем Си дает контроля за тем, какой там код будет сгенерен.
Ты пишешь код, и понимаешь, что у тебя в ассемблере будет в этом месте.
При этом type/memory/thread safety и вообще красивые абстракции.
</p>
</article>
</main>
</body>
</html>