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

В каждом проекте, который я начинал на языках без систем типов, я в конце концов начинаю изобретать систему типов во время выполнения. Может быть, термин «система типов» слишком силен; по крайней мере, я создаю набор валидаторов типа / диапазона значений, когда работаю со сложными типами данных, а затем чувствую необходимость параноика в отношении того, где типы данных могут быть созданы и изменены.

Я не знал Я дважды не думал об этом до сих пор. Как независимый разработчик, мои методы работали на практике над рядом небольших проектов, и нет никаких причин, по которым они перестали бы работать сейчас.

Тем не менее, это должно быть неправильно. Мне кажется, что я "неправильно" использую языки с динамической типизацией. Если мне придется изобрести систему типов и реализовать ее сам, С таким же успехом я могу использовать язык, который имеет типы для начала.

Итак, мои вопросы:

  • Существуют ли существующие парадигмы программирования (для языков без типов), которые позволяют избежать необходимости использования или изобретения систем типов?
  • ] Существуют ли другие общие рекомендации о том, как решить проблемы, которые статическая типизация решает в языках с динамической типизацией (без робкого переосмысления типов)?

Вот конкретный пример, который вы можете рассмотреть. Я работаю с датами и часовыми поясами в erlang (динамический, строго типизированный язык). Я обычно работаю с этим типом данных:

{{Y,M,D},{tztime, {time, HH,MM,SS}, Flag}}

... где {Y, M, D} - кортеж, представляющий действительную дату (все записи - целые числа), tztime и время - атомы, HH, MM, SS - целые числа, представляющие разумное 24-часовое время, и Флаг является одним из атомов u, d, z, s, w .

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

number < atom < reference < fun < port < pid < tuple < list < bit string

19
задан missingfaktor 21 December 2010 в 04:57
поделиться