Страницы

Утиная типизация обманывает

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

Это значит, что в правильном коде прямая связь между интерфейсом и воплощением всё равно существует, но присутствует лишь в голове, и, возможно, документации, но не в самом коде. Хорошая формальная система не должна прятать важные детали, а наоборот, должна выносить их в явную схему[0].

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


[0] Смотрите также заметку про ложную идею программирования с помощью языка, а не на языке.

2 комментария:

  1. Что насчет fsharp.org ? строгая статическая типизация с мощным автовыводом типов

    ОтветитьУдалить
    Ответы
    1. Мощный автовывод типов тоже по-своему плох для надёжного программирования так как явное указание типов даёт избыточность, через которую можно сверить полученное и намерения.

      Удалить