Конференция завершена. Ждем вас на Russian Python Week в следующий раз!

Как сделать свою статическую проверку типов в python и зачем это может пригодиться Офлайн 2021

Доклад отклонён
Тезисы

Статический анализ на соответствие типов – отличный инструмент, но недоступен в Python в силу его динамической природы. Однако python позволяет изобрести этот велосипед самостоятельно, да ещё и решить с его помощью ряд архитектурных проблем.

При разработке системы моделирования экономики нефтяных месторождений возникла проблема – взрывной рост сложности системы и времени прохождения тестов. Ситуации могла бы помочь статическая типизация, но её нет, а в mypy проверяет слишком мало. Для решения этой проблемы вычисления были реорганизованы в виде направленного ациклического графа (DAG) где узлами являются вычислительные модули, а ребрами – потоки данных, но его перестройки были чрезвычайно трудозатраты, а в силу юности проекта требовались регулярно.
Тогда был применен следующий подход: связи между вычислительными модулями устанавливаются не непосредственно, а через инверсию управления и задаются аннотациями типов на их методах.
Таким образом в процессе инстанцирования системы и до запуска тестов или расчётов удается построить вычислительный граф, верифицировать его на наличие циклов, проверить что все входы модулей обеспечены соответствующими выходами. Кроме того, использование DAG позволяет произвести автоматическое распараллеливание вычислений, что позволяет полностью задействовать современные многоядерные процессоры.

Кирилл Кирсанов
EY

Программирую со школы. В институте увлекался 3Д моделированием и даже хотел стать художником, но пере-увлёкся написанием скриптов для 3Д пакета. С 4-го курса делал интернет-магазины на PHP, за тем платежные системы на Python. Так и попал в банк, где уговорил всех перейти на кафку и Avro, который в последствии пришлось усердно дорабатывать в opensource - fastavro. Параллельно со всем этим в аспирантуре занимался мобильной робототехникой и распределенными системами.

Kirill.Kirsanov@ru.ey.com