UfoStation

Для чего годятся типы

Изображение: Для чего годятся типы

По мотивам главы из книги “Типы в языках программирования”, Бенджамин Пирса:

Выявление ошибок

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

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

Абстракция

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

Типы появляются в интерфейсах модулей (или близких по смыслу структур, таких, как классы); в сущности, сам интерфейс можно рассматривать как «тип модуля», содержащий информацию о возможностях, которые предоставляет модуль.

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

Документация

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

Более того, в отличие от описаний, спрятанных в комментариях, такая документация не может устареть, поскольку она проверяется при каждом прогоне компилятора. Эта роль типов особенно существенна в сигнатурах модулей.

Безопасность языков

Термин «безопасный язык» еще более расплывчат, чем «система типов». Неформально, впрочем, можно сказать, что безопасный язык ограждает программиста от совершения фатальных ошибок.

Немного уточняя интуитивное определение, можно сказать, что безопасный язык - это язык, который защищает свои собственные абстракции. Всякий язык высокого уровня предоставляет программисту абстрактный взгляд на работу машины.

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

Эффективность

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

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

Говоря о фронтенде, если команда использует JavaScript, то из списка пунктов выше в качестве доводов перехода, например, на TypeScript, можно использовать: Выявление ошибок, Абстракция, Документация

Нашли ошибку или опечатку? Предложите исправление