Статья начинается с цитаты менеджера из Microsoft: “если можно быстро поправить код, чтобы он начал статически анализироваться и кол-во ошибок снизится на 10% - это просто сногсшибательно, мы такое обязательно возьмем”
authors study historical bugs in real world JS projects in GitHub
History + static type system that can be applied with few modifications
Error types: (detectable ^ public ^ patched)
Найти все баги, которые поправили (issue с ссылкой на commit)
Отфильтровать вручную (не новая фича, рефакторинг)
~4M багов, confidence level = 5%, поэтому мы анализировали 400 багов
48% патчей ~ 5строк кода
Оценка бага (может ли статическая типизация помочь) должна делаться не дольше 10 мин (анализ на предварительных исследованиях 78 ошибок)
Каждый баг проверялся на Flow, TypeScript
Некоторые ошибки - type-system undetectable
400: 59 (Flow), 58(TypeScript), 18: timeout,
18 разобрали -> 60 у Flow и у TypeScript
Flow: 1.7 токенов доп типов для детектирования ошибок, TypeScript: 2.4
Flow: выводит больше типов + более краткая нотация для nullable types
Результаты:
Из комментов:
В перле лучше система типов: нельзя сложить 3 + “0” и получить “30”
баги - это бонус. Больше плюсов дает удобство неявного документирования, соглашений, шаблонов проектирования, неявные инварианты