Я смотрю на это так: если вы можете работать естественным образом в статически типизированном языке, тогда стоит использовать статическую типизацию. Как правило, целью системы типов является предотвращение выполнения операций с неопределенной семантикой, например (string) "hello" + (bool) true
. Наличие дополнительного уровня безопасности, препятствующего выполнению этих операций, может стать хорошим способом предотвращения ошибок в вашем коде даже без обширных модульных тестов. То есть безопасность типов обеспечивает еще один уровень уверенности в семантической корректности вашего кода.
Но системы типов очень трудно понять правильно. Я не считаю , что это идеальный тип системы в природе на момент написания этой статьи. (Под «совершенной системой типов» я подразумеваю систему строгих типов, которая не требует подробных аннотаций кода, которая не генерирует ложноположительных ошибок типа и чьи ошибки типа легко понять программисту.) Кроме того, она может Трудно понять действительно хорошие системы типов, которые существуют. Когда я изучал Haskell, я не могу сказать вам количество неясных ошибок типов, которые я получил, пытаясь написать то, что выглядело (для меня) как правильный код. Обычно код на самом деле не был корректным (что говорит в пользу системы типов), но это заняло много времениработы, чтобы понять сообщения об ошибках от компилятора, чтобы я мог исправить основные проблемы. В ОО-языках вы можете в конечном итоге подумать: «Этот аргумент должен быть противоречивым с типом ввода, а не ковариантным!», Или (более вероятно) возвращаться к типам типов для выхода за пределы системы типов. Системы типов могут оказаться намного сложнее, чем вы думаете.
Что бы это ни стоило, я понимаю, что трудность в создании хороших систем типов является частью того, что побудило Гилада Брачу включить в Newspeak поддержку сменных систем типов.