В этом докладе за 45 минут мы разберем ассемблер Go от внутреннего устройства до практической оптимизации — как понять "железо", на котором работает ваш код, и почему функции из стандартной библиотеки можно ускорить в 14 раз.
В этом уроке:
В итоге у тебя будет четкое понимание того, что происходит на самом низком уровне исполнения Go-программ: ты узнаешь, когда стоит жертвовать портативностью ради скорости и как писать по-настоящему эффективный инфраструктурный код
В этом уроке:
- История и корни: почему ассемблер Go базируется на архитектуре Plan 9 и как он связан с кросс-компиляцией.
- Терминология и примитивы: что такое мнемоники, как устроена быстрая память процессора (регистры) и зачем нужен регистр флагов для реализации циклов.
- Синтаксис и виртуальные регистры: разбор работы с FP (Frame Pointer), SB (Static Base Pointer) и PC (Program Counter) для управления аргументами и глобальными данными.
- Соглашения о вызовах: как Go передает данные в функции и как правильно возвращать результат согласно ABI.
- SIMD-оптимизации: как использовать векторные инструкции процессора для обработки данных пачками по 16 байт и почему это радикально быстрее обычного for range.
- Примеры на практике: пошаговый разбор реализации суммы слайса и поиска элементов (slices.Contains) на ассемблере.
В итоге у тебя будет четкое понимание того, что происходит на самом низком уровне исполнения Go-программ: ты узнаешь, когда стоит жертвовать портативностью ради скорости и как писать по-настоящему эффективный инфраструктурный код