GOGI> А что такое вообще "утиная типизация"? У каждой переменной/объекта есть тип. Он определяет правила интерпретации того набора битиков, который представляет этот объект внутри машины. Например, числа можно складывать, вычитать, умножать, делить и т.д. А строки можно сцеплять (конкатенировать), заменять в них буквы, удалять или расширять. В языках статического типа ты всегда заранее говоришь, какого типа (или набора типов) ты можешь хранить в переменной/объекте. Поэтому компилятор это дело знает ещё до выполнения программы и пытается отследить неправильные значения и поругаться. В интерпретаторах и некоторых системах не хотят/не могут сразу собрать информацию про всю программу. Например, чистые интерпретаторы работают построчно и просто не имеют возможности такое делать. Поэтому у каждой переменной/объекта есть тэг, который однозначно представляет его тип класс. Эти тэги позволюят во время исполнения сравнить-узнать тип переменной-объекта, пошарится по классу с целью найти нужный интерфейс-операцию-метод-процедуру-функцию-члена. Если он есть, то его вызывают. Если его нет, то выдают сообщение об ошибке. Это чистой воды полиморфизм в действии — когда одна и та же операция (точнее её обозначение) позволяет выполнить разные действия (плюс для строк и для чисел несут разную смысловую нагрузку), в зависимости от объекта или же наоборот, для совершенно разных объектов похожие действия (совершенно пофиг, что заплетать в список или дерево, т.к. и строка, и число в этом случае не сильно отличаются с точки зрения представления в списке или дереве). Вот это и будет
утиная охота утиная типизация. Т.е. она как бы есть, но сильно отложено. Как в том кино со Шварцем True Lie: "Next time, honey, duck!" — придёт время — тогда и спрячемся (посмотрим).