Почти невозможно избежать этих терминов, когда вы начинаете изучать новый язык программирования. Хотя все говорят о типе набора текста в любом языке, но новички редко придают этому значение. В этом посте я хотел бы кратко рассказать о типах, системе типов, статической и динамической типизации.

Что такое типы в программировании?

Тип определяет набор возможных значений и набор действий или операций, которые можно выполнять над объектом. Каждый объект имеет тип.

В целом существует два типа языковых реализаций. Некоторые языки имеют статический тип, а другие — динамический. Очень известными примерами статически типизированных языков являются C, C++, Java, примерами динамически типизированных языков являются Python, Ruby, Javascript и т.д.

Давайте посмотрим, что означает статическая проверка типов?

Статическая проверка типов проверяет входную программу на соответствие правилам типов, определенным в языке, после успешного синтаксического анализа программы (то есть в ней нет синтаксических ошибок). Это делается без каких-либо входных данных для проверяемой программы.
Целью статической проверки типов является раннее отклонение программ, которые могут вызвать ошибку, если они будут выполняться. Если программа не разберет, это также приведет к ошибке. Эта ошибка отличается от того, что мы получаем от проверки типов. Эта ошибка называется ошибкой анализатора или ошибкой синтаксиса. Средство проверки статического типа обычно выдает ошибку типа — что-то вроде операции с несовместимыми типами и т. д.

Все, что выполняет статическая проверка, является частью определения языка, и разные языки могут определять разные правила.

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

Динамическая проверка типов:

В динамическом языке проверка типов происходит во время выполнения. Многие языки, такие как python, ruby ​​и т. д., проверяют безопасность типов программы во время выполнения.
Как правило, это делается путем пометки каждого объекта во время выполнения тегом (то есть ссылкой на тип), который имеет все типы Информация. Эта информация используется для проверки ошибок типов.
Многие языки реализуют некоторую форму динамической проверки типов, даже если они имеют статическую проверку типов, потому что многие полезные функции и нетривиальные свойства трудно проверить статически. Хорошим примером этого является ниспровержение. Динамическая проверка необходима, чтобы убедиться, что операция безопасна или нет во время понижающего приведения.

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

Существуют ошибки, которые система типов обычно не предотвращает (например, логические ошибки). Например, если программа использует оператор сложения вместо умножения, это все еще допустимая программа, но не та, которая предполагалась.