Здравствуйте, samius, Вы писали:
S>Но ты погляди, они приведение типов классифицируют как ad-hoс,
Я уже писал:
И вики тоже с Карделли НЕ согласна, хотя приводит его классификацию (в кач-ве сугубо ознакомительной информации, вестимо).
S>однако при этом пишут "Действительно, ad hoc полиморфизм не является истинным полиморфизмом"
Является прямо по определению полиморфизма.
Тут Карделли показал, что он нуб, заплутал малость.
V>>И всё. Приведение аргументов происходит ВНЕ функции. Сама функция об это не знает.
S>Какое совпадение! Перегруженные функции тоже не знают о том, что компилятор вызываает каждую из них как мономорфную.
Верно, каждая из них при ad hoc полиморфизме может быть и не полиморфной.
Но при этом можно рассуждать о зависимости ф-ии от типа аргумента ф-ии, а в теории типов только это и важно.
И напротив, в случае автоматического приведения типов аргумента у нас всегда остаётся одна и та же ф-ия, а не множество их, т.е. зависимости от типа аргумента нет. Т.е., нет полиморфизма прямо по определению.
S>Кстати, вот это твое выделенное определение полиморфизма полностью исключает ad-hoc, т.к. перегруженные функции формально разные, просто у них имя совпадает, да? Ну т.е. фиговое у тебя определение.
Перегруженные ф-ии — это формально несколько версий одной и той же ф-ии под разные типы аргумента.
Потому что у тебя нет никакого другого способа отличить одну версию от другой,
кроме как через тип аргумента.
Что и требуется для полиморфизма.
S>В широком понимании полиморфизма (не полиморфизма функции) — полиморфизм есть.
В "широком" — это не в IT-области? ))
Полиморфизмом еще называют "нечто", скажем в Физике и Химии, что может иметь разные св-ва, будучи при этом "одним и тем же".
В случае приведения типов у нас будут одни и те же св-ва, так как функция одна и та же.
V>>По-моему, ты злостно искажаешь Стрэтчи:
V>>V>>Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора).
V>>В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов, но в скомпилированном коде фактически происходит вызов различных функций (см. перегрузка процедур и функций). Стрэчи назвал такую возможность «ad hoc полиморфизмом».
S>Все верно, но это не единственная возможность проявления ad hoc. Или Стрэчи где-то написал обратное?
Стрэчи ввел сам термин "ad hoc полиморфизм", поэтому я отдаю право толкования этого термина ему.
Единственно что — я могу лишь уточнять, что в конкретном случае является собственно полиморфизмом, а что нет, согласно вот той ссылке на книгу по теории типов.
А так-то да, из начального термина обособился мем "ad hoc" и стал довольно-таки популярным даже без связи с "полиморфизмом". Но я и на это уже обращал твоё внимание, что речь тут идёт о разновидностях полиморфизма, а не о сленге среди программеров.
V>>Ну вот выше цитата по твоей ссылке.
S>И?
И то, что твоё словесное описание содержащегося по ссылке не сходится с её фактическим содержимым.
V>>В общем, тебе или стоит показать, что именно привело тебя к такому выводу:
V>>"ограничение типа аргумента классом типа — есть ad-hoc полиморфизм".
S>Не знаю, где ты взял, может быть я так и выразился.
Это твоя точная цитата, ты дважды просил меня опровергнуть именно такую твою формулировку.
S>Но само ограничение — не есть полиморфизм.
Бинго! ))
S>Но является признаком его.
Оно является классикой жанра — необходимым, но недостаточным условием.
Да и "необходимым" оно является лишь в системе, позволяющей только "типизированный параметрический полиморфизм".
А так-то многие примеры из мира Хаскеля откровенно глупы, увы.
Например, часто противопоставляют ф-ии с ограничениями ф-иям без ограничений. Якобы. Потому что часто авторы таких "противопоставлений" пихают пример работы со списком как якобы пример без ограничений. Какой кошмар. )) Список — это уже готовый концепт, это некий класс типов List и связанные с ним определения и ф-ии.
S>Ограничение указывает на наличие специального поведения для некого типа.
Ограничение указывает на обобщённый код, в котором будет использоваться типизированный концепт.
То бишь, ограничение — это ВСЕГДА параметрический полиморфизм.
Что в C#, что в Хаскеле.
S>А специальное поведение — признак ad-hoc.
Да я сразу понял ход твоих рассуждений.
Поэтому сразу же привел
все признаки ad hoc полиморфизма.
Нужны все сразу. По одному эти признаки не канают.))
S>Вообще, универсальным образом (не зная ничего о типе) можно сделать довольно немного вещей. Отобразнить сам в себя, положить в коробку, достать из коробки (кстати, это не касается C++).
Положить в коробку без ограничений нельзя.
Работает "структурный полиморфизм", однако.
S>Ну и там найти длину списка.
Найти длину списка без ограничений тоже нельзя. Работает параметрический полиморфизм.
S>Все остальное (математические операции, сравнение и т.п.) требует специального знания о типе. Разве это не очевидно?
Твои рассуждения очевидны.
Но беспощадность спора была обоснованной — спор-то терминологический. ))
V>>или уже сделать над собой усилие и поменять для себя смысл этого термина на общепринятый.
S>Я думаю что тебе надо сделать усилие.
V>>Неужели сам не увидел, что из твоей формулировки получается бредовое следствие, а именно — объявление любой мономорфной ф-ии точно так же "есть ad hoc полиморфизм".
S>Ну, во-первых, не моей. Ты можешь прочитать об этом в той же русской вики. Во-вторых — да, для слаботипизированных языков мономорфные функции позволяют демонстрировать ad-hoc полиморфизм через приведение типа.
Для Хаскеля определение обобщенной ф-ии в ограничениях и мономорфной отличается не сильно.
Поэтому, даже вот без этого приведения типов, получается так, что если в Хаскеле определили некую мономорфную ф-ию — то обязательно получаем ad hoс полиморфизм? ))
S>И да, он не настоящий, не истинный. Истинным называется параметрический.
Неправда, потому что формальные признаки классификации на это НЕ указывают.
В этом смысле писанина Карделли ничем не лучше праздных обсуждений на этом сайте.
Просто чел имеет мнение, но его постоянно поправляют. ))
V>>Ес-но, если дашь цитату, из которой ты сделал вот тот свой вывод.
V>>Ключевое-то слово было "если". ))
S>Точную цитату Стрэчи, я, конечно, не дам. Не смог найти его лекции. Но вот все, кто на него ссылаются, трактуют его единым образом. Возьми, хотя бы русскую вики.
ОК, давай трактовку.
Потому что последние 20 лет я видел тоже вполне однозначное толкование ad hoc полиморфизма и был малость удивлён, встретившись с твоей интерпретацией.
V>>Я думаю, что ты сейчас безосновательно обвиняешь меня в неконструктивной критике, а это уже наезд. ))
V>>Причем, наезд какой-то неожиданно ни к месту, ни на что не влияющий и никуда не ведущий.
V>>И тем более нелепый, что все ходы-то записаны: у тебя не получится на этом форуме за все годы найти хоть один момент, где я бы, проявляя несогласие, не озвучивал бы альтернативного варианта.
S>Ты так и не привел классификации, которую используешь сам.
Привел не раз.
Причем, местами совсем уж не раз. ))
S>Ни разу. Вот конкретно по этому вопросу. Нет нужды искать за годы.
Ну вот в каждом сообщении в этом споре, постоянно повторяя себя.
V>>Тю, так это не наезд, а в трех соснах заблудился, что ле?
S>Так что ты называешь соснами?
Это противоположное рокет-саенсу.
S>Ты вот не плутаешь, а классификацию так и не привел.
Я приводил определения как параметрического, так и ad hoc полиморфизма.
Приводил их многократно.
Вот даже в этом сообщении, на которое ты отвечаешь — минимум дважды было сказано что есть полиморфизм вообще и что есть ad hoc полиморфизм.
Я даже писал многократно, что полиморфизм обобщённого вида на ограничениях — это исключительно признак параметрического полиморфизма, причем именно "типизированного параметрического полиморфизма". Что есть типизированный и нетипизированный ПП — тоже уже пояснял.
S>Ты отвечал вот на это "Но найди мне источник, где бы говорилось что ограничение типа аргумента классом типа — есть не ad-hoc, а параметрический." и промахнулся.
Так я тебе сразу дал хорошую ссылку: "типизированный параметрический полиморфизм", "концепт".
Эта вся ссылка. Причем, по состоянию Интернета на 2017-й год — исчерпывающая.
По крайней мере в тех работах, в которых говорится о типизированном параметрическом полиморфизме, ОБЯЗАТЕЛЬНО будет присутствовать "ограничение" типа-аргумента тем или иным способом. Потому что это не "ограничение" нифига (корявая терминология дотнета), а именно что "типизация" концепта.
V>>>>И сколько раз мне еще надо повторить, что признаком ad hoc является наличие более одной "версии тела" одной и той же ф-ии?
S>>>Сколько угодно, пока ты не убедишь, что твоя классификация лучше чем у Стрэчи.
V>>Это и есть классификация Стрэчи.
S>О, значит у тебя своеобразное понимание Стрэчи.
Ты уже второе сообщение подряд жилишь, спекулируешь, устраиваешь словесный бесполезный пинг-понг.
В отличие от такого бестолкового времяпрепровождения я скопировал в сообщение, на которое ты отвечаешь, определения самого Стэчи. Изволь отвечать по процитированному, или давай свои цитаты или переставай паясничать.
V>>Прямое вранье.
S>Возможно я твои аргументы считаю водой...
Возможно, ты их не понимаешь или они тебе просто "неудобны".
Так бывает.
Особенно когда нечем опровергнуть.
V>>Привел неоднократно.
S>Так где же в твоей классификации место приведению типов?
А нету.
Потому что не относится к полиморфизму по определению полиморфизма.
V>>Приведение типа является разновидностью ad hoc полиморфизма только по версии Карделли (по твоей же ссылке).
S>Ну как? А вики?
Вики рассказывает о разных версиях, упоминает версию Карделли.
Что не так?
До тех пор, пока Вики не говорит "от своего лица" с неё взятки гладки.
V>>Стрэтч такого не задвигал.
S>Пруф
Пруф что не задвигал?
Если бы мы обменивались остротами, было бы смешно.
V>>И вики тоже с Карделли НЕ согласна, хотя приводит его классификацию (в кач-ве сугубо ознакомительной информации, вестимо).
S>Не согласна?
Конечно не согласна. ))
Когда согласна, пишет от первого лица.