LINUX.ORG.RU

«Утиная типизация» (Duck-typing) — зло или благо?

 duck-typing


3

8

Вылез из криокамеры и обнаружил оную. Вижу также много критики в ее сторону (стандартная: «Дракон может *специально* крякать как утка, чтобы попасть к вам в пруд».) Так всё же: это благо или зло (если рассматривать не только в контексте языков с динамической типизацией)?

★★

Последнее исправление: GreenBag (всего исправлений: 1)

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

С другой стороны не нужно придумывать замысловатые и сохраняющие непротиворечивость иерархии типов. Просто делаешь то, что тебе надо, не онанируя на корректные типы. Отлично для тестов, прототипирования, лаб в универе, performance non-critical приложений, не сложного веба.

С другой стороны если тебе скажут только duck-typing или он говно - это неадекваты, можешь их игнорить.

vertexua ★★★★★
()

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

А как в языках без динамической типизации будет утиная?

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

А как в языках без динамической типизации будет утиная?

Получается, что через «одно место». Вот в вики пример для Java есть с рефлексией.

GreenBag ★★
() автор топика
Ответ на: комментарий от vertexua

Отлично для тестов, прототипирования, лаб в универе, performance non-critical приложений, не сложного веба.

Ок, но как тогда с этим работает Google + python? Я думаю там Web посложнее «лаб в универе».

GreenBag ★★
() автор топика
Ответ на: комментарий от vertexua

С другой стороны не нужно придумывать замысловатые и сохраняющие непротиворечивость иерархии типов.

Не нужно лишний раз включать мозг. Это ли не счастье для программиста.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Иногда не нужно. Ты наверное не поверишь, но некоторые программы нужно сделать за 2 часа, а не сделать их поддерживаемыми. Пример - олимпиадная задача, прототип концепции, mockup UI

vertexua ★★★★★
()

Получается, что через «одно место». Вот в вики пример для Java есть с рефлексией.

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

А что касается языков с динамической типизацией, то тут, ИМХО, вопрос сводится к простому: «Можно ли верить в прямоту рук программистов?».

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)

«Дракон может *специально* крякать как утка, чтобы попасть к вам в пруд»

Именно в этом и сила. Кстати, если подумать, юниксы с концепцией «всё файл» это как бы тоже утиная типизация. В общем, стандартизированные интерфейсы взаимодействия (читай API) наше фсио.

true_admin ★★★★★
()

«Дракон может *специально* крякать как утка, чтобы попасть к вам в пруд»

кстати, всегда бесили такие аналогии.

1) никакой конкретики, на любой аргумент всегда можно сказать «ты не понимаешь метафоры» или «у тебя нет абстрактного мышления».

2) «Утка может быть сильнее дракона». Думайте сами что я хотел этим сказать.

Утиные, блин, истории...

true_admin ★★★★★
()

Ты главное слабую типизацию не используй и твои волосы будут радовать тебя много дольше, чем в противном случае.

anonymous
()

За использование «термина» «duck-typing» без предварительного пояснения, что имеется в виду, следует убивать (нет, пояснение, данное в хедпосте, не катит).

Динамическая типизация - зло.

tailgunner ★★★★★
()

бзло или злаго - в зависимости от madskillz стрелка в ногу

slackwarrior ★★★★★
()
Ответ на: комментарий от proud_anon

Можно ли верить в прямоту рук программистов?

Есть такие размеры проектов что там бы никто не справился

vertexua ★★★★★
()
Ответ на: Динамическая типизация - зло. от GreenBag

Странно слышать это от фаната Python.

Я не фанат Python и использую его только потому, что в этом вашем линупсе нет более приличных инструментов. Но не люблю, когда на Python возводят напраслину или когда фанаты ничуть не лучших инструментов начинают пиарить предметы своего поклонения за счет Python :)

tailgunner ★★★★★
()
Ответ на: комментарий от aedeph_

Ну, теоретически, на венде есть няшный F#, но я им не пользовался. Я живу в линупсе и не очень интересуюсь, что делается на соседних помойках %)

tailgunner ★★★★★
()

Дракон может *специально* крякать как утка, чтобы попасть к вам в пруд

Странная аналогия. Крякает же, мне от него ничего больше и не надо.

Kalashnikov ★★★
()
Ответ на: комментарий от tailgunner

F# можно попробовать использовать на линуксе через mono. Даже TCO работает, но ужасно медленно по сравнению с .NET. Зато наличествует правильный async в лучших традициях ФП.

dave ★★★★★
()
Ответ на: комментарий от dave

F# можно попробовать использовать на линуксе через mono.

По разным причинам я не хочу таскать с собой рантайм класса Mono или JVM (поэтому Scala отпадает); а на венде .NET вроде как встроенны, поэтому там F# был бы жизнеспособным вариантом.

tailgunner ★★★★★
()
Ответ на: комментарий от proud_anon

В OCaml и, если не ошибаюсь, в большинстве языков, производных от ML, есть утиная типизация. Так что динамическая типизация - не обязательное условие.

anonymous
()

Очень интересная реализация данного вопроса есть в Go. И мне она кажется превосходной.

urxvt ★★★★★
()
Ответ на: комментарий от O02eg

Шаблоны же.

Правду говорят что С++ никто не знает :)

urxvt ★★★★★
()
Ответ на: комментарий от Miguel

А можно с этого места поподробнее.

Некоторые альтернативно образованные и вывод типов называют «утиной типизацией».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Некоторые альтернативно образованные и вывод типов называют «утиной типизацией»

Вот такого я еще никогда не видел.

А можно еще подробнее?

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

Некоторые альтернативно образованные и вывод типов называют «утиной типизацией»

Вот такого я еще никогда не видел.

Смотри: «Утиная типизация» (Duck-typing) — зло или благо? (комментарий)

А можно еще подробнее?

О чем?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты про F# dynamic lookup которая никогда ни при каких обстоятельствах не duck typing? Или про статически типизированную скалу без уток и драконов?

О чем?

О выводе типов.

aedeph_ ★★
()
Ответ на: комментарий от true_admin

и вывод типов называют «утиной типизацией».

тебе просто термин не нравится :).

«Утиная типизация» - это не термин. Это образное сравнение, при помощи которого маленьким детям^W^Wбывшим жабистам пытались объяснить динамическую типизацию. Сравнение оказалось удачным, к сожалению.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Что заставило тебя подумать так?

Есть причины.

И что же ты хочешь узнать о нем?

Вывод типов, которой кому-то кажется дактайпингом.

aedeph_ ★★
()
Ответ на: комментарий от tailgunner

А к кому?

Это кто написал?

Некоторые альтернативно образованные и вывод типов называют «утиной типизацией».

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

Если ты хочешь поговорить о

aedeph_> Вывод типов, которой кому-то кажется дактайпингом.

то я дал тебе URL сообщения. Если хочешь чего-то другого - соберись с силами и объясни, что тебе нужно.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

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

aedeph_ ★★
()
Ответ на: комментарий от urxvt

Очень интересная реализация данного вопроса есть в Go. И мне она кажется превосходной.

Ссылку кинешь на почитать?

HerrWeigel ★★★★
()
Ответ на: комментарий от vertexua

В objc утиная типизация, можно вызывать методы по имени, если правильную сигнатуру знаешь. С производительностью все ок, не принципиально дольше виртуальных методов в С++. Наверняка даже быстрее jvm с jit, потому что проверять типы не нужно.

note173 ★★★★★
()
Ответ на: комментарий от aedeph_

Я хочу узнать, что ты подразумевал под той цитатой

Если ты с первого раза не понял, мне жаль.

Лучше считать, что URL ты мне просто не давал, иначе это прискорбно.

Кому лучше, чем прискорбно и что ты вообще несешь?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

на венде есть няшный F#

понимаешь, f# — это сочетание выразительности синтаксиса ml с мощью типовой системы .net. ну и еще с практичностью наворотов из хаскеля. не верь рекламе.

уж лучше даже тот же питон терзать, ей-богу.

anonymous
()
Ответ на: комментарий от tailgunner

что не так с F#?

ну, даже если посерьезнее отвечать, то все равно именно то, что я и сказал.

в ocaml единственный по-настоящему разумный кусок (в смысле, отличающий его от прочих ml-ей) — это его объектная система (с, кстати, на тему топика, крутой утиной типизацией, интегрированной по-человечески (!!!) в хиндли-милнеровскую типосистему), на которой всерьез приятно писать (если перебороть врожденную у любителей функциональщины идиосинкразию к ооп). как почти по этому поводу (люблю немного перевирать историю) сказал р. карделли, «This strongly contributes to ML's feel of care-free, quick-turnaround language, which is wrongly associated only with interpretive, untyped languages.» (http://lucacardelli.name/Papers/BasicTypechecking.pdf)

так вот в f# ее просто выкинули, засунув вместо нее традиционно уродский .net.

все популярные фп-фишки, насколько я гляжу, все равно попадают в c#, и в активе у f# остается только тяжелое наследие систем автоматических доказательств образца 70-х годов.

ну а в целом — мне просто сложно представить себе задачу, которую мне бы захотелось реализовать на f#. бррр.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.