Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, samius, Вы писали:
V>>>>>Без поддержки перегрузки ф-ий не бывает ad hoc.
S>>>>приведение — ad hoc.
V>>>Приведение чего куда?
S>>Приведение типа значения к типу аргумента функции.
V>Из вики:
V>V>приведение типов не является истинным полиморфизмом: кажется, будто оператор принимает значения множества типов, но значения должны быть преобразованы к некоторому представлению до того, как он сможет их использовать.
Все верно. Но ты погляди, они приведение типов классифицируют как ad-hoс, однако при этом пишут "Действительно, ad hoc полиморфизм не является истинным полиморфизмом" за две строчки до твоей цитаты. Вряд ли ты это не заметил. И да, они истинным полиморфизмом называют параметрический.
V>>>Противоречишь сам себе.
V>>>Полиморфизм — это возможность подавать аргументы разного типа на одну и ту же ф-ию.
S>>ИИИИ?
V>И всё. Приведение аргументов происходит ВНЕ функции. Сама функция об это не знает.
Какое совпадение! Перегруженные функции тоже не знают о том, что компилятор вызываает каждую из них как мономорфную. Кстати, вот это твое выделенное определение полиморфизма полностью исключает ad-hoc, т.к. перегруженные функции формально разные, просто у них имя совпадает, да? Ну т.е. фиговое у тебя определение.
V>Твои примеры эквивалентны вот этому:
V>V>double d1 = 42;
V>Foo(d1);
V>double d2 = 42f;
V>Foo(d2);
V>
V>Потому что "под капотом" именно это и происходит.
V>Ad hoc есть, полиморфизма нет. ))
В широком понимании полиморфизма (не полиморфизма функции) — полиморфизм есть.
V>>>Это и есть определение "полиморфизма". Не ad hoc и не параметрического, а как такового.
S>>Я про пример вызова мономорфной функции с разными типами. По Стрэчи это ad-hoc, тк. работает для ограниченного множества типов и требует специального кода для приведения.
V>По-моему, ты злостно искажаешь Стрэтчи:
V>V>Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора).
V>В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов, но в скомпилированном коде фактически происходит вызов различных функций (см. перегрузка процедур и функций). Стрэчи назвал такую возможность «ad hoc полиморфизмом».
Все верно, но это не единственная возможность проявления ad hoc. Или Стрэчи где-то написал обратное?
V>Ну вот выше цитата по твоей ссылке.
И?
S>>Где-то месяц уже пытаешься
V>Я только 3 сообщения назад увидел, как ты это понимаешь. ))
V>В общем, тебе или стоит показать, что именно привело тебя к такому выводу:
V>"ограничение типа аргумента классом типа — есть ad-hoc полиморфизм".
Не знаю, где ты взял, может быть я так и выразился. Но само ограничение — не есть полиморфизм. Но является признаком его. Ограничение указывает на наличие специального поведения для некого типа. А специальное поведение — признак ad-hoc. Вообще, универсальным образом (не зная ничего о типе) можно сделать довольно немного вещей. Отобразнить сам в себя, положить в коробку, достать из коробки (кстати, это не касается C++). Ну и там найти длину списка. Все остальное (математические операции, сравнение и т.п.) требует специального знания о типе. Разве это не очевидно?
V>или уже сделать над собой усилие и поменять для себя смысл этого термина на общепринятый.
Я думаю что тебе надо сделать усилие.
V>Неужели сам не увидел, что из твоей формулировки получается бредовое следствие, а именно — объявление любой мономорфной ф-ии точно так же "есть ad hoc полиморфизм".
Ну, во-первых, не моей. Ты можешь прочитать об этом в той же русской вики. Во-вторых — да, для слаботипизированных языков мономорфные функции позволяют демонстрировать ad-hoc полиморфизм через приведение типа. И да, он не настоящий, не истинный. Истинным называется параметрический.
V>>>Если Стрэчи ошибается — я тоже легко это покажу.
S>>Наверное, так же легко.
V>Ес-но, если дашь цитату, из которой ты сделал вот тот свой вывод.
V>Ключевое-то слово было "если". ))
Точную цитату Стрэчи, я, конечно, не дам. Не смог найти его лекции. Но вот все, кто на него ссылаются, трактуют его единым образом. Возьми, хотя бы русскую вики.
S>>хорошо. Но если бы ты дал определение, а потом спустя 50 лет чел бы сказал что ты не прав, так не приведя альтернативного, то как бы ты отнесся к тому что ты бы стал не прав?
V>Я думаю, что ты сейчас безосновательно обвиняешь меня в неконструктивной критике, а это уже наезд. ))
V>Причем, наезд какой-то неожиданно ни к месту, ни на что не влияющий и никуда не ведущий.
V>И тем более нелепый, что все ходы-то записаны: у тебя не получится на этом форуме за все годы найти хоть один момент, где я бы, проявляя несогласие, не озвучивал бы альтернативного варианта.
Ты так и не привел классификации, которую используешь сам. Ни разу. Вот конкретно по этому вопросу. Нет нужды искать за годы.
V>>>ИМХО, ты всё еще пытаешься жульничать, хотя я уже несколько раз на это отвечал:
V>>>единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc.
S>>Жаль, количество твоих ответов не переходит в качество.
V>Тю, так это не наезд, а в трех соснах заблудился, что ле?
Так что ты называешь соснами? Ты вот не плутаешь, а классификацию так и не привел.
V>Ключевое выделил:
V>V>единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc
V>V>Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора). В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов...
V>Стрэчи назвал такую возможность «ad hoc полиморфизмом»
Ты отвечал вот на это "Но найди мне источник, где бы говорилось что ограничение типа аргумента классом типа — есть не ad-hoc, а параметрический." и промахнулся.
V>>>И сколько раз мне еще надо повторить, что признаком ad hoc является наличие более одной "версии тела" одной и той же ф-ии?
S>>Сколько угодно, пока ты не убедишь, что твоя классификация лучше чем у Стрэчи.
V>Это и есть классификация Стрэчи.
О, значит у тебя своеобразное понимание Стрэчи.
S>>Пока ни одного аргумента не было.
V>Прямое вранье.
Возможно я твои аргументы считаю водой...
V>>>И сколько раз мне надо повторять, что признаком параметрического полиморфизма является возможность подавать на одну и ту же "версию тела" аргументы разных типов?
S>>То же самое. Приведи классификацию, где это будет верно.
V>Привел неоднократно.
Так где же в твоей классификации место приведению типов?
S>>А то получается что ad-hoc через приведение типа — это уже параметрический.
V>Приведение типа является разновидностью ad hoc полиморфизма только по версии Карделли (по твоей же ссылке).
Ну как? А вики?
V>Стрэтч такого не задвигал.
Пруф
V>И вики тоже с Карделли НЕ согласна, хотя приводит его классификацию (в кач-ве сугубо ознакомительной информации, вестимо).
Не согласна?
V>>>Именно поэтому лямбда-исчисление называет ф-ией такую ф-ию, у которой строго один аргумент. А все остальные варианты (кроме 0-ля аргументов) в рамках этого исчисления сначала приводятся к варианту с 1-м аргументом, а потом уже идут остальные рассуждения.
S>>Давай рассуждать о функциях с одним аргументом — кортежем. Если так будет проще рассуждать.
V>Можно и так. Главное, чтобы ф-ия зависела от единственного типа — от типа единственного аргумента.
V>Т.е., кортеж — это тип, ОК.
V>Просто далеко не во всех языках кортеж аргументов — это тип или вообще есть "кортеж".
V>В большинстве мейнстримовых такой "кортеж" надо объявлять явно — структуру в Паскале, С, С#. И так же явно использовать затем, т.е. возвращаемся к одному аргументу. ))
Пусть к одному
S>>Но я не замечал что кто-то из нас (с тобой) пытается соскочить за счет числа аргументов.
V>Я и не обвинял тут никого в попытке соскочить через число аргументов.
V>Просто уточнял тот момент, что считать "перегрузкой ф-ии".
V>Итого, в исходном виде — это перегрузка такой ф-ии, у которой ровно один аргумент. Т.е. в лямбда-исчислении считается, что если мы объявляем "конкурирующую" специализацию ф-ии, то мы НЕ объявляем новую ф-ию, а добавляем специализацию к имеющейся. Прямо в этом месте и возникает ad hoc полиморфизм.
V>И да. Если уж начистоту... это не бог весть какой рокет-саенс, чтобы так долго упрямиться. ))
Да, завязывай упрямиться.