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

S>>>Что всё? Дотнет нейтив? Ну будет на худой конец компилятор указывать тип компарера.

V>>Не будет до тех пор, пока ограничения генериков не станут частью типа.
S>Что мешает?

Загадка, если честно.
Должно было сразу же быть как надо.
Причем, такие изменения можно сделать не ломая имеющийся код.


V>>Да ничего ты не написал. ))

V>>У тебя нет самой возможности писать конкурирующие специализации в C#, типа таких:
S>Так ты хотел именно конкурирующие специализации? Извини, из твоих постов я это не понял.

А к чему нужны точно так же как нужна перегрузка ф-ий.
Без неё тяжело, верно.
Тут аналогично — это просто перегрузка ф-ий по типу аргумента.


S>А к чему они нужны, что они доказывают?


Странно ты вопросы формулируешь. ))
Наверно они доказывали бы наличие головы у авторов языка.


V>>В С++ такой трюк возможен, в Хаскеле возможен, в C# — нет.

S>Верно, нет. Но если бы было возможно, это был бы ad-hoc.

Да. Это был бы ad hoc сверху параметрического полиморфизма, как в любом современном языке с поддержкой типизированного параметрического полиморфизма. На то она и типизированность, чтобы отличать типы друг от друга.


V>>Тут просто надо помнить, в чем был аргумент этих горе-обвинителей. По их мнению, "полноценный" — это который работает на рекурсивно-определяемых типах. Правда, эти обвинители не обратили внимание, что ограничение на рекурсивно-определяемые типы в С/С++ никак не связаны с параметрическим полиморфизмом, что последний унаследовал исходные возможности объявления типов языка.

S>Вот зачем ты мне рассказываешь про каких-то горе-обвинителей? Они не смогли оценить твою победу над ними и ты хочешь что бы я сделал это за них?

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


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

S>Дотнет тоже умеет использовать ad-hoc.

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


V>>Так-то в С++ можно придумать овердохрена способов всевозможнейших ограничений.

V>>См. type traits и function traits.
S>Ну можно.

Ну. В C# — нельзя.

Это я к тому, что в отличие от С++, в случае дотнета в сам язык/платформу надо включать много чего, для повышения выразительности.
Например, см. идиому С++ enable_if — она работает сугубо за счёт уже имеющихся ср-в языка.


V>>Потому что нельзя породить несколько версий List<T> с разными ограничениями на T. Или в одном List<T> нельзя давать методы с разными ограничениями на T.

S>А ЗАЧЕМ?

Зачем типизировать T? ))
Да еще статически-типизированном языке?

Странные ты опять вопросы задаешь...
Затем, вестимо, чтобы не происходило стирание типов. Чтобы больше сценариев удавалось разресолвить в момент компиляции, без всяких рефлексий и кодогенераций. Помнишь, в эпоху до генериков народ упражнялся в автогенерации "типизированных коллекций"? Или ты не застал эти времена?


V>>Курьёз в том и состоит, что как пример ad hoc-полиморфизма ты мне приводил в Хаскеле как раз те примеры, где ограничение на тип является частью полиморфного типа.

S>Какая разница? elem — ad hoc. IndexOf — ad hoc. Что именно меняет то, на что ты упираешь?

Дудки. Твой IndexOf не в состоянии быть ad hoc, потому что ты не можешь подать на него разные обобщенные типы.
И да, обе ф-ии параметрически полиморфны, сначала. А потом уже, в случае Хаскеля, возможен ad hoc. Потому что elem определена не только для обобщенных типов, но и для монотипов — для пустого списка, например.

V>>Т.е., курьёз у тебя происходит классический: тут смотрим, тут не смотрим, тут рыбу заворачиваем. ))

S>И там и там смотрим — видим ad-hoc. Рыба у тебя какая-то с параметрическим elem.

Верно. Среди нескольких (ровно двух) ad hoc определений elem есть вариант параметрически-полиморфного определения.
И можно добавлять свои параметрически-полиморфные определения для, скажем, неких своих моделей списков.
Оно так и должно работать.


S>Детсад — это утверждение что система типов каким-то образом влияет на то, ad hoc или нет.


Детсад — что-то утверждать за оппонента.


S>Покажи, откуда это вообще следует?


Покажи сие странное утверждение.


V>>В случае обеих языков ad hoc происходит не там.

S>нене, языки тут не при чем. Это в твоей голове ad hoc происходит не там.

Ясно.
За своей головой лучше бы посмотрел.

Потому что потом вообще идёт жесть и закономерный финал:

V>>А зря. По всей этой ветке это был тот самый единственный, который необходимый и достаточный аргумент, дающий исчерпывающий мой поинт относительно проблем параметрического полиморфизма в C#.

S>Мы пока еще не договорились по поводу того, что считать параметрическим.

ЧТД. Ниасилил? Бывает. ))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.