Go-компилятор: оптимизации без мифов

Вопросы языкознания

GO
Оптимизация

Программный комитет ещё не принял решения по этому докладу

Целевая аудитория

Разработчики на Go уровня middle и выше, которые хотят понять, что происходит с их кодом «под капотом»

Тезисы

Про компилятор Go часто можно услышать: «он недостаточно умный, вот в Rust или C++ оптимизации — а в Go что?». Но так ли это на самом деле? Действительно ли Go-компилятор безнадёжен, или за простотой скрывается вполне серьёзный арсенал?

В докладе мы разберёмся, что на самом деле делает компилятор Go, и какие оптимизации происходят незаметно для разработчика:
* посмотрим, как выглядит полный flow оптимизаций;
* вспомним про классические приёмы: inlining, escape analysis;
* разберемся что такое SSA, как оно устроено и какую пользу он принес;
* оценим весь масштаб constant folding;
* поймем есть ли оптимизации циклов: loop unrolling, loop invariant code motion и vectorization;
* сравним наш компилятор с более агрессивными, например из C++;
* обсудим, почему часть оптимизаций так и не добавлена (или добавляется крайне осторожно).

В завершение обсудим: действительно ли компилятор Go так уж «глуп», и почему авторы языка могут намеренно сдерживать его развитие в сторону сложных оптимизаций.

Марк Чолак

Независимый эксперт

8 лет опыта коммерческой разработки на бэкенде в FoodTech-сегменте.
Молниеносно решает проблемы бизнеса и коллег.

Видео