Преимущества статической типизации?

Я не утверждаю, что лучше всего использовать статическую типизацию, просто интересуюсь, какие преимущества она имеет на самом деле. Я думал, что они были:

  • более быстрый код
  • ловить некоторые ошибки рано

Глядя на мое собственное использование (в Java), я в основном работаю на компилятор. Когда он ловит ошибку типа, это обычно просто ошибка в тип, не ошибка кода — на самом деле, я не могу вспомнить, чтобы она когда-либо улавливала реальную ошибку (хотя, вероятно, она и есть).

Иногда я проходил через код для ужесточения типов — например, может быть набор классов, реализующих некоторый интерфейс I, и поэтому поле, которое может содержать любой из этих классов, имеет тип I. Но это может быть более -broad: иногда есть также некоторые поля, которые могут содержать только подмножество этих классов, поэтому систему типов можно сжать, создав новый интерфейс J, реализуемый только этим подмножеством классов, и этим полям присваивается тип J. «правильнее», невероятно утомительный, и довольно хрупкий, если что-то изменится.

Поэтому я считаю, что более быстрый код является основным преимуществом статической типизации в основных скомпилированных языках (Java, C #, C, C ++, Objective-C), а безопасность типов — это далеко не все, хотя есть и некоторые ниши, где безопасность типов является чрезвычайно полезно, например, языки ml для проверки интегральных схем. Я также слышал, что статическая типизация важна в базах данных.

Но я думаю, что есть еще одно преимущество:

  • документация

Документация в том, что вы можете посмотреть на метод и узнать, какие допустимые аргументы. А для автоматически генерируемых документов типы аргументов имеют гиперссылки на интерфейс и доступные реализации. Я не думаю, что это убийственное преимущество, но оно реальное.

Очевидно, что python, ruby ​​и т. Д. Прекрасно работают без статической типизации. Мне просто интересно, каковы его преимущества — как вы думаете? Какой у тебя опыт?

0

Решение

Система статических типов Java — невыразительный, устаревший подход к статической типизации, который почти на 40 лет устарел. Современная статическая типизация допускает богатую спецификацию инвариантов, которым должен удовлетворять код, с машиной, способной предоставить доказательства для этих инвариантов. Такие языки, как Haskell, Agda и ADA, иллюстрируют, как можно использовать типы для серьезной проверки программного обеспечения при относительно небольших затратах (по сравнению, например, с тестированием).

Таким образом, помимо очевидного преимущества наличия большего количества информации для компилятора, приводящей к более быстрому коду, чем это возможно без статических типов, факт заключается в том, что современные системы типов являются важными инструментами для автоматизированной проверки программного обеспечения. То, что вы просто не увидите, если единственная система типов, которую вы используете, это Java.

2

Другие решения

Используя статическую типизацию, вы указываете, какой тип данных следует ожидать в переменной. С нестатическим вы должны проверить тип данных перед выполнением обработки. Например, вы можете ожидать, что в вашем методе будет целое число, но ничто не мешает кому-то передать строку. Это открывает себя в мире боли ИМХО.

0

По вопросам рекламы [email protected]