Википедия раньше говорила * о утином наборе:
В компьютерном программировании с использованием объектно-ориентированных языков программирования утиная типизация - это стиль динамической типизации, в котором текущий набор методов и свойств объекта определяет допустимую семантику, а не его наследование от определенного класса или реализации определенного интерфейса.
(* Примечание редактора: с тех пор, как этот вопрос был опубликован, статья в Википедии была отредактирована, чтобы удалить слово «динамический».)
В нем говорится о структурной типизации:
Система структурных типов (или система типов на основе свойств) - это основной класс систем типов, в которых совместимость и эквивалентность типов определяются структурой типа, а не явными объявлениями.
Он противопоставляет структурное подтипирование и утиную типизацию следующим образом:
[Структурные системы] контрастируют с ... утиной типизацией, при которой только часть структуры, к которой осуществляется доступ во время выполнения, проверяется на совместимость.
Однако мне кажется, что термин утиная типизация, по крайней мере, интуитивно включает в себя системы структурных подтипов. Фактически Википедия говорит:
Название концепции [duck-typing] относится к тесту на утку, приписываемому Джеймсу Уиткомбу Райли. который можно сформулировать следующим образом: «когда я вижу птицу, которая ходит, как утка, плавает, как утка, и крякает, как утка, я называю эту птицу уткой».
Итак, мой вопрос: почему я не могу назвать структурное подтипирование утиной типизацией? Существуют ли вообще языки с динамической типизацией, которые нельзя отнести к категории «утино-типизированные»?
Постскриптум:
Как кто-то назвал daydreamdrunk на reddit.com, поэтому красноречиво put-it "Если он компилируется как утка и звенит как утка ..."
Пост-постскриптум
Многие ответы, кажется, в основном просто перефразируют то, что я уже цитировал здесь, без решения более глубокого вопроса: почему бы не использовать термин утиная типизация для охвата как динамической типизации, так и структурной подтипизации? Если вы хотите поговорить только об утиной типизации, а не о структурных подтипах, просто назовите это так: динамический поиск членов. Моя проблема в том, что термин утиная печать ничего не говорит мне, это относится только к динамическим языкам.