Вы сторонник статической типизации или динамической типизации в JavaScript или действительно другого языка?
Новое исследование, проведенное исследователями из Университетского колледжа Лондона (UCL) и Microsoft, провело тестирование нескольких продуктов — с довольно солидными результатами.
Исследователи протестировали Flow, статическую систему типов Facebook и TypeScript — конечно, от Microsoft — и обнаружили, что, по скромным подсчетам, каждый продукт может обнаружить примерно 15% ошибок, которые в противном случае могли бы привести к появлению зафиксированного кода.
Важность статической типизации по сравнению с динамической типизацией зависит от возможности проверки кода во время компиляции, а не во время выполнения — в этот момент часто бывает слишком поздно.
Как заметил технический представитель Microsoft Андерс Хейлсберг, когда вводил TypeScript еще в 2012 году , писать JavaScript на уровне приложений «сложно… [он] никогда не был предназначен для того, чтобы быть языком программирования для больших приложений», и поэтому ему не хватает статической типизации.
Как говорится во введении к отчету: «Сторонники статической типизации утверждают, что она обнаруживает ошибки перед выполнением, повышает эффективность выполнения, улучшает понимание программы и позволяет оптимизировать компилятор.
Его сторонники утверждают, что динамическая типизация хорошо подходит для создания прототипов, поскольку позволяет разработчику быстро писать код, работающий на нескольких примерах, без затрат на добавление аннотаций типов ».
Тем не менее, как показывают исследования, в конце концов, возможно, стоит приложить усилия, чтобы добавить аннотации типов.
Изучив общее количество закрытых вопросов для проектов JavaScript на GitHub — 3910969 по состоянию на август 2015 года — вместо этого исследователи набрали 400 изученных ошибок, протестированных на Flow и TypeScript, добавив аннотации типов (ниже).
Из 400 Flow успешно обнаружил 59 и TypeScript 58 при первом анализе, хотя после маркировки всех ошибок как обнаруживаемых или необнаружимых в Flow и TypeScript число возросло до 60 для каждого.
Принимая во внимание уровень доверия, конечный процент от 11,5% до 18,5%, со средним значением в 15%. Согласно данным, подавляющее большинство обнаруженных ошибок было сделано обеими программами, и только три с каждой стороны были предотвращены только с помощью Flow и TypeScript.
Исследование было направлено на то, чтобы сосредоточиться на эффектах аннотаций, а не на комментаторе — во многом так же, как хирургические испытания стремятся сделать выводы по операциям, а не по хирургу — при этом исследователи выбрали методы, позволяющие свести на нет «эффекты обучения» во время тестов.
В конечном счете, вопрос заключается в том, стоит ли сокращение ошибок на 15% за дополнительную работу в аннотации.
Как отметил Эдриан Колер в своем блоге, в котором оценивается исследование, более легкий подход Flow потенциально лучше подходит для сторонников динамической типизации, а TypeScript — лучший вариант для сторонников строгой типизации, пришедших из других языков.
Исследователи добавили, что результаты исследования были «обнадеживающими».