Здравствуйте, 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>Мы пока еще не договорились по поводу того, что считать параметрическим.
ЧТД. Ниасилил? Бывает. ))