Re[23]: IEquatable<T>
От: vdimas Россия  
Дата: 21.02.17 23:20
Оценка:
Здравствуйте, samius, Вы писали:

V>>>>Если язык позиционирует себя как статически-типизируемый, то обязано было бы.

S>>>Паскаль статически типизируемый. Попробуй на нем!
V>>Я еще в школе учился, когда уже попробовали:
S>Я тоже учился, но не заметил, что бы на нем пробовали то, что ты хочешь от статически-типизируемого языка сегодня.

Я сказал "хочу перегрузок" — ты мне показал Паскаль.
Я понял это как намёк на отсутствие в нем перегрузок ф-ий.
Изначально их там не было, но потом оч быстро добавили.
То, что называют Паскалем сегодня — это версия Объектного Паскаля или диалекта Дельфи.

Ну и какая разница, что там было в 86-м году когда речь о сейчас, спустя 30 лет?


S>>>IndexOf не параметрический метод

V>>Садись, два.
V>>
V>>public int List<T>::IndexOf(T item) {}
V>>public static int Array::IndexOf<T>(T[] array, T value)
V>>...
V>>

S>Я правильно понимаю, что ты мне продемонстрировал как бы "перегруженные" как бы "по первому аргументу" методы?

Я показал тебе методы, где среди прочих аргументов как аргумент подаётся тип.
Да, для экземплярных методов, ес-но, надо помнить о типе неявно передаваемого this.


S>Если да, то уже этого достаточно что бы быть ad-hoc по Стрэчи, Карделли, Пирсу, викам и фиг знает еще по чему.


Ты не показал этого ни по Стрейчи, ни по Кардели и уж тем более не по Пирсу.
Я тут рядом дал обзор главы про полиморфизм от Пирса:
http://www.rsdn.org/forum/flame.comp/6704915.1
Согласен тех самых "правил унификации", ни в одном из сценариев List<T>::IndexOf и Array::IndexOf<T> не пересекаются, т.е. не могут приниматься к рассмотрению одновременно. Поэтому, на них невозможен никакой ad hoc полиморфизм. ))

V>>Дотнет на сейчас не в силах. ОК.

V>>Не сомневаюсь, что рано или поздно станет в силах.
V>>Там нагнали нейтивных программистов, они наведут порядок в этом бардаке.
S>Давай отложим тему бардака в дотнетах, пока, по-крайней мере не согласуем терминологию.

Почему это? Я на пальцах объясняю, откуда в стандартных библиотеках дотнета берется рефлексия даже в таком тривиальном сценарии, как создание компаратора.

Почему я сказал о нейтивных программистах? — потому что они в таких случаях всегда морщатся как от кислого лимона и начинают разбираться — "а почему так, что за херь?"

Ну и быстро разберутся, ес-но. Там делов для исправления намного-намного меньше чем на введение Linq/Expression когда-то.


S>Если у тебя еще есть желание и возможность, лучше сосредоточиться на этом.


На чем сосредоточиться? ))
На твоём саботаже и откровенных поддевках в мой адрес?
На отсутствии делового подхода и несоблюдении общепринятых норм технических обсуждений с честным обменом аргументами/цитатами?
У нас тут цирк происходит по твоей сугубо инициативе.
Не одобряю.

==============
Тебе просто скучно по-жизни и ты так развлекаешься или что?
Причем, если тут у некоторых, бывает, чешется ЧСВ и они тут тратят усилия ради его буста (именно таких обычно замечал в плане странных манер ведения спора), то у тебя такое чесание не наблюдается. Выглядит как просто попытка убить время. И меня в это вовлекаешь...
Отредактировано 21.02.2017 23:24 vdimas . Предыдущая версия . Еще …
Отредактировано 21.02.2017 23:23 vdimas . Предыдущая версия .
Re[60]: «Собаку съел»
От: alex_public  
Дата: 22.02.17 07:39
Оценка:
Здравствуйте, samius, Вы писали:

_>>Ты похоже уже забыл, что я тебе уже писал. Для того, чтобы посмеяться над идеей каррирования в машинных кодах не надо ничего знать про какие-то реализации Хаскеля и т.п. Это смешно само по себе, если знать устройство современных процессоров (попробуй просто представить себе что потребуется сгенерировать компилятору и как будет выглядеть вызов всего этого скажем в случае функции 5-и переменных). И то, что ты по прежнему этого не понимаешь, прямо поражает. Ты вообще в курсе таких вещей как аппаратный стек, пролог и эпилог функции и т.п. базовые вещи, знакомые каждому студенту? )

S>Базовые вещи, которые должны быть знакомы каждому студенту, не вылетевшему в первый год — это кванторы. Вышка у нас входит в программу-минимум высшего образования даже для политологов. Тут у тебя опять использован квантор, хотя мне известно не так много специальностей, где бы читали про аппаратный стек, пролог и эпилог функции. Я думаю что оно весьма и весьма ограничено. Так, что ты снова демонстрируешь пробелы с пониманием кванторов.

Я думаю, что каждый читающий данный текст прекрасно понял, что я имел в виду студентов профильного этому форуму направления, которые с самого начала в обязательном порядке получают базовые знания (а большего и не требуется, чтобы не совершить ошибку, которую сделал ты) о функционирование современных ЦПУ. Более того, я думаю что и ты это прекрасно понял, а все твои смешные попытки придраться к формулировкам являются всего лишь следствием попытки скрыть проявившуюся некомпетентность.

Да, и кстати насчёт "вышки". Я что-то не помню ни одного технического факультета (во всяком случае там, где учился я, в МГУ) в котором был бы такой предмет. У нас помнится был мат.анализ, несколько видов алгебр, несколько видов геометрий, дифуры, интуры с вариационным исчислением, тфкп, тер.вер со статистикой, функциональный анализ, теория групп и т.п. А предмет с названием "высшая математика" — это разве что у гуманитариев каких-нибудь может быть, которым требуется только обзорный курс. И то, что ты знаешь именно его наводит на определённые мысли — может ты как раз из тех самых политологов?. ))) Тем более что и стиль ведения дискуссии у тебя явно подходящий: для тебя важнее не суть, а формальность. )

_>>Ну т.е. ты так и не можешь представить своё определение понятия "поведение функции"? Хотя при этом говоришь что все его понимают одинаковым образом (так каким же тогда?)...

S>А для чего мне представлять именно свое определение? Свое понимание (и не только мое) этого вопроса — я уже излагал. Указывал, где посмотреть на специфику для C++. Мало? Извини, определения поведения функции в аппаратных стеках у меня нема.

Если ты используешь некое понятие (причём не просто используешь, а оно у тебя является центром всех твоих утверждений), то будь любезен его точно определить. Пока за всю эту длинную дискуссию ты не осилил привести подобного определение, не смотря на многочисленные предложения это сделать. Соответственно пока ты этого не сделаешь, любые твои формулировки с использованием данного понятия можно пропускать не читая.

_>>Глупости какие. Если убрать библиотечный сахар (реализуемый через МП) в C++ варианте и синтаксический сахар (посмотреть на внутреннюю реализацию классов типов) Хаскеля, то легко увидеть, что в обоих вариантах эти функции в реальности выглядят как-то так:

_>>
_>>bool my_equal_to(void* a, void* b, bool (*f)(void*, void*))
_>>{
_>>    return f(a, b);
_>>}
_>>

_>>а значение f автоматически подставляется компилятором (по определению работы Хаскеля/по МП коду в конструкторе eq в варианте C++) в точках вызова my_equal_to в соответствие с передаваемыми там типами. Никакого принципиального отличия от обсуждаемой тут apply эти реализации не имеют. Но при этом они у тебя ad hoc полиморфные, а apply параметрически полиморфная.
S>Видишь, реализации! А в терминах поведения они существенно отличаются. apply ведет себя неотличимо от любой (здесь я использовал квантор всеобщности, если ты когда-нибудь с ними таки ознакомишься) функцции f. А my_equal_to ведет себя неотличимо от eq для каждого типа, для которого определен eq. А значит, специальнымм образом на ограниченном наборе. Но ты гляди в аппаратный стек, что бы не ошибиться. Оттуда, наверное, вообще все функции полиморфными кажутся

1. В одних твоих сообщения было указано, что apply — это параметрически полиморфная функция, без всяких оговорок. А в других (вот как сейчас например) ты пишешь, что поведение apply полностью определяется функцией f (которая естественно может быть и ad hoc). Так как с тобой вести нормальную дискуссию, если у тебя позиция скачет от одного сообщения к другому? )
2. Определение eq лежит вне определения функции my_equal_to. Соответственно если ты привлекаешь его устройство для определения свойств my_equal_to, то это значит что ты постулируешь тот факт, что для определения вида полиморфизма некого кода абсолютно недостаточно ни знания исходного кода (и даже вместе с моделью вычисления), ни знания машинного кода. А требуется знание внутреннего устройства некого постороннего кода. Правильно?
3. Рассмотрим такой простейший код:
auto my_equal_to2=[](bool x, eq a, eq b) {return x||a==b;};
auto f=[](bool x, eq a, eq b) {return my_equal_to2(true, a, b);};
auto g=[](bool x, eq a, eq b) {return my_equal_to2(false, a, b);};

Я правильно понимаю, что с твоих "поведенческих" понятий функция f получается параметрически полиморфной, а функция g ad hoc полиморфной? И соответственно тогда вопрос, какой с твоей точки зрения является функция my_equal_to2? )
Re[24]: IEquatable<T>
От: alex_public  
Дата: 22.02.17 07:51
Оценка:
Здравствуйте, vdimas, Вы писали:

_>>Кстати, в библиотеки алгоритмов D static if частенько используется для оптимизации. Типа есть универсальная версия алгоритма для диапазона с последовательным доступом и местами её ускорение, если переданный диапазон поддерживает произвольный доступ.

V>Ну, в плюсах тоже оптимизатор может выкинуть лишний код, но! Этот выкинутый код всё-равно будет валидным.

Это не те оптимизации. В случае описанных мною не получится делать валидный код в двух вариантах (потому что у контейнера с последовательным доступом тупо нет метода [] — не скомпилируется). В текущем C++ подобное делалось просто двумя вариантами функции. Это в принципе нормальное рабочее решение (и даже как ты и говорил в чём-то более ясное). Однако в случае значительного объёма одинакового кода в обоих вариантах это приводит к обширной копипасте и раздуванию исходника.

V>А в твоём примере одна из выкидываемых частей ф-ии получается невалидной, потому что нельзя одновременно вернуть *t и t. Я это имел ввиду, когда говорил про "режет глаз".


Угу, я потому и привёл именно этот пример, т.к. он демонстрирует главное отличие от обычного рантаймового if. )
Re[22]: IEquatable<T>
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.02.17 20:04
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


S>>Я спросил о том, что же мешает компилятору указывать тип компарера пока "ограничения генериков не сделают частью типа".


V>Мешает непреодолимое стирание типа, что надо лезть в рефлексию.

А если "ограничения генериков сделали частью типа", то в рефлексию по-твоему лезть не надо?

Кстати, между делом. Вот ты говоришь что рефлексии пипец. Как быть с полиморфной рекурсией без рефлексии? Что там в C++ с полиморфной рекурсий времени выполнения?


V>>>Тут аналогично — это просто перегрузка ф-ий по типу аргумента.

S>>Ясно, т.е. не смертельно.

V>Ес-но. Копипаста и вперёд. Раньше же жили как-то вообще без генериков и ничего.

Уж если раньше без генериков было ничего, то отсутвие перегрузки по ограничению типа не сильно отталкивает.
Re[43]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.02.17 20:07
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


S>>Ну да, ты же присвоил терминологию.


V>Да. Я тут появился специально морочить тебе голову.

V>Ты в прошлой жизни за что-то провинился, вот теперь наказан. ))
Фанат реинкарнации?


V>>>Тут не надо быть оракулом, чтобы предположить, что у тебя непрофильное образование.

S>>По образованию я математик, специальность — компьютерная математика.

V>Во-первых, я знаю эту специальность, у меня на ней племянница учится.

V>Там изучают больше вычислительные алгоритмы.
Я ведь вроде не говорил, что мне читали полиморфизм 4 семестра?
Просто интересно, если ты считаешь что КМ непрофильная, то что тогда по-твоему профильное?

V>Статистика, тервер, по основам алгебры сурово гоняли (я ей помогал готовиться к экзаменам) и т.д. и т.п.

V>Мы это тоже изучали, ес-но, просто в чуть меньшем "погружении".
Это заметно
V>Зато другое изучали с чуть большим, ес-но.

V>Во-вторых, ты в любом случае должен знать эту пословицу:

V>

V>Теория без практики мертва, практика без теории слепа.

V>Т.е. одно без другого не работает.
Это ты к чему задвинул?

V>А ты что делаешь? — отказываешься рассматривать сами определения терминов и просишь меня растолковать исключительно примеры к ним.

Разве? Это ты уперся в какое-то определение с русской вики, аналога которому нет в обозримом инете. И отказываешься рассматривать остальные.
Примеры? так если ты определение не понял, может быть пример к нему даст просветление...

V>Причем, в отрыве от сопровождающих их определений и даже прямо игнорируя целые абзацы из определений!

V>Нифига себе...
V>Это ж как раз вторая часть пословицы получается.
Так первая у тебя? Тебе же примеры не подошли.
Re[45]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.02.17 20:12
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


V>>>Не останавливайся на достигнутом. Откажись считать себя программистом.

S>>На том основании, что ты не распарсил слово "function" в определении, которое пытался выдать за определение полиморфизма? Это несерьезное основание.

V>Я давал тебе самое серьезное из всех современных обоснований — это HoTT.

V>В нем полиморфизмом называются "зависимые функции".
В нем нет упоминания слова polymorphism. Но куча упоминания polymorphic function. Т.е. даже не читая, можно предположить что ты читал невнимательно.

V>Иерархию я приводил:

V>http://www.rsdn.org/forum/flame.comp/6700097.1
видел, комментировал.

V>Аналогично по чуть менее серьезному, что всё еще самому серьезному среди оставшихся — это книга Пирса "Типы в ЯП".

V>Там он посвящает понятию "полиморфизма" целую главу V.
V>В этой главе о полиморфизме рассматриваются:
V>* Типизация на основе ограничений
V>* Унификация (принцип Хиндли-Милнера, когда компилятором выбирается более специализированная перегрузка в текущем контексте, т.е. более специализированное имеет преимущество над менее специализированным; в С++ похожие правила вывода с некоторыми ограничениями на сценариях автоприведения типов + конструкторов).
V>* определение полиморфизма (Система F) —
V>

V>Система F является расширением типизированного лямбда-исчисления.

Вот кстати, из Пирса

The term polymorphism refers to a range of language mechanisms that allow a single part of a program to be used with different types in different contexts (§23.2 discusses several varieties of polymorphism in more detail).

Если Пирсу не доверяешь, так и скажи. А то "тут не гляди, тут гляди"!

V>* параметричность

V>Тут Пирс ничего не говорит сам, а отсылает к целому списку авторов:
Как не говорит сам? Я устал цитировать то что он "не говорит сам". И на этой неделе уже тоже цитировал.

V>

V>Понятие параметричности было введено Рейнольдсом (Reynolds, 1974, 1983). В дальнейшем ее, наряду с родственными понятиями, исследовали ...

V>Что пишут о работах Рейнольдса (сами работы доступны как картинк-сканы, приводить их неудобно, поэтому рецензия):
V>http://www.ccs.neu.edu/home/matthias/369-s10/Transcript/parametricity.pdf
V>

V>In this paper Reynolds formalizes the idea of data abstraction: what does it mean for a client of a data type to be insensitive to the type’s choice of internal representation? An abstract data type exposes a type name and a set of operations on the type, and a client program respects the abstraction if it cannot make a concrete observation to distinguish different choices of representation for the abstract type.
V>...
V>The main generalization introduces the polymorphic λ-calculus for defining functions that are parametrically plymorphic in the sense of Strachey.

V>Reynolds extends the relational semantics to polymorphic types, reestablishes the abstraction theorem, and argues that the theorem captures Strachey’s informal notion of parametricity.

V>Переведу на русский, чтобы опять кто-то не запутался:
V>

V>Основным обобщением вводится полиморфное лямбда-исчисление для определения функций, которые являются параметрически полиморфными в смысле Стрейчи.

V>Рейнольдс расширяет реляционную семантику до полиморфных типов, восстанавливает теорему абстракции, и утверждает, что теорема фиксирует (покрывает) неофициальное понятие Стрейчи о параметричности.

О, видишь, "полиморфные типы". А ты говорил, что нет таких.

V>Так вот. Полиморфное лямбда-исчисление — это Система F, которая, в свою очередь, является расширением типизированного лямбда-исчисления.


V>Круг замкнулся.

V>Т.е., PP по Пирсу — это развитие типизированного лямбда исчисления (типизация на основе ограничений). ТЧК.
Это демагогия чистой воды. Пирс дал определение ПП и я его приводил. ПП по Пирсу — это именно оно. А вот то что ты написал — это "ПП по Пирсу с колокольни vdimas-а". Буду уверен в этом до тех пор, пока не приведешь цитату Пирса с тем, что ты ему приписываешь.
Re[61]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.02.17 21:17
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, samius, Вы писали:


_>>>Ты похоже уже забыл, что я тебе уже писал. Для того, чтобы посмеяться над идеей каррирования в машинных кодах не надо ничего знать про какие-то реализации Хаскеля и т.п. Это смешно само по себе, если знать устройство современных процессоров (попробуй просто представить себе что потребуется сгенерировать компилятору и как будет выглядеть вызов всего этого скажем в случае функции 5-и переменных). И то, что ты по прежнему этого не понимаешь, прямо поражает. Ты вообще в курсе таких вещей как аппаратный стек, пролог и эпилог функции и т.п. базовые вещи, знакомые каждому студенту? )

S>>Базовые вещи, которые должны быть знакомы каждому студенту, не вылетевшему в первый год — это кванторы. Вышка у нас входит в программу-минимум высшего образования даже для политологов. Тут у тебя опять использован квантор, хотя мне известно не так много специальностей, где бы читали про аппаратный стек, пролог и эпилог функции. Я думаю что оно весьма и весьма ограничено. Так, что ты снова демонстрируешь пробелы с пониманием кванторов.

_>Я думаю, что каждый читающий данный текст прекрасно понял, что я имел в виду студентов профильного этому форуму направления, которые с самого начала в обязательном порядке получают базовые знания (а большего и не требуется, чтобы не совершить ошибку, которую сделал ты) о функционирование современных ЦПУ. Более того, я думаю что и ты это прекрасно понял, а все твои смешные попытки придраться к формулировкам являются всего лишь следствием попытки скрыть проявившуюся некомпетентность.

Спешу тебя обрадовать, то что ты думаешь — не соответствует действительности. Я читал твой текст, но не понял.
А думаешь ли ты заодно что КАЖДЫЙ читающий данный текст так же понял, какие именно направления ты считаешь профильными этому форуму? Ну так, на всякий случай. В этот раз можно не думать — я не понял. Объяснишь?
А то я почти 20 лет думал что закончил профильный ВУЗ и где-то с 2005-го думал что направление было профильное этому форуму. Но вот беда, откуда не ждал, функционирование вообще никаких ЦПУ в моем ВУЗе не читали, и я по твоей милости оказался гуманитарием...

_>Да, и кстати насчёт "вышки". Я что-то не помню ни одного технического факультета (во всяком случае там, где учился я, в МГУ) в котором был бы такой предмет. У нас помнится был мат.анализ, несколько видов алгебр, несколько видов геометрий, дифуры, интуры с вариационным исчислением, тфкп, тер.вер со статистикой, функциональный анализ, теория групп и т.п. А предмет с названием "высшая математика" — это разве что у гуманитариев каких-нибудь может быть, которым требуется только обзорный курс.

Ровно об этом я и написал. Но и в обзорном курсе используются кванторы. Разве, может, без значков.
_>И то, что ты знаешь именно его наводит на определённые мысли — может ты как раз из тех самых политологов?. ))) Тем более что и стиль ведения дискуссии у тебя явно подходящий: для тебя важнее не суть, а формальность. )
Знаю именно его? Кто тебе сказал что я знаю именно его? Определения ты, видимо, так же внимательно читаешь.

Кстати, там, где я учился (УРГУ, матмех) ты бы мат.анализ не сдал с таким отношением к кванторам.

_>>>Ну т.е. ты так и не можешь представить своё определение понятия "поведение функции"? Хотя при этом говоришь что все его понимают одинаковым образом (так каким же тогда?)...

S>>А для чего мне представлять именно свое определение? Свое понимание (и не только мое) этого вопроса — я уже излагал. Указывал, где посмотреть на специфику для C++. Мало? Извини, определения поведения функции в аппаратных стеках у меня нема.

_>Если ты используешь некое понятие (причём не просто используешь, а оно у тебя является центром всех твоих утверждений), то будь любезен его точно определить. Пока за всю эту длинную дискуссию ты не осилил привести подобного определение, не смотря на многочисленные предложения это сделать. Соответственно пока ты этого не сделаешь, любые твои формулировки с использованием данного понятия можно пропускать не читая.


Вот ты и попался. Судя по тому что ты пишешь, ты и пропускал как раз не читая все формулировки, где использовались не вполне точно определенные понятия. Карделли (may behave, works uniformly), Пирс (behave the same)...

S>>Видишь, реализации! А в терминах поведения они существенно отличаются. apply ведет себя неотличимо от любой (здесь я использовал квантор всеобщности, если ты когда-нибудь с ними таки ознакомишься) функцции f. А my_equal_to ведет себя неотличимо от eq для каждого типа, для которого определен eq. А значит, специальнымм образом на ограниченном наборе. Но ты гляди в аппаратный стек, что бы не ошибиться. Оттуда, наверное, вообще все функции полиморфными кажутся


_>1. В одних твоих сообщения было указано, что apply — это параметрически полиморфная функция, без всяких оговорок. А в других (вот как сейчас например) ты пишешь, что поведение apply полностью определяется функцией f (которая естественно может быть и ad hoc). Так как с тобой вести нормальную дискуссию, если у тебя позиция скачет от одного сообщения к другому? )

Я не заметил скачка. Вот у тебя map чистая или нет? Или ты будешь скакать в зависимости от того, что в нее передать?

_>2. Определение eq лежит вне определения функции my_equal_to. Соответственно если ты привлекаешь его устройство для определения свойств my_equal_to, то это значит что ты постулируешь тот факт, что для определения вида полиморфизма некого кода абсолютно недостаточно ни знания исходного кода (и даже вместе с моделью вычисления), ни знания машинного кода. А требуется знание внутреннего устройства некого постороннего кода. Правильно?

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

Вижу, тебя в МГУ не научили еще и термину "постулат".
Или спортсмен, или блатота. Или МГУ уже не тот, как мне говорили.

_>3. Рассмотрим такой простейший код:

_>
_>auto my_equal_to2=[](bool x, eq a, eq b) {return x||a==b;};
_>auto f=[](bool x, eq a, eq b) {return my_equal_to2(true, a, b);};
_>auto g=[](bool x, eq a, eq b) {return my_equal_to2(false, a, b);};
_>

_>Я правильно понимаю, что с твоих "поведенческих" понятий функция f получается параметрически полиморфной, а функция g ad hoc полиморфной? И соответственно тогда вопрос, какой с твоей точки зрения является функция my_equal_to2? )
f не получается ПП, уже потому что "ad-hoc polymorphic function will only work on a finite set of different and potentially unrelated types". Понятие "work" определить?
g — AH, my_equal_to2 — AH.
Re[62]: «Собаку съел»
От: alex_public  
Дата: 23.02.17 04:40
Оценка:
Здравствуйте, samius, Вы писали:

S>А думаешь ли ты заодно что КАЖДЫЙ читающий данный текст так же понял, какие именно направления ты считаешь профильными этому форуму? Ну так, на всякий случай. В этот раз можно не думать — я не понял. Объяснишь?

S>А то я почти 20 лет думал что закончил профильный ВУЗ и где-то с 2005-го думал что направление было профильное этому форуму. Но вот беда, откуда не ждал, функционирование вообще никаких ЦПУ в моем ВУЗе не читали, и я по твоей милости оказался гуманитарием...

Это форум для программистов. Это вполне себе определённая специальность со своим кодами (их штук десять разных) и факультетами. И я могу легко ткнуть тебе в плане любого такого факультета указанный предмет (где разбирают устройство современных компьютеров).

Естественно в данную профессию можно прийти не только таким путём — при хорошей фундаментальной подготовке можно легко добрать программистскую специфику с помощью самообразования. Только вот это надо обязательно сделать на всех уровня, начиная с самого базового, чтобы потом не выглядеть посмешищем среди коллег.

S>Кстати, там, где я учился (УРГУ, матмех) ты бы мат.анализ не сдал с таким отношением к кванторам.


Так, давай я тебе один раз объясню ситуацию, чтобы ты больше ни к кому не приставал с подобными глупостями. Возьмём для примера тот же твой недавний косяк. Так вот, я легко могу написать на этом форуме фразу типа "реализация каррирования в машинных кодах — это абсолютно не реально на современных процессорах" и никто (ну вот разве что кроме тебя) не начнёт писать к ней возражения, потому что прекрасно поймут что я хотел сказать. Хотя с точки зрения формальной логики эта фраза очевидно неверна, т.к. кто угодно (и я сам в том числе) может элементарно написать реализацию подобного. Только вот она будет работать с такой эффективностью, что это априори будет выкидывание своего времени на помойку. И мне не требуется уточнять все подобные очевидные мелочи, потому что здесь собрались в большинстве своём профессиональные инженеры, которым интересно обсудить суть каких-то проблем, а не поиграться в формальную логику.

Да, и кстати, если бы я вдруг изъявил желание пообсуждать формальную логику на данном форуме, то далеко не факт, что ты бы осилил участие в такой дискуссии (ты способен записать свои мысли с помощью Coq?)... )))

_>>Если ты используешь некое понятие (причём не просто используешь, а оно у тебя является центром всех твоих утверждений), то будь любезен его точно определить. Пока за всю эту длинную дискуссию ты не осилил привести подобного определение, не смотря на многочисленные предложения это сделать. Соответственно пока ты этого не сделаешь, любые твои формулировки с использованием данного понятия можно пропускать не читая.

S>Вот ты и попался. Судя по тому что ты пишешь, ты и пропускал как раз не читая все формулировки, где использовались не вполне точно определенные понятия. Карделли (may behave, works uniformly), Пирс (behave the same)...

Если честно, этот балаган с бесконечными отмазками уже сильно надоел. Ответь ради разнообразия хоть один раз на прямой вопрос: мы увидим на этом форуме твоё определение понятия "поведение функции" или нет?

_>>1. В одних твоих сообщения было указано, что apply — это параметрически полиморфная функция, без всяких оговорок. А в других (вот как сейчас например) ты пишешь, что поведение apply полностью определяется функцией f (которая естественно может быть и ad hoc). Так как с тобой вести нормальную дискуссию, если у тебя позиция скачет от одного сообщения к другому? )

S>Я не заметил скачка. Вот у тебя map чистая или нет? Или ты будешь скакать в зависимости от того, что в нее передать?

Ну значит у тебя что-то со зрением или с логикой) Т.к. вот прямо в процитированном тексте оно отчётливо видно.

_>>2. Определение eq лежит вне определения функции my_equal_to. Соответственно если ты привлекаешь его устройство для определения свойств my_equal_to, то это значит что ты постулируешь тот факт, что для определения вида полиморфизма некого кода абсолютно недостаточно ни знания исходного кода (и даже вместе с моделью вычисления), ни знания машинного кода. А требуется знание внутреннего устройства некого постороннего кода. Правильно?

S>Неправильно. Я ничего не постулирую. Это только ты делаешь предположение что я постулирую.

Это конечно всё замечательно, но мне как-то наскучило уже коллекционировать виды твоих убогих отмазок. Ты по делу то (про необходимость знания внутреннего устройства постороннего кода) что-то скажешь или продолжишь делать вид, что не заметил вопроса? )

S>Вижу, тебя в МГУ не научили еще и термину "постулат".

S>Или спортсмен, или блатота. Или МГУ уже не тот, как мне говорили.

Я тебя сейчас ещё даже больше шокирую))) Кроме красного диплома и аспирантуры в МГУ в комплект входит ещё и например престижная международная премия (точнее это называлось стипендия — это всё же было в те времена, когда я ещё не ушёл целиком в бизнес), совмещённая со стажировкой за границей. Ну что, основы твоего забавного мировоззрения уже окончательно рухнули? )))

_>>3. Рассмотрим такой простейший код:

_>>
_>>auto my_equal_to2=[](bool x, eq a, eq b) {return x||a==b;};
_>>auto f=[](bool x, eq a, eq b) {return my_equal_to2(true, a, b);};
_>>auto g=[](bool x, eq a, eq b) {return my_equal_to2(false, a, b);};
_>>

_>>Я правильно понимаю, что с твоих "поведенческих" понятий функция f получается параметрически полиморфной, а функция g ad hoc полиморфной? И соответственно тогда вопрос, какой с твоей точки зрения является функция my_equal_to2? )
S>f не получается ПП, уже потому что "ad-hoc polymorphic function will only work on a finite set of different and potentially unrelated types". Понятие "work" определить?
S>g — AH, my_equal_to2 — AH.

У функции f набор допустимых типов не конечный (мы можем вводить сколько угодно новых и они будут спокойно с ней работать).

И я надеюсь что ты не пытаешься бредово интерпретировать данное определение, как требование работы со всеми возможными типами? ) Это ты уже попытался сделать в процессе данной дискуссии и кончилось это очевидным твоим "На счет всех возможных — я, видимо, и правда загнул. Пардон". Хочешь повторить по новому кругу? )
Re[24]: IEquatable<T>
От: samius Япония http://sams-tricks.blogspot.com
Дата: 23.02.17 17:08
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


V>Я сказал "хочу перегрузок" — ты мне показал Паскаль.

V>Я понял это как намёк на отсутствие в нем перегрузок ф-ий.
V>Изначально их там не было, но потом оч быстро добавили.
V>То, что называют Паскалем сегодня — это версия Объектного Паскаля или диалекта Дельфи.
Ох, ты от дотнета хотел перегрузок по ограничению типа, мотивируя это тем, что он позиционирует себя как статически-типизируемый.
И я сказал про Паскаль, полагая что ты поймешь, что речь идет не просто о перегрузках, а о перегрузках по ограничению типа. Почему ты к статически-типизированному Паскалю предъявляешь совершенно другие хотелки?

V>Ну и какая разница, что там было в 86-м году когда речь о сейчас, спустя 30 лет?

Ну если нет разницы, то тем более! Или смысл термина статически-типизируемый прогнулся за 30 лет?

V>>>
V>>>public int List<T>::IndexOf(T item) {}
V>>>public static int Array::IndexOf<T>(T[] array, T value)
V>>>

S>>Я правильно понимаю, что ты мне продемонстрировал как бы "перегруженные" как бы "по первому аргументу" методы?

V>Я показал тебе методы, где среди прочих аргументов как аргумент подаётся тип.

V>Да, для экземплярных методов, ес-но, надо помнить о типе неявно передаваемого this.


S>>Если да, то уже этого достаточно что бы быть ad-hoc по Стрэчи, Карделли, Пирсу, викам и фиг знает еще по чему.


V>Ты не показал этого ни по Стрейчи, ни по Кардели и уж тем более не по Пирсу.

V>Я тут рядом дал обзор главы про полиморфизм от Пирса:
V>http://www.rsdn.org/forum/flame.comp/6704915.1
Видал
V>Согласен тех самых "правил унификации", ни в одном из сценариев List<T>::IndexOf и Array::IndexOf<T> не пересекаются, т.е. не могут приниматься к рассмотрению одновременно. Поэтому, на них невозможен никакой ad hoc полиморфизм. ))
На них двух как на паре методов — верно. Но они AH полиморфны вне зависимости от существования друг друга. Каждая сама по себе.

S>>Давай отложим тему бардака в дотнетах, пока, по-крайней мере не согласуем терминологию.


V>Почему это? Я на пальцах объясняю, откуда в стандартных библиотеках дотнета берется рефлексия даже в таком тривиальном сценарии, как создание компаратора.

Ну, не слишком-то он и тривиальный, учитывая MakeGenericType и полиморфную рекурсию.

V>Почему я сказал о нейтивных программистах? — потому что они в таких случаях всегда морщатся как от кислого лимона и начинают разбираться — "а почему так, что за херь?"

Морщиться — они могут, ага.

V>Ну и быстро разберутся, ес-но. Там делов для исправления намного-намного меньше чем на введение Linq/Expression когда-то.

А ну так к какой версии ждем исправлений?

S>>Если у тебя еще есть желание и возможность, лучше сосредоточиться на этом.


V>На чем сосредоточиться? ))

V>На твоём саботаже и откровенных поддевках в мой адрес?
V>На отсутствии делового подхода и несоблюдении общепринятых норм технических обсуждений с честным обменом аргументами/цитатами?
V>У нас тут цирк происходит по твоей сугубо инициативе.
V>Не одобряю.

О, придется напомнить тебе о твоем деловом подходе и нормах технических обсуждений (не по хронологии)
* Карделли назвал нубом
* Упомянул что не нашел взаимопонимания со всеми, с кем общался на эту тему (похоже, и не только). Я уж не помню, кем ты кого называл.
* Уперся в книгку, которая не только не дает понятие полиморфизма, но и вообще описывает лишь полиморфные функции без упоминания других форм. Книга так же не упоминает терминны AH/PP, по теме которых ты ввязался в дискуссию. На основе выводов из книги (сделанных тобой), у тебя опять оказались все мудаки, кто рассматривал AH/PP по отдельности от всего остального.
* Вырыл откуда-то полумашинный перевод Карделли, нашел в нем какие-то фразы, аналогов по смыслу которым нет в оригинале, вперся в них, доказывая то, о чем Карделли не писал.
* Нашел в википедии пару тезисов, происхождение которых не удается проследить (аналогов нет в англоязычной версии и у авторов, ссылки по которым в той же википедии). Где же рассмотрение тобой остальных определений? Ну и примеры, в википедии, конечно, дебил очередной писал.
* Барбаре Лисков приписал чуть ли не создание типизированного полиморфизма, видимо, не удосужившись заглянуть в ее работу по абстрактному типу данных.

Конечно, это не все, но самое яркое.

И все это, очевидно, по сугубо моей инициативе

V>==============

V>Тебе просто скучно по-жизни и ты так развлекаешься или что?
V>Причем, если тут у некоторых, бывает, чешется ЧСВ и они тут тратят усилия ради его буста (именно таких обычно замечал в плане странных манер ведения спора), то у тебя такое чесание не наблюдается. Выглядит как просто попытка убить время. И меня в это вовлекаешь...
У меня зачесалось "в интернете кто-то не прав". Я его немного почесал, а там и цирк приехал.

Я пока еще не определился, чего жальче, времени на продолжение или уже потраченных усилий на попытки что-нибудь объяснить.
Re[63]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.17 19:43
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, samius, Вы писали:


S>>А то я почти 20 лет думал что закончил профильный ВУЗ и где-то с 2005-го думал что направление было профильное этому форуму. Но вот беда, откуда не ждал, функционирование вообще никаких ЦПУ в моем ВУЗе не читали, и я по твоей милости оказался гуманитарием...


_>Это форум для программистов. Это вполне себе определённая специальность со своим кодами (их штук десять разных) и факультетами. И я могу легко ткнуть тебе в плане любого такого факультета указанный предмет (где разбирают устройство современных компьютеров).

Если можешь и легко, то уж ткни уж... УрГУ мат-мех 1997 выпуск. Сам-то как считаешь, мог ли я на специальности "компьютрная математика" пропустить такой предмет в программе?

_>Естественно в данную профессию можно прийти не только таким путём — при хорошей фундаментальной подготовке можно легко добрать программистскую специфику с помощью самообразования. Только вот это надо обязательно сделать на всех уровня, начиная с самого базового, чтобы потом не выглядеть посмешищем среди коллег.

Я думаю что если бы я изучал особенности всех машин и процессоров, с которыми работал (от MK, EC, Поиск до современных), то я лишился бы чего-то другого. И не приобрел бы ничего, что мешало бы тебе посмеяться надо мной по какому-нибудь другому поводу. Весьма сомнительный актив. Тем более, что к AH/PP не имеет никакого отношения.

_>Так, давай я тебе один раз объясню ситуацию, чтобы ты больше ни к кому не приставал с подобными глупостями. Возьмём для примера тот же твой недавний косяк. Так вот, я легко могу написать на этом форуме фразу типа "реализация каррирования в машинных кодах — это абсолютно не реально на современных процессорах" и никто (ну вот разве что кроме тебя) не начнёт писать к ней возражения, потому что прекрасно поймут что я хотел сказать. Хотя с точки зрения формальной логики эта фраза очевидно неверна, т.к. кто угодно (и я сам в том числе) может элементарно написать реализацию подобного.

Т.е. ты сам признаешь, что с точки зрения формалььной логики пишешь то, с чем сам не согласен же? Ну дык а чего ты от меня хочешь с точки зрения формальной логики? С неформальной — обращайся к кому-нибудь еще.

_>Только вот она будет работать с такой эффективностью, что это априори будет выкидывание своего времени на помойку. И мне не требуется уточнять все подобные очевидные мелочи, потому что здесь собрались в большинстве своём профессиональные инженеры, которым интересно обсудить суть каких-то проблем, а не поиграться в формальную логику.

Так иди и обсуждай суть каких-то проблем. Чего ты тут-то застрял в определениях? От того, как ты их понимаешь (верно или неверно), никакие инженерные проблемы не решатся и не возникнут.

_>Да, и кстати, если бы я вдруг изъявил желание пообсуждать формальную логику на данном форуме, то далеко не факт, что ты бы осилил участие в такой дискуссии (ты способен записать свои мысли с помощью Coq?)... )))

Если ты сможешь мотивировать меня к этому — то я выслушаю твои предложения.

_>>>Если ты используешь некое понятие (причём не просто используешь, а оно у тебя является центром всех твоих утверждений), то будь любезен его точно определить. Пока за всю эту длинную дискуссию ты не осилил привести подобного определение, не смотря на многочисленные предложения это сделать. Соответственно пока ты этого не сделаешь, любые твои формулировки с использованием данного понятия можно пропускать не читая.

S>>Вот ты и попался. Судя по тому что ты пишешь, ты и пропускал как раз не читая все формулировки, где использовались не вполне точно определенные понятия. Карделли (may behave, works uniformly), Пирс (behave the same)...

_>Если честно, этот балаган с бесконечными отмазками уже сильно надоел. Ответь ради разнообразия хоть один раз на прямой вопрос: мы увидим на этом форуме твоё определение понятия "поведение функции" или нет?

Уже отвечал. И даже не отмазывался и не вилял. А направил тебя открыть спеку C++. Мы увидим на это форуме результат открывания тобой спеки?

_>>Я не заметил скачка. Вот у тебя map чистая или нет? Или ты будешь скакать в зависимости от того, что в нее передать?


_>Ну значит у тебя что-то со зрением или с логикой) Т.к. вот прямо в процитированном тексте оно отчётливо видно.

А в этом прямо процитированном тескте очевидно что ты ушел от вопроса о чистоте map функции.

S>>Неправильно. Я ничего не постулирую. Это только ты делаешь предположение что я постулирую.


_>Это конечно всё замечательно, но мне как-то наскучило уже коллекционировать виды твоих убогих отмазок. Ты по делу то (про необходимость знания внутреннего устройства постороннего кода) что-то скажешь или продолжишь делать вид, что не заметил вопроса? )

Используй определения, Люк! Не надо выдумывать ничего нового про знания внутреннего устройства постороннего кода.

S>>Вижу, тебя в МГУ не научили еще и термину "постулат".

S>>Или спортсмен, или блатота. Или МГУ уже не тот, как мне говорили.

_>Я тебя сейчас ещё даже больше шокирую))) Кроме красного диплома и аспирантуры в МГУ в комплект входит ещё и например престижная международная премия (точнее это называлось стипендия — это всё же было в те времена, когда я ещё не ушёл целиком в бизнес), совмещённая со стажировкой за границей. Ну что, основы твоего забавного мировоззрения уже окончательно рухнули? )))

А отчего должно было рухнуть мое мировоззрение? Одна из моих бывших сотрудниц имела красный диплом МГУ. Гоняли ее из отдела в отдел как наказание. Ничего не могла, даже переводить техническую литературу. Остепенилась где-то в КБ, занималась санацией компьютеров.
Другой мой знакомый краснодипломник МГУ на лекции по COM заявил "нахрена мне этот COM, если я и так могу любой метод вызвать из фортрана?".
Ты не шибко выделяешься из этого ряда.

_>У функции f набор допустимых типов не конечный (мы можем вводить сколько угодно новых и они будут спокойно с ней работать).

Ты можешь так же вводить бесконечно много новых перегрузок, которые будут работать "одинаковым образом", и тем самым выйти за твое понимание определения и вообще сказать что AH не бывает в природе.

_>И я надеюсь что ты не пытаешься бредово интерпретировать данное определение, как требование работы со всеми возможными типами? ) Это ты уже попытался сделать в процессе данной дискуссии и кончилось это очевидным твоим "На счет всех возможных — я, видимо, и правда загнул. Пардон". Хочешь повторить по новому кругу? )

Это была ирония. В том определении не было всех, но была бесконечность, а в хаскельвики — все.
Хочешь по кругу — начинай снова.
Re[64]: «Собаку съел»
От: alex_public  
Дата: 27.02.17 07:30
Оценка: +1 -1
Здравствуйте, samius, Вы писали:

_>>Это форум для программистов. Это вполне себе определённая специальность со своим кодами (их штук десять разных) и факультетами. И я могу легко ткнуть тебе в плане любого такого факультета указанный предмет (где разбирают устройство современных компьютеров).

S>Если можешь и легко, то уж ткни уж... УрГУ мат-мех 1997 выпуск. Сам-то как считаешь, мог ли я на специальности "компьютрная математика" пропустить такой предмет в программе?

С каких это пор мехмат является профильным для программистов? ) Во всём мире Mathematica и Computer Science являются разными направлениями с разными факультетами. И у нас тоже самое, разве что для второго направления у нас традиционно имеется зоопарк названий (и кибернетика и информатика и системы управления, как только не называют). И у нас в МГУ для этого два отдельных факультета и в твоём университете наверняка так же было, если он конечно не совсем слабенький.

_>>Естественно в данную профессию можно прийти не только таким путём — при хорошей фундаментальной подготовке можно легко добрать программистскую специфику с помощью самообразования. Только вот это надо обязательно сделать на всех уровня, начиная с самого базового, чтобы потом не выглядеть посмешищем среди коллег.

S>Я думаю что если бы я изучал особенности всех машин и процессоров, с которыми работал (от MK, EC, Поиск до современных), то я лишился бы чего-то другого. И не приобрел бы ничего, что мешало бы тебе посмеяться надо мной по какому-нибудь другому поводу. Весьма сомнительный актив. Тем более, что к AH/PP не имеет никакого отношения.

Ну в принципе сейчас и всяческие ПТУшники освоившие html+js по книжке "для чайников" и клепающие говносайтики считают себя полноценными программистами. Так что и ты тоже можешь не стесняться... )))

_>>Так, давай я тебе один раз объясню ситуацию, чтобы ты больше ни к кому не приставал с подобными глупостями. Возьмём для примера тот же твой недавний косяк. Так вот, я легко могу написать на этом форуме фразу типа "реализация каррирования в машинных кодах — это абсолютно не реально на современных процессорах" и никто (ну вот разве что кроме тебя) не начнёт писать к ней возражения, потому что прекрасно поймут что я хотел сказать. Хотя с точки зрения формальной логики эта фраза очевидно неверна, т.к. кто угодно (и я сам в том числе) может элементарно написать реализацию подобного.

S>Т.е. ты сам признаешь, что с точки зрения формалььной логики пишешь то, с чем сам не согласен же? Ну дык а чего ты от меня хочешь с точки зрения формальной логики? С неформальной — обращайся к кому-нибудь еще.

Ты безнадёжен. )))

_>>Если честно, этот балаган с бесконечными отмазками уже сильно надоел. Ответь ради разнообразия хоть один раз на прямой вопрос: мы увидим на этом форуме твоё определение понятия "поведение функции" или нет?

S>Уже отвечал. И даже не отмазывался и не вилял. А направил тебя открыть спеку C++. Мы увидим на это форуме результат открывания тобой спеки?

Ну т.е. переводя с твоего языка отмазок — определения не будет. Понятно. )))

Кстати, я совершенно не удивлён. Я уже давно заметил, что у тебя большие проблемы с формулировками своих личных мыслей (когда не получается прикрыться готовой цитатой кого-то авторитетного). Вот не сомневаюсь, что когда я в первый раз затребовал у тебя это определение, ты перерыл все свои книжки в поисках готового ответа. Но видимо не нашёл, а самому сформулировать не по силам. Поэтому наблюдаем бесконечную череду отмазок всех видов. Но можешь успокоиться — больше требовать не буду, и так с тобой всё понятно. )))

_>>>Я не заметил скачка. Вот у тебя map чистая или нет? Или ты будешь скакать в зависимости от того, что в нее передать?

_>>Ну значит у тебя что-то со зрением или с логикой) Т.к. вот прямо в процитированном тексте оно отчётливо видно.
S>А в этом прямо процитированном тескте очевидно что ты ушел от вопроса о чистоте map функции.

А этот вопрос имеет какое-то отношение к явному противоречию в двух твоих фразах в разных сообщениях? ) Или быть может ты просто хочешь замять эту тему, перекинув обсуждение на другие вопросы (чистота map и т.п.)? ))) Хотя это видимо риторический вопрос...

_>>Это конечно всё замечательно, но мне как-то наскучило уже коллекционировать виды твоих убогих отмазок. Ты по делу то (про необходимость знания внутреннего устройства постороннего кода) что-то скажешь или продолжишь делать вид, что не заметил вопроса? )

S>Используй определения, Люк! Не надо выдумывать ничего нового про знания внутреннего устройства постороннего кода.

Так вот я тебя и спрашиваю про следствия, вытекающие из твоего определения. Они оказываются весьма и весьма забавными. Но т.к. это всё же твои определения, то хотелось бы в начале услышать твоё подтверждение, что ты действительно в курсе этого и считаешь это нормальным. )

_>>У функции f набор допустимых типов не конечный (мы можем вводить сколько угодно новых и они будут спокойно с ней работать).

S>Ты можешь так же вводить бесконечно много новых перегрузок, которые будут работать "одинаковым образом", и тем самым выйти за твое понимание определения и вообще сказать что AH не бывает в природе.

Не верно. Вводя дополнительные перегрузки мы модифицируем (расширяем) код нашей функции. Собственно это и есть основной минус ad hoc полиморфизма — для добавление поддержки нового типа требуется расширение кода функции.

А в обсуждаемом случае функция f будет подхватывать новые типы сама, без всякой её модификации (можешь даже скомпилировать её в отдельный бинарный модуль для полной чистоты эксперимента, а потом добавлять новые типы — всё будет работать).

_>>И я надеюсь что ты не пытаешься бредово интерпретировать данное определение, как требование работы со всеми возможными типами? ) Это ты уже попытался сделать в процессе данной дискуссии и кончилось это очевидным твоим "На счет всех возможных — я, видимо, и правда загнул. Пардон". Хочешь повторить по новому кругу? )

S>Это была ирония. В том определении не было всех, но была бесконечность, а в хаскельвики — все.
S>Хочешь по кругу — начинай снова.

Ну так у функции f как раз никаких проблем с бесконечностью нет. А своё мнение о хаскельвики я уже высказывал. )))
Re[65]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.02.17 16:11
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, samius, Вы писали:


S>>Если можешь и легко, то уж ткни уж... УрГУ мат-мех 1997 выпуск. Сам-то как считаешь, мог ли я на специальности "компьютрная математика" пропустить такой предмет в программе?


_>С каких это пор мехмат является профильным для программистов? ) Во всём мире Mathematica и Computer Science являются разными направлениями с разными факультетами. И у нас тоже самое, разве что для второго направления у нас традиционно имеется зоопарк названий (и кибернетика и информатика и системы управления, как только не называют). И у нас в МГУ для этого два отдельных факультета и в твоём университете наверняка так же было, если он конечно не совсем слабенький.


Сначала "я могу легко ткнуть тебе", а потом такой отъезд. Не осилил легкотню. Балабол. Балабол с красным дипломом МГУ!

S>>Я думаю что если бы я изучал особенности всех машин и процессоров, с которыми работал (от MK, EC, Поиск до современных), то я лишился бы чего-то другого. И не приобрел бы ничего, что мешало бы тебе посмеяться надо мной по какому-нибудь другому поводу. Весьма сомнительный актив. Тем более, что к AH/PP не имеет никакого отношения.


_>Ну в принципе сейчас и всяческие ПТУшники освоившие html+js по книжке "для чайников" и клепающие говносайтики считают себя полноценными программистами. Так что и ты тоже можешь не стесняться... )))

А я и не стесняюсь. Где ты заметил стеснения?

S>>Т.е. ты сам признаешь, что с точки зрения формалььной логики пишешь то, с чем сам не согласен же? Ну дык а чего ты от меня хочешь с точки зрения формальной логики? С неформальной — обращайся к кому-нибудь еще.


_>Ты безнадёжен. )))

Ты надеялся что никто не заметит твои логические ляпы? Ну тады да.

_>Ну т.е. переводя с твоего языка отмазок — определения не будет. Понятно. )))

Разве я сразу не сказал об этом? Что-то там понимать еще пытался. После МГУ все такие внимательныее, или только краснодипломники?

_>Кстати, я совершенно не удивлён. Я уже давно заметил, что у тебя большие проблемы с формулировками своих личных мыслей (когда не получается прикрыться готовой цитатой кого-то авторитетного). Вот не сомневаюсь, что когда я в первый раз затребовал у тебя это определение, ты перерыл все свои книжки в поисках готового ответа. Но видимо не нашёл, а самому сформулировать не по силам. Поэтому наблюдаем бесконечную череду отмазок всех видов. Но можешь успокоиться — больше требовать не буду, и так с тобой всё понятно. )))

Кто ты, что бы с меня требовать?

S>>А в этом прямо процитированном тескте очевидно что ты ушел от вопроса о чистоте map функции.


_>А этот вопрос имеет какое-то отношение к явному противоречию в двух твоих фразах в разных сообщениях? ) Или быть может ты просто хочешь замять эту тему, перекинув обсуждение на другие вопросы (чистота map и т.п.)? ))) Хотя это видимо риторический вопрос...

Я хотел посмотреть на твои выкрутасы, когда будешь рассуждать о чистоте функций ВП, а я бы по твоей задумке передавал бы в них грязный и чистые по очереди, и спрашивал, что так быстро переобулся?

_>>>Это конечно всё замечательно, но мне как-то наскучило уже коллекционировать виды твоих убогих отмазок. Ты по делу то (про необходимость знания внутреннего устройства постороннего кода) что-то скажешь или продолжишь делать вид, что не заметил вопроса? )

S>>Используй определения, Люк! Не надо выдумывать ничего нового про знания внутреннего устройства постороннего кода.

_>Так вот я тебя и спрашиваю про следствия, вытекающие из твоего определения. Они оказываются весьма и весьма забавными. Но т.к. это всё же твои определения, то хотелось бы в начале услышать твоё подтверждение, что ты действительно в курсе этого и считаешь это нормальным. )

Мои определения? Можно цитату?

_>>>У функции f набор допустимых типов не конечный (мы можем вводить сколько угодно новых и они будут спокойно с ней работать).

S>>Ты можешь так же вводить бесконечно много новых перегрузок, которые будут работать "одинаковым образом", и тем самым выйти за твое понимание определения и вообще сказать что AH не бывает в природе.

_>Не верно. Вводя дополнительные перегрузки мы модифицируем (расширяем) код нашей функции. Собственно это и есть основной минус ad hoc полиморфизма — для добавление поддержки нового типа требуется расширение кода функции.

О, т.е. по-твоему выходит что все перегруженные по типу функции — это код одной и той же функции?

_>А в обсуждаемом случае функция f будет подхватывать новые типы сама, без всякой её модификации (можешь даже скомпилировать её в отдельный бинарный модуль для полной чистоты эксперимента, а потом добавлять новые типы — всё будет работать).

А функции сравнения для разных типов при этом не являются расширением одной и той же функции? Или их не нужно писать вместе с новыми типами?

Да, МГУ шибко изворотлив в трактовке определений.

_>>>И я надеюсь что ты не пытаешься бредово интерпретировать данное определение, как требование работы со всеми возможными типами? ) Это ты уже попытался сделать в процессе данной дискуссии и кончилось это очевидным твоим "На счет всех возможных — я, видимо, и правда загнул. Пардон". Хочешь повторить по новому кругу? )

S>>Это была ирония. В том определении не было всех, но была бесконечность, а в хаскельвики — все.
S>>Хочешь по кругу — начинай снова.

_>Ну так у функции f как раз никаких проблем с бесконечностью нет. А своё мнение о хаскельвики я уже высказывал. )))

Угу, у функции f проблем с бесконечностью нет, они есть у бесконечности типов, которые требуют бесконечность функций сравнения. И главное — никаких неудобств, по сравнению с расширением тела одной бесконечно-расширяемой функции. Ну вообще никаких.
Жги, МГУ!
Re[66]: «Собаку съел»
От: alex_public  
Дата: 28.02.17 09:42
Оценка:
Здравствуйте, samius, Вы писали:

S>Сначала "я могу легко ткнуть тебе", а потом такой отъезд. Не осилил легкотню. Балабол. Балабол с красным дипломом МГУ!


ОК, тыкаю носом, если уж так хочешь: открываешь этот https://cs.msu.ru/sites/cmc/files/docs/fiit_bachelor_full-time_i.pdf документ и видишь в разделе "профессиональный цикл, базовая часть" (т.е. обязательная для всех студентов часть) предмет под названием "Архитектура ЭВМ и язык Ассемблера".

S>>>А в этом прямо процитированном тескте очевидно что ты ушел от вопроса о чистоте map функции.

_>>А этот вопрос имеет какое-то отношение к явному противоречию в двух твоих фразах в разных сообщениях? ) Или быть может ты просто хочешь замять эту тему, перекинув обсуждение на другие вопросы (чистота map и т.п.)? ))) Хотя это видимо риторический вопрос...
S>Я хотел посмотреть на твои выкрутасы, когда будешь рассуждать о чистоте функций ВП, а я бы по твоей задумке передавал бы в них грязный и чистые по очереди, и спрашивал, что так быстро переобулся?

Ну т.е. я так понимаю, что ты уже отказываешься от своего изначального тезиса о том, что функция apply параметрически полиморфная? ))) Теперь её свойства по твоему определяются переданными параметрами, правильно? Или нет? Ты уже определился с этим моментом или у тебя в каждом сообщение разный подход будет? )))

_>>Так вот я тебя и спрашиваю про следствия, вытекающие из твоего определения. Они оказываются весьма и весьма забавными. Но т.к. это всё же твои определения, то хотелось бы в начале услышать твоё подтверждение, что ты действительно в курсе этого и считаешь это нормальным. )

S>Мои определения? Можно цитату?

Ну так а кто у нас тут утверждает, что для анализа вида полиморфизма необходимо проследить весь стек вызова? ) Это твоё утверждение (я ещё специально уточнял) и вот из него следует очень много забавных выводов... )

_>>Не верно. Вводя дополнительные перегрузки мы модифицируем (расширяем) код нашей функции. Собственно это и есть основной минус ad hoc полиморфизма — для добавление поддержки нового типа требуется расширение кода функции.

S>О, т.е. по-твоему выходит что все перегруженные по типу функции — это код одной и той же функции?

Не важно как это называть, набором перегруженных функций, или специализациями шаблона или просто куском кода, реализующим полиморфизм. Главное отличие специального полиморфизма будет в том, что при добавление работы с новым типом нам потребуется модифицировать (обычно дополнить) это наш код. А в случае параметрического полиморфизма не потребуется.

_>>А в обсуждаемом случае функция f будет подхватывать новые типы сама, без всякой её модификации (можешь даже скомпилировать её в отдельный бинарный модуль для полной чистоты эксперимента, а потом добавлять новые типы — всё будет работать).

S>А функции сравнения для разных типов при этом не являются расширением одной и той же функции? Или их не нужно писать вместе с новыми типами?

Естественно не являются. Они относятся к определению типа (собственно во многих языках их даже вне типа и определить невозможно) и используются далеко не только внутри данной функции.

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

_>>Ну так у функции f как раз никаких проблем с бесконечностью нет. А своё мнение о хаскельвики я уже высказывал. )))

S>Угу, у функции f проблем с бесконечностью нет, они есть у бесконечности типов, которые требуют бесконечность функций сравнения. И главное — никаких неудобств, по сравнению с расширением тела одной бесконечно-расширяемой функции. Ну вообще никаких.

Я тут искал на форуме один старый пример (для другой дискуссии, не в КСВ и с адекватными собеседниками) и случайно наткнулся на просто замечательное сообщение http://rsdn.org/forum/decl/4650406?tree=tree
Автор: samius
Дата: 07.03.12
и там дальше по ветке тоже интересно. Самое забавное, что ты там обсуждаешь даже не случаей типа my_equals_to (в котором реализованы техники полностью аналогичные реализации полиморфизма в Хаскеле), а просто обычные шаблоны C++ — прямо чудеса. И да, в те времена ты был однозначно разумнее и адекватнее. )
Re[67]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.03.17 08:02
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, samius, Вы писали:


S>>Сначала "я могу легко ткнуть тебе", а потом такой отъезд. Не осилил легкотню. Балабол. Балабол с красным дипломом МГУ!


_>ОК, тыкаю носом, если уж так хочешь: открываешь этот https://cs.msu.ru/sites/cmc/files/docs/fiit_bachelor_full-time_i.pdf документ и видишь в разделе "профессиональный цикл, базовая часть" (т.е. обязательная для всех студентов часть) предмет под названием "Архитектура ЭВМ и язык Ассемблера".

Ненене, ты обещал ткнуть

Это вполне себе определённая специальность со своим кодами (их штук десять разных) и факультетами. И я могу легко ткнуть тебе в плане любого такого факультета указанный предмет (где разбирают устройство современных компьютеров).

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

_>Ну т.е. я так понимаю, что ты уже отказываешься от своего изначального тезиса о том, что функция apply параметрически полиморфная? ))) Теперь её свойства по твоему определяются переданными параметрами, правильно? Или нет? Ты уже определился с этим моментом или у тебя в каждом сообщение разный подход будет? )))

Что, опять уже который раз отказываюсь? Ни разу нигде я не сказал что apply не ПП. А наоборот, ровно каждый раз заявлял что она ПП. Все твои попытки представить положение вещей так, будто я каждое сообщение переобуваюсь — очевидная инсинуация.

S>>Мои определения? Можно цитату?


_>Ну так а кто у нас тут утверждает, что для анализа вида полиморфизма необходимо проследить весь стек вызова? ) Это твоё утверждение (я ещё специально уточнял) и вот из него следует очень много забавных выводов... )

Краснодипломник МГУ не в состоянии отличить утверждение от определения, надо же...
Проследить — оно, конечно необходимо. Более того, даже не весь стек, а все ветвление. Но при этом так же необходимо отделять выполнение ФВП от выполнения явно переданной ей функции, как это делают, например, с определением чистоты ФВП.

S>>О, т.е. по-твоему выходит что все перегруженные по типу функции — это код одной и той же функции?


_>Не важно как это называть, набором перегруженных функций, или специализациями шаблона или просто куском кода, реализующим полиморфизм. Главное отличие специального полиморфизма будет в том, что при добавление работы с новым типом нам потребуется модифицировать (обычно дополнить) это наш код. А в случае параметрического полиморфизма не потребуется.

Ну как так можно? Читать определение, вроде, даже понимать его, повторять его своими словами, но при этом отказываться верным образом применять?!??
Действительно, ПП не требует модифицировать и дополнять код. Не наш, не чей-то, а вообще код.

_>>>А в обсуждаемом случае функция f будет подхватывать новые типы сама, без всякой её модификации (можешь даже скомпилировать её в отдельный бинарный модуль для полной чистоты эксперимента, а потом добавлять новые типы — всё будет работать).

S>>А функции сравнения для разных типов при этом не являются расширением одной и той же функции? Или их не нужно писать вместе с новыми типами?

_>Естественно не являются. Они относятся к определению типа (собственно во многих языках их даже вне типа и определить невозможно) и используются далеко не только внутри данной функции.

Ага, перенес код в другой файл и "я в домике", это не "мой" код, а Васин, Вася должен был писать ту функцию, что бы "мой" код был ПП в отношении васиного типа.
Ну тундра!
Еще раз. Специальный код либо есть, либо нет. Не важно, кто им пользуется и сколько раз, не важно, относится ли он к расширению функции, или к какому-то васиному типу.
Вот я пишу "struct Foo{};" Работает твоя "ПП" my_equal_to с типом Foo? Или в типе Foo надо определить специальную функцию для my_equal_to?

_>А с твоей бредовой логикой получается, что если я использую функцию printf внутри своей, то можно будет называть printf расширением моей функции. )))

Расшифруй-ка, а то мне с моей бредовой логикой сие неочевидно, откуда ты это взял по моей логике.

S>>Угу, у функции f проблем с бесконечностью нет, они есть у бесконечности типов, которые требуют бесконечность функций сравнения. И главное — никаких неудобств, по сравнению с расширением тела одной бесконечно-расширяемой функции. Ну вообще никаких.


_>Я тут искал на форуме один старый пример (для другой дискуссии, не в КСВ и с адекватными собеседниками) и случайно наткнулся на просто замечательное сообщение http://rsdn.org/forum/decl/4650406?tree=tree
Автор: samius
Дата: 07.03.12
и там дальше по ветке тоже интересно. Самое забавное, что ты там обсуждаешь даже не случаей типа my_equals_to (в котором реализованы техники полностью аналогичные реализации полиморфизма в Хаскеле), а просто обычные шаблоны C++ — прямо чудеса. И да, в те времена ты был однозначно разумнее и адекватнее. )


Тут я не понял, в чем наезд. Мне нельзя было обсуждать обычные шаблоны C++? Или теперь нельзя?
Re[68]: «Собаку съел»
От: alex_public  
Дата: 01.03.17 11:49
Оценка:
Здравствуйте, samius, Вы писали:

_>>ОК, тыкаю носом, если уж так хочешь: открываешь этот https://cs.msu.ru/sites/cmc/files/docs/fiit_bachelor_full-time_i.pdf документ и видишь в разделе "профессиональный цикл, базовая часть" (т.е. обязательная для всех студентов часть) предмет под названием "Архитектура ЭВМ и язык Ассемблера".

S>Ненене, ты обещал ткнуть
S>

S>Это вполне себе определённая специальность со своим кодами (их штук десять разных) и факультетами. И я могу легко ткнуть тебе в плане любого такого факультета указанный предмет (где разбирают устройство современных компьютеров).

S>Вот держи, например, план специальности 010200. Теперь твоя задача сводится к тому, что бы либо легко ткнуть в этом плане на указанный предмет с устройством современных компьютеров, либо убедительно доказать что по специальности 010200 не готовят программистов и

Хы, открываем твою ссылку (ты сам то это пробовал сделать?) и читаем там " организация вычислительных систем; понятие архитектуры и основные виды архитектуры ЭВМ;".

S>что получившим специальность 010200 не место на этом форумме.


А вот тут ты откровенно наврал. Потому что я вполне однозначно писал, что прийти в профессию можно и получив непрофильное (к 010200 это не относится) фундаментальное образование. Для этого достаточно самостоятельно изучить программистскую специфику. И многие хорошие специалисты, которых я знаю, именно так и делали. А вот ты похоже не осилил. )

_>>Ну т.е. я так понимаю, что ты уже отказываешься от своего изначального тезиса о том, что функция apply параметрически полиморфная? ))) Теперь её свойства по твоему определяются переданными параметрами, правильно? Или нет? Ты уже определился с этим моментом или у тебя в каждом сообщение разный подход будет? )))

S>Что, опять уже который раз отказываюсь? Ни разу нигде я не сказал что apply не ПП. А наоборот, ровно каждый раз заявлял что она ПП. Все твои попытки представить положение вещей так, будто я каждое сообщение переобуваюсь — очевидная инсинуация.

А как же твоё утверждение, пару сообщений назад, о том что свойства apply полностью определяются значением её первого параметра? Это же получается, что при соответствующем параметре функция станет ad hoc или как? )

_>>Ну так а кто у нас тут утверждает, что для анализа вида полиморфизма необходимо проследить весь стек вызова? ) Это твоё утверждение (я ещё специально уточнял) и вот из него следует очень много забавных выводов... )

S>Проследить — оно, конечно необходимо. Более того, даже не весь стек, а все ветвление. Но при этом так же необходимо отделять выполнение ФВП от выполнения явно переданной ей функции, как это делают, например, с определением чистоты ФВП.

Ой, т.е. у нас уже неожиданно появляется исключение из правил? ) Значит для ФВП другие правила?

И да, значит чтобы определить вид полиморфизма функции (любой, а не только ФВП, раз ты требуешь весь стек анализировать) невозможно обойтись анализом кода (исходного или машинного, не важно) только этой функции, правильно?

_>>Не важно как это называть, набором перегруженных функций, или специализациями шаблона или просто куском кода, реализующим полиморфизм. Главное отличие специального полиморфизма будет в том, что при добавление работы с новым типом нам потребуется модифицировать (обычно дополнить) это наш код. А в случае параметрического полиморфизма не потребуется.

S>Ну как так можно? Читать определение, вроде, даже понимать его, повторять его своими словами, но при этом отказываться верным образом применять?!??
S>Действительно, ПП не требует модифицировать и дополнять код. Не наш, не чей-то, а вообще код.

Ой, я смотрю у тебя совсем забавные проблемы с логикой... Ну расскажи мне как ты добавишь новый тип в проект, не модифицировав никак код этого проекта? )

_>>Естественно не являются. Они относятся к определению типа (собственно во многих языках их даже вне типа и определить невозможно) и используются далеко не только внутри данной функции.

S>Ага, перенес код в другой файл и "я в домике", это не "мой" код, а Васин, Вася должен был писать ту функцию, что бы "мой" код был ПП в отношении васиного типа.
S>Ну тундра!
S>Еще раз. Специальный код либо есть, либо нет. Не важно, кто им пользуется и сколько раз, не важно, относится ли он к расширению функции, или к какому-то васиному типу.

Оператор равенства в языке (во всяком случае таком как C++) — это безусловно специальный полиморфизм. Только вот это не имеет никакого отношения к нашей функции, в ней же никаких специализаций нет. Более того, в ней даже прямого вызова этого оператора нет — только вызов некой функции, переданной как указатель (внутри типа eq).

S>Вот я пишу "struct Foo{};" Работает твоя "ПП" my_equal_to с типом Foo? Или в типе Foo надо определить специальную функцию для my_equal_to?


А она и не должна. У нас функция определена на определённом множестве типов, а не для всех типов. Это вполне нормально для параметрического полиморфизма, что ты кстати сам явно доказывал в ветке дискуссии по ссылке ниже. )

_>>А с твоей бредовой логикой получается, что если я использую функцию printf внутри своей, то можно будет называть printf расширением моей функции. )))

S>Расшифруй-ка, а то мне с моей бредовой логикой сие неочевидно, откуда ты это взял по моей логике.

Ну так ты же назвал оператор равенства расширением функции my_equal_to даже за более безобидный факт (за вызов этого оператора через переданный указатель), чем просто прямое использование. Собственно да, у тебя изначальная идея была даже более бредовой, чем показанная мною аналогия. Скорее правильнее говорить что ты считаешь printf расширением функции apply, если где-то в коде встречается вызов типа "apply(printf, "");".

_>>Я тут искал на форуме один старый пример (для другой дискуссии, не в КСВ и с адекватными собеседниками) и случайно наткнулся на просто замечательное сообщение http://rsdn.org/forum/decl/4650406?tree=tree
Автор: samius
Дата: 07.03.12
и там дальше по ветке тоже интересно. Самое забавное, что ты там обсуждаешь даже не случаей типа my_equals_to (в котором реализованы техники полностью аналогичные реализации полиморфизма в Хаскеле), а просто обычные шаблоны C++ — прямо чудеса. И да, в те времена ты был однозначно разумнее и адекватнее. )

S>Тут я не понял, в чем наезд. Мне нельзя было обсуждать обычные шаблоны C++? Или теперь нельзя?

Да там у тебя полно классных фраз просто отлично "гармонирующих" с данной дискуссией. Например типа таких: "Определение ПП не требует (потенциально) бесконечного кол-ва типов." Но мне особенно понравилась "на C++ потенциальную бесконечность типов мы можем обеспечить во время компиляции, поместив что надо в заголовок и залив на гитхаб.".

Собственно даже не пойму и зачем я тратил какое-то время на формулировку собственных мыслей в споре с тобой. Достаточно же было просто накопировать твоих же цитат из разных сообщений и вставлять их в нужные места — получился бы отличный спор между разными голосами в твоей голове. )))
Re[69]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 03.03.17 05:29
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, samius, Вы писали:


S>>Вот держи, например, план специальности 010200. Теперь твоя задача сводится к тому, что бы либо легко ткнуть в этом плане на указанный предмет с устройством современных компьютеров, либо убедительно доказать что по специальности 010200 не готовят программистов и


_>Хы, открываем твою ссылку (ты сам то это пробовал сделать?) и читаем там " организация вычислительных систем; понятие архитектуры и основные виды архитектуры ЭВМ;".


Вроде как ты нашел искомый предмет в программе матмехов, вроде как убедил себя что у меня "профильное" образование в твоем понимании. Вынужден тебя разубедить, не люблю поверхностных суждений.
Если заглянуть в программу дисциплины "ЕНФ.02 Информатика", то внезапно выясняется что места для понятия архитектуры там не шибко много.
Например, программа курса ВМК КГУ для специальности 010200 предусматривает упоминание понятия и видов архитектуры ЭВМ лишь во введении, и то в контексте темы

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

То есть, из 150и академических часов, примерно 15 академических минут в лучшем случае. Значительная часть курса (40 часов) посвящена математическим структурам в разработке алгоритмов.
То есть, никаких базовых знаний о "функционировании современных ЦПУ". Специальность есть, а знаний — нет. Уже только этим опровергается твой тезис о том что должно быть известно каждому студенту, даже подразумевая мнимую часть "студенту специальности программист". Куда уж там про пролог и эпилог функции, реализация каррирования в машинных кодах. И устройства современных компьютеров там тоже нет.

S>>что получившим специальность 010200 не место на этом форумме.


_>А вот тут ты откровенно наврал. Потому что я вполне однозначно писал, что прийти в профессию можно и получив непрофильное (к 010200 это не относится) фундаментальное образование. Для этого достаточно самостоятельно изучить программистскую специфику. И многие хорошие специалисты, которых я знаю, именно так и делали. А вот ты похоже не осилил. )

Т.е. 010200 все-таки профильное, отъехал таки? Отлично. Но вот почему студент, обладая дипломом по профильной специальности 010200, не осилил прийти в профессию — я так и не догнал.

_>>>Ну т.е. я так понимаю, что ты уже отказываешься от своего изначального тезиса о том, что функция apply параметрически полиморфная? ))) Теперь её свойства по твоему определяются переданными параметрами, правильно? Или нет? Ты уже определился с этим моментом или у тебя в каждом сообщение разный подход будет? )))

S>>Что, опять уже который раз отказываюсь? Ни разу нигде я не сказал что apply не ПП. А наоборот, ровно каждый раз заявлял что она ПП. Все твои попытки представить положение вещей так, будто я каждое сообщение переобуваюсь — очевидная инсинуация.

_>А как же твоё утверждение, пару сообщений назад, о том что свойства apply полностью определяются значением её первого параметра? Это же получается, что при соответствующем параметре функция станет ad hoc или как? )

Ну вот от того что тебе со мной настолько сложно, я предлагаю для начала разобраться с чистотой функции map. Определяется ли по-твоему чистота функции map функцией, переданной параметром? Да/нет/не знаю?

_>>>Ну так а кто у нас тут утверждает, что для анализа вида полиморфизма необходимо проследить весь стек вызова? ) Это твоё утверждение (я ещё специально уточнял) и вот из него следует очень много забавных выводов... )

S>>Проследить — оно, конечно необходимо. Более того, даже не весь стек, а все ветвление. Но при этом так же необходимо отделять выполнение ФВП от выполнения явно переданной ей функции, как это делают, например, с определением чистоты ФВП.

_>Ой, т.е. у нас уже неожиданно появляется исключение из правил? ) Значит для ФВП другие правила?

давай выясним, могут ли быть для ФВП другие правила на примере чистоты.

_>И да, значит чтобы определить вид полиморфизма функции (любой, а не только ФВП, раз ты требуешь весь стек анализировать) невозможно обойтись анализом кода (исходного или машинного, не важно) только этой функции, правильно?

Это зависит от фукнции. Функция apply не выполняет никаких специальных для типа T действий, если их не выполняет переданная функция f. В то время как выполнение функции my_equal_to не может обойтись без выполнения специальных для типа T действий.

S>>Ну как так можно? Читать определение, вроде, даже понимать его, повторять его своими словами, но при этом отказываться верным образом применять?!??

S>>Действительно, ПП не требует модифицировать и дополнять код. Не наш, не чей-то, а вообще код.

_>Ой, я смотрю у тебя совсем забавные проблемы с логикой... Ну расскажи мне как ты добавишь новый тип в проект, не модифицировав никак код этого проекта? )

1) что такое код проекта и каким образом он относится к определению ПП?
2) возможно у меня в проекте уже есть такой тип, который не работает с твоей my_equal_to. Что с ним делать?
3) csc /out:1.exe *.cs (никакого кода проекта)

_>>>Естественно не являются. Они относятся к определению типа (собственно во многих языках их даже вне типа и определить невозможно) и используются далеко не только внутри данной функции.

S>>Ага, перенес код в другой файл и "я в домике", это не "мой" код, а Васин, Вася должен был писать ту функцию, что бы "мой" код был ПП в отношении васиного типа.
S>>Ну тундра!
S>>Еще раз. Специальный код либо есть, либо нет. Не важно, кто им пользуется и сколько раз, не важно, относится ли он к расширению функции, или к какому-то васиному типу.

_>Оператор равенства в языке (во всяком случае таком как C++) — это безусловно специальный полиморфизм. Только вот это не имеет никакого отношения к нашей функции, в ней же никаких специализаций нет. Более того, в ней даже прямого вызова этого оператора нет — только вызов некой функции, переданной как указатель (внутри типа eq).

Специальный код сравнения будет выполнен во время выполнении функции my_equal_to?

S>>Вот я пишу "struct Foo{};" Работает твоя "ПП" my_equal_to с типом Foo? Или в типе Foo надо определить специальную функцию для my_equal_to?


_>А она и не должна. У нас функция определена на определённом множестве типов, а не для всех типов. Это вполне нормально для параметрического полиморфизма, что ты кстати сам явно доказывал в ветке дискуссии по ссылке ниже. )

Еще раз, не лениво.

Strachey [Strachey 67] distinguished, informally, between two major kinds of polymorphism.
Parametric polymorphism is obtained when a function works uniformly on a range of types: these types
normally exhibit some common structure. Ad-hoc polymorphism is obtained when a function works, or
appears to work, on several different types (which may not exhibit a common structure) and may behave in
unrelated ways for each type.

Это из работы Карделли. Если функция может вести себя по-разному на нескольких разных типах, которые могут не представлять общую структуру, то это AH.
А то, что я там 5 лет назад доказывал — это ты решил себе такую подмену сделать? Извини, я не могу спорить с тем собой, который был 5 лет назад.

_>>>А с твоей бредовой логикой получается, что если я использую функцию printf внутри своей, то можно будет называть printf расширением моей функции. )))

S>>Расшифруй-ка, а то мне с моей бредовой логикой сие неочевидно, откуда ты это взял по моей логике.

_>Ну так ты же назвал оператор равенства расширением функции my_equal_to даже за более безобидный факт (за вызов этого оператора через переданный указатель), чем просто прямое использование. Собственно да, у тебя изначальная идея была даже более бредовой, чем показанная мною аналогия. Скорее правильнее говорить что ты считаешь printf расширением функции apply, если где-то в коде встречается вызов типа "apply(printf, "");".

Я назвал расширением оператор равенства? Не думаю, что бы я мог использовать такой термин осмысленно. Я не знаю, что он означает. А говорить что я считаю оператор равенства или printf расширением чего-то можно будет лишь после того, как ты уточнишь термин расширение, я пойму о чем речь, и подтвержу, что я так считаю. А до тех пор — я считаю что это твоя демагогия.

S>>Тут я не понял, в чем наезд. Мне нельзя было обсуждать обычные шаблоны C++? Или теперь нельзя?


_>Да там у тебя полно классных фраз просто отлично "гармонирующих" с данной дискуссией. Например типа таких: "Определение ПП не требует (потенциально) бесконечного кол-ва типов." Но мне особенно понравилась "на C++ потенциальную бесконечность типов мы можем обеспечить во время компиляции, поместив что надо в заголовок и залив на гитхаб.".

Рад, что тебе понравилось. Но определение ПП действительно явно не требует бесконечность. А вот по поводу гитхаба я что-то не очень понял. Боюсь, это у меня такой юмор был. Юмор мой и сейчас недалеко ушел, но я сейчас ту шутку не могу оценить по достоинству. Если это была шутка, конечно.

_>Собственно даже не пойму и зачем я тратил какое-то время на формулировку собственных мыслей в споре с тобой. Достаточно же было просто накопировать твоих же цитат из разных сообщений и вставлять их в нужные места — получился бы отличный спор между разными голосами в твоей голове. )))

Ну что же, если это поможет тебе отстоять точку зрения красондипломника МГУ. Но заметь, тогда в случае твоего выигрыша в споре придется чествовать меня же.
Re: Что решили-то? (-)
От: Mihas  
Дата: 03.03.17 09:49
Оценка:
Re[45]: benchmark
От: Evgeny.Panasyuk Россия  
Дата: 04.03.17 15:20
Оценка:
Здравствуйте, alex_public, Вы писали:

_>>>Кстати, то, что компилятор имеет такое право в подобном случае, — я согласен. А вот делает ли он это в реальности? Вот конкретный стандартный компилятор java последней версии. Кто-нибудь проверял данный факт?

EP>>Я ЕМНИП проверял final не некоторых компиляторах C++ — ожидаемый эффект был. Можно легко перепроверить если интересно.
_>Ну с C++ то как раз всё понятно, потому что данная конструкция просто заставляет применять основной метод вызова функций в языке. )))
_>Гораздо интереснее глянуть что с этим в Java и C#. Потому что технически никаких проблем сделать аналогичное нет — это не одна из многих проблемных для Java/C# оптимизаций, недоступных из-за дизайна языка. Но из этого факта совсем не следует автоматический вывод о том, что именно так всё и реализовано. Потому что в JIT компиляторах этих языков в данный момент полно вполне возможных, но не реализованных оптимизаций.

В .NET вроде только начинает появляться: https://rsdn.org/forum/dotnet/6715987.1
Автор: rameel
Дата: 04.03.17
Re[70]: «Собаку съел»
От: alex_public  
Дата: 06.03.17 14:39
Оценка:
Здравствуйте, samius, Вы писали:

S>>>Вот держи, например, план специальности 010200. Теперь твоя задача сводится к тому, что бы либо легко ткнуть в этом плане на указанный предмет с устройством современных компьютеров, либо убедительно доказать что по специальности 010200 не готовят программистов и

_>>Хы, открываем твою ссылку (ты сам то это пробовал сделать?) и читаем там " организация вычислительных систем; понятие архитектуры и основные виды архитектуры ЭВМ;".
S>Вроде как ты нашел искомый предмет в программе матмехов, вроде как убедил себя что у меня "профильное" образование в твоем понимании. Вынужден тебя разубедить, не люблю поверхностных суждений.
S>Если заглянуть в программу дисциплины "ЕНФ.02 Информатика", то внезапно выясняется что места для понятия архитектуры там не шибко много.
S>Например, программа курса ВМК КГУ для специальности 010200 предусматривает упоминание понятия и видов архитектуры ЭВМ лишь во введении, и то в контексте темы
S>

S>Уровни абстракции в разработке программ и в языках программирования, от машин Тьюринга и классической архитектуры ЭВМ до декларативных языков и машин логических выводов.

S>То есть, из 150и академических часов, примерно 15 академических минут в лучшем случае. Значительная часть курса (40 часов) посвящена математическим структурам в разработке алгоритмов.
S>То есть, никаких базовых знаний о "функционировании современных ЦПУ". Специальность есть, а знаний — нет. Уже только этим опровергается твой тезис о том что должно быть известно каждому студенту, даже подразумевая мнимую часть "студенту специальности программист". Куда уж там про пролог и эпилог функции, реализация каррирования в машинных кодах. И устройства современных компьютеров там тоже нет.

О, сколько ты тут понаписал, чтобы хоть как-то оправдать косяк со своей же ссылкой. И я теперь понял твой подход к образованию: выбираем самый слабый курс из всех возможных, лишь бы он удовлетворял нужным формальным признакам для корочки. Но я думаю что тебе не стоило останавливаться на таком промежуточном решение — проще было сразу купить нужные корочки в переходе и на этом успокоиться, всё равно никакой разницы в итоге не наблюдается.

S>>>что получившим специальность 010200 не место на этом форумме.

_>>А вот тут ты откровенно наврал. Потому что я вполне однозначно писал, что прийти в профессию можно и получив непрофильное (к 010200 это не относится) фундаментальное образование. Для этого достаточно самостоятельно изучить программистскую специфику. И многие хорошие специалисты, которых я знаю, именно так и делали. А вот ты похоже не осилил. )
S>Т.е. 010200 все-таки профильное, отъехал таки? Отлично. Но вот почему студент, обладая дипломом по профильной специальности 010200, не осилил прийти в профессию — я так и не догнал.

Ну кто же тебя знает, почему у тебя есть только корочки и при этом отсутствуют необходимые базовые знания. То ли ВУЗ был слишком слабый, то ли ты там не учился, а экзамены сдавал сомнительными способами. У меня как-то совсем нет желания разбираться в этом вопросе. Не ты первый, не ты последний.

Единственное, что слегка удивляет в данной ситуации, это то, что ты приходишь на программистский форум и начинаешь там доказывать, что программисту не нужны знания архитектуры ЭВМ. Причём делаешь это сразу после откровенного косяка, вызванного твоим незнанием именно данного вопроса. Это конечно уже редкое явление... )))

_>>А как же твоё утверждение, пару сообщений назад, о том что свойства apply полностью определяются значением её первого параметра? Это же получается, что при соответствующем параметре функция станет ad hoc или как? )

S>Ну вот от того что тебе со мной настолько сложно, я предлагаю для начала разобраться с чистотой функции map. Определяется ли по-твоему чистота функции map функцией, переданной параметром? Да/нет/не знаю?

Ну т.е. на вопрос ответить ты опять же не хочешь. И пытаешься переключить разговор на другую тему. Понятно всё с тобой. )))

_>>И да, значит чтобы определить вид полиморфизма функции (любой, а не только ФВП, раз ты требуешь весь стек анализировать) невозможно обойтись анализом кода (исходного или машинного, не важно) только этой функции, правильно?

S>Это зависит от фукнции. Функция apply не выполняет никаких специальных для типа T действий, если их не выполняет переданная функция f. В то время как выполнение функции my_equal_to не может обойтись без выполнения специальных для типа T действий.

Но в коде функции my_equal_to нет никаких специальных для типа T действий. Там есть только вызов оператора равенства для типа eq. А что там уже в нём (ad hoc или что-то ещё) мы не можем узнать без анализа кода типа eq (т.е. уже другого, стороннего кода).

S>>>Действительно, ПП не требует модифицировать и дополнять код. Не наш, не чей-то, а вообще код.

_>>Ой, я смотрю у тебя совсем забавные проблемы с логикой... Ну расскажи мне как ты добавишь новый тип в проект, не модифицировав никак код этого проекта? )
S>1) что такое код проекта и каким образом он относится к определению ПП?

Это исходники необходимые для сборки проекта.

S>2) возможно у меня в проекте уже есть такой тип, который не работает с твоей my_equal_to. Что с ним делать?


А зачем с ним что-то делать? Если у нас есть тип, который нельзя сравнивать, то очевидно, что и my_equal_to с ним работать не должна.

S>3) csc /out:1.exe *.cs (никакого кода проекта)




_>>Оператор равенства в языке (во всяком случае таком как C++) — это безусловно специальный полиморфизм. Только вот это не имеет никакого отношения к нашей функции, в ней же никаких специализаций нет. Более того, в ней даже прямого вызова этого оператора нет — только вызов некой функции, переданной как указатель (внутри типа eq).

S>Специальный код сравнения будет выполнен во время выполнении функции my_equal_to?

1. Может да, а может нет — по коду my_equal_to это понять невозможно.
2. Даже если и будет, то этот код не будет относится к анализируемому на предмет полиморфизма куску кода.

_>>А она и не должна. У нас функция определена на определённом множестве типов, а не для всех типов. Это вполне нормально для параметрического полиморфизма, что ты кстати сам явно доказывал в ветке дискуссии по ссылке ниже. )

S>Еще раз, не лениво.
S>

S>Strachey [Strachey 67] distinguished, informally, between two major kinds of polymorphism.
S>Parametric polymorphism is obtained when a function works uniformly on a range of types: these types
S>normally exhibit some common structure. Ad-hoc polymorphism is obtained when a function works, or
S>appears to work, on several different types (which may not exhibit a common structure) and may behave in
S>unrelated ways for each type.

S>Это из работы Карделли. Если функция может вести себя по-разному на нескольких разных типах, которые могут не представлять общую структуру, то это AH.

Всё верно. Но причём тут это? Какое имеет отношение ситуация с разными определениями под разные типы к ситуации когда у нас есть ровно одно определение, но действующее для не для всех возможных (но при этом для бесконечного потенциального множества) типов.

S>А то, что я там 5 лет назад доказывал — это ты решил себе такую подмену сделать? Извини, я не могу спорить с тем собой, который был 5 лет назад.


Да у тебя тут уже начинаются споры не только с собой 5-и летней давности, но и с собой "на пару сообщений раньше". )))

_>>Ну так ты же назвал оператор равенства расширением функции my_equal_to даже за более безобидный факт (за вызов этого оператора через переданный указатель), чем просто прямое использование. Собственно да, у тебя изначальная идея была даже более бредовой, чем показанная мною аналогия. Скорее правильнее говорить что ты считаешь printf расширением функции apply, если где-то в коде встречается вызов типа "apply(printf, "");".

S>Я назвал расширением оператор равенства? Не думаю, что бы я мог использовать такой термин осмысленно. Я не знаю, что он означает. А говорить что я считаю оператор равенства или printf расширением чего-то можно будет лишь после того, как ты уточнишь термин расширение, я пойму о чем речь, и подтвержу, что я так считаю. А до тех пор — я считаю что это твоя демагогия.

Ну так для этого надо обратиться в первую очередь к тебе, потому как изначально в данном контексте употребил данное слово именно ты:

А функции сравнения для разных типов при этом не являются расширением одной и той же функции? Или их не нужно писать вместе с новыми типами?


_>>Да там у тебя полно классных фраз просто отлично "гармонирующих" с данной дискуссией. Например типа таких: "Определение ПП не требует (потенциально) бесконечного кол-ва типов." Но мне особенно понравилась "на C++ потенциальную бесконечность типов мы можем обеспечить во время компиляции, поместив что надо в заголовок и залив на гитхаб.".

S>Рад, что тебе понравилось. Но определение ПП действительно явно не требует бесконечность.

Ой, а кто же это несколько сообщений назад так настаивал на необходимости работы с бесконечным числом типов? )

S>А вот по поводу гитхаба я что-то не очень понял. Боюсь, это у меня такой юмор был. Юмор мой и сейчас недалеко ушел, но я сейчас ту шутку не могу оценить по достоинству. Если это была шутка, конечно.


Нет, это у тебя тогда была не шутка, а вариация на тему моего аргумента несколько сообщений назад, о том что потенциальная бесконечность легко достигается добавлением новых типов в проект (и при этом обсуждаемый кусок кода не надо переделывать, что и означает ПП).
Re[46]: benchmark
От: alex_public  
Дата: 06.03.17 14:49
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

_>>Гораздо интереснее глянуть что с этим в Java и C#. Потому что технически никаких проблем сделать аналогичное нет — это не одна из многих проблемных для Java/C# оптимизаций, недоступных из-за дизайна языка. Но из этого факта совсем не следует автоматический вывод о том, что именно так всё и реализовано. Потому что в JIT компиляторах этих языков в данный момент полно вполне возможных, но не реализованных оптимизаций.


EP>В .NET вроде только начинает появляться: https://rsdn.org/forum/dotnet/6715987.1
Автор: rameel
Дата: 04.03.17


Там кстати дальше по ветке интересно почитать — похоже наблюдается некоторое разделение сторонников "большого .net" и .net core. А с учётом того, что упомянутые оптимизации пока только в .net core обещаются, то... )))

А вообще да, похоже что они наконец то постепенно осознают реальность и начинают сдвигать вектор развития в правильном направление. Только вот это надо было делать лет 10 назад, а не сейчас. Ну MS как всегда в своём стиле... )))
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.