Форум
Компьютерные священные войны
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, alex_public, Вы писали: _>Здравствуйте, samius, Вы писали: _>>>Я вижу смысл в таком разделение по той причине, что имеются языки с разным видом полиморфизма на уровне исходного кода и на уровне машинного. Т.е. очевидно параметрически полиморфная функция на уровне исходного кода, может иметь ad hoc реализацию (причём программист может об этом даже не знать, как часто бывает например в том же Хаскеле) на уровне машинных кодов. S>>У исходного кода без execution model нет поведения, т.е. говорить не о чем, только об факте включения некоторого подтекста. Но при рассмотрении текста в совокупности с execution model, получается поведение и однозначная классификация полиморфизма по поведению. _>Мне вот интересно, а ты способен вообще начать формулировать свои мысли с помощью технической терминологии, а не бытовой? А то понятие "поведение" же можно интерпретировать как угодно. Например вот возьму я две одинаковые функции, определённые отдельно (перегрузка) для float и для double и скажу что у них абсолютно одинаковое поведение (скажем "сложение чисел с плавающей точкой"). С твоей позиции это получается параметрический полиморфизм? ))) _>>>Но я естественно не настаиваю на том, чтобы мои собеседники тоже пользовались подобным разделением. Это я просто пояснил причины такого подхода. S>>Спасибо, но что-то я замечаю некоторую тавтологию. Ты вводишь полиморфизм исходного и полиморфизм машинного лишь для того что бы иметь возможность говорить о том что функции ведут себя одним образом на уровне исходников и другим на уровне машинных кодов. А зачем тебе такое - ты не поясняешь. Чего ради-то? _>Я не ввожу разные полиморфизмы - классическое определение с безликим "код" вполне мне подходит. Я просто применяю его на двух отдельных уровнях размышления. _>>>Однако если ты пользуешься другим подходом, то его желательно сформулировать (что ты не можешь уже сколько сообщений подряд), чтобы мы могли понимать друг друга. S>>Я просто уже не знаю, как тебе говорить о поведении. Я тебе говорю о поведении - ты мне об исходниках. _>Потому что нет такого термина как поведение. Сформулируй свою мысль в технических терминах, а не так, чтобы его можно было интерпретировать как угодно, в зависимости от выгоды конкретной ситуации. _>>>Ну т.е. получается что всё же исходников достаточно? ))) Или как? ) S>>В совокупности с execution model - наверняка. _>Вот любишь ты использовать скользкие понятия. Вот скажи мне, например в случае Хаскеля в его "execution model" входит тот факт, что в языке есть только функции одного аругмента (а запись вроде как функции нескольких просто является упрощённой записью последовательности нескольких вызовов)? Или же там наоборот указано, что данные объявления последовательностей вызовов в реальности превращаются в классические функции многих аргументов? ) _>>>Т.е. ты тут хочешь сказать, что с твоей точки зрения вид полиморфизма функции apply нельзя определить без уточнения её параметров, правильно? S>>Не правильно. apply не вызывает никакого специального кода прямо или косвенно до тех пор, пока ей не подадут явно через параметр такой код прямо или косвенно. _>И? ) Так какой тогда полиморфизм у apply? ) S>>В то время, как equal_to и my_equal_to просто неотделимы от выполнения специального кода для каждого типа. _>Ну вообще то это не так даже для equal_to, т.к. мы можем определить единый для всех типов оператор равенства (понятно что смысла в подобном мало, но сам факт подобной возможности однозначен). А уж для my_equal_to это на 100% не верно, потому как в ней происходит вполне себе параметрически полиморфный вызов оператора равенства для типа eq и всё - что там происходит внутри этого оператора (разный код для разных типов или нет) my_equal_to не касается. _>>>Вообще то мы тут обсуждали как из данных цитат следуют твои сомнительные выводы насчёт всего стека вызова и т.п. Но если тебе хочется знать моё мнение, то под данное определение отлично подходят например перегрузки функций. S>>Но ты в упор не хочешь замечать что под фразу "function may execute different code for each type of argument" подходят функции, которые явно вызывают перегрузки функций, или ведут себя в точности как соответствующие перегрузки для каждого типа. Хорошо, только я бы не стал называть такую точку зрения "неплохо совместимой" с этими цитатами. Но ты можешь продолжать называть ее так, несмотря на мое мнение. Вобщем, нашли точку где наши знания английского явно расходятся (да и русского тоже, если фразу перевести). _>Ну да, интерпретировать "исполняют разный код для разных типов" в "ведут себя в точности как соответствующие перегрузки" - это очень забавно. ))) _>>>Ну раз так, то давай спрошу проще. Приведи примерчик реальной (т.е. не ту симпатичную константную функцию) параметрически полиморфной (согласно твоим критериям) функции. Ну чтобы мы наконец увидели как такое чудо выглядит... ) S>>[haskell] S>>Prelude> just a = Just a S>>Prelude> :t just S>>just :: a -> Maybe a S>>[/haskell] S>>Еще одну? _>Я надеюсь ты сам то понимаешь, что демонстрацией только подобных примеров ты ещё больше подчёркиваешь мою правоту? ) _>>>Вообще то сомнительная цитата (см. ниже), но если тебе очень хочется говорить именно в таких терминах, то никаких проблем нет - я могу сформулировать и в таких. И так правильная формулировка в таких терминах: функция my_equal_to ведёт себя как оператор равенства класса eq. S>>ты не договорил. Она ведет себя так же как eq - то есть по разному, в зависимости от типа. Иными словами - специальным образом (ad hoc). _>А как там внутри реализован eq - это уже его дело, про которое my_equal_to никак не в курсе. Т.е. я могу поменять отдельно реализацию eq как мне угодно и соответственно изменится поведение my_equal_to, даже если она уже собрана в отдельный бинарный модуль. Не видишь ничего общего с apply? ) _>>>Хы, вообще то cplusplus.com действительно давно протух и все знакомые с C++ программисты давным давно пользуются этим http://en.cppreference.com/w/cpp/string/char_traits/cmp (кстати можешь сравнить формулировку здесь и твою цитату) ресурсом. Но на нашу дискуссию данный факт никак не влияет, т.к. твои мелкие цепляния к формулировкам никак не меняют суть происходящего. ))) S>>Ощутимой разницы в формулировке не нашел, наверное и cppreferencce.com тоже протух. Итого, получается что твоей точке зрения способствует лишь весьма своеобразная трактовка фразы "function may execute different code for each type of argument". Все остальное (хаскельвики, википедия, cpp ресурсы) - по-твоему тухлое. Но ты - весь в белом. И это тоже не меняет суть происходящего, а есть сама суть. _>cplusplus.com протух не из-за этой фразы, а из-за несоответствия современному стандарту языка. Ну а насчёт попытки приписать мне мнение о тухлости остальных указанных ресурсов - это ты выдал очередное откровенное враньё. _>P.S. В начале дискуссии ты ещё выдавал в каждом новом сообщение какие-то новые аргументы или тезисы. В данном же находится уже ровно ноль новой информации - одни попытки выехать на вранье или демагогии. Я конечно умею участвовать в дискуссии и на таком уровне, но обычно подобно начинает быстро навевать скуку...
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …