“Микро-оптимизация кода на Python” - Андрей Тихонов
Андрей Тихонов, Lead Software Engineer.
В докладе описывают существующие механики оптимизации кода компиляторами, а также варианты для самостоятельной реализации как вручную так, и с помощью автоматической работы с кодом.
сейчас в Quantori Занимаюсь разработкой с 2009 года Писал на C, C++, Java, Golang, Python В телеграме - @Tishka17 (чаты @ru_python, @ru_python_beginners и др.)
• Поговорим про автоматическую оптимизацию кода • Посмотрим на байткод CPython • Подвигаем код руками ради красивых графиков • Реализуем простенький оптимизатор на основе AST
Python 1 5 3 2 4 Парсинг и токенизация текста Генерация графа потока управления (CFG) Выполнение на виртуальной машине Построение синтаксического дерева (AST) Компиляция графа в байт- код
индексу data = [(i,i**2) for i in range(100)] def original(): res = 0 for item in data: res += item[0] + item[1] def ideal(): res = 0 for i, square in data: res += i + square
• Для обхода дерева используется паттерн “Посетитель” • Для модификации наследуемся от ast.NodeTransformer • Методы посещения элементов имеют имена вида visit_имякласса (visit_Return, visit_If) • Для обхода поддерева не надо забывать вывать generic_visit