Technologique
663 subscribers
144 photos
3 videos
42 files
949 links
Deeply involved developers about various aspects, tendencies & conceptions of programming technologies, FLOSS, Linux, security, cloud infrastructures & DevOps practices, distributed systems, data warehousing & analysis, DL/ML, web3, etc.
Author: @andrcmdr
Download Telegram
Technologique
Dynamic analysis for static typing in Python! Недавно инженеры Instagram открыли исходный код типизатора MonkeyType — инструмента для динамического run-time анализа программ на Python и автоматизации внедрения статических аннотаций типов в исходниках на Python…
PEP-484 (mypy) - расширение для gradual typing в CPython и PyPy.

PEP-484 (mypy) давно поддерживается не только официальным интерпретатором, но сторонними реализациями Python, такими как PyPy и Jython.
Но даёт ли статическая аннотация типа до фазы run-time значительно ощутимый прирост производительности исполнения байт-кода в run-time благодаря отсечению лишних проверок вывода типа и более быстрому динамическому связыванию объекта с типом? Или данный механизм помогает только в отладке сложных ситуаций преобразования типов обектов (type casting)?
Больше полугода, как мы стали масштабно использовать это расширение в разработке, вопрос оставался открытым.
Сейчас, спустя время, по метрикам мониторинга сервисов под реальной нагрузкой и на основе имеющегося опыта применения расширения можно делать определённые выводы.

В общем, как я и полагал PEP-484 позволяет только отлавливать сложные run-time ошибки типов статически определяя тип через аннотацию в run-time без необходимости его вывода в run-time.
Прироста производительности при интерпретации кода это не даёт, т.к. проверки соответствия связываемого с аннотируемым объектом приходящего типа всё равно происходят и без этого никак не обойтись, т.к. тип аннотированного объекта задан заранее и вписан в байт-код и в случае несоответствия приходящего типа аннотируемому будет вызвано run-time исключение, которое впрочем можно обработать, что упрощает отладку сужая окно выбора типов и указывая на корректность входящего принимаемого объектом типа.

Более того возможны также дополнительные задержки при исполнении кода на различных платформах из-за сопоставления и преобразования типов к размеру машинного слова, что сам интерпретатор без аннотаций типов выполняет быстрее и оптимальнее и аннотация в этом случае только помеха для оптимизированного механизма type casting в интерпретаторе.
Поэтому расширение PEP-484 (оно же mypy) стоит использовать в основном в отладочных целях.

http://doc.pypy.org/en/latest/faq.html#would-type-annotations-help-pypy-s-performance

https://bugs.jython.org/issue23973
https://bugs.jython.org/issue32227

Так же расширение помогает в выявлении логических ошибок типов в режиме flow-sensitive typing в IDE, например в PyCharm крайних версий.

Ранее, чем в Python, технология gradual typing была реализована в TypeScript и далее в Dart 1.xx (Dart 2 полностью статически типизированный язык с выводом типов в compile-time) и statical type checker'е Flow от Facebook для реализации gradual typing, как надстройки из дополнительных run-time проверок (диспетчеризации) типов, в языке JavaScript, поддержка flow sensitive typing была внедрена в Visual Studio Code и Atom IDE.

Интересный доклад по данной теме:
https://www.youtube.com/watch?v=_PPQLeimyOM

Предыдущий пост по теме:
https://t.me/technologique/1214

#digging
#compilers