Здравствуйте, Evgeny.Panasyuk, Вы писали:
НС>>Практические соображения и алгоритмическая выразительность это разные вещи. Алгоритмически все это можно было бы уложить в один небольшой метод.
EP>Номинально да, на практике же имеем совсем не номинальный boilerplate.
На практике такие задачи встречаются крайне редко.
НС>>Далеко не только. Еще недавно она была нужна даже для таких базовых вещей как лямбды.
EP>"Недавно" это уже лет шесть как назад.
Меньше 5.
EP> И это всё же передёргивание.
Нет, это все же факт. Причем 5 лет назад мы тут слышали ровно те же самые песни.
НС>>И для плохонького аналога анонимных типов она понадобилась. Причем ее не хватило в итоге, и пришлось допиливать при помощи макросов препроцессора.
EP>Каких конкретно макросов?
http://rsdn.ru/forum/dotnet/6462036.1Автор: Evgeny.Panasyuk
Дата: 05.06.16
НС>>Ты обсуждаешь простейший алгоритм на С++ с его конкретной реализацией для дотнета, содержащей кучу подробностей, связанных со спецификой платформы. Это самая натуральная демагогия.
EP>На C++ из всей "специфики платформы" к этому алгоритму будет несколько десятков строк врапперов для Range интерфейсов
И? Понимаешь, никто тут не утверждает, в отличие от любителей С++, что С# круче всех и лишен каких либо недостатков. Они у него, разумеется, есть. Один из недостатков — отсутствие арифметики в дженериках (точнее этот недостаток не у него, а у платформы). И именно из-за него пришлось делать ту самую кучу перегрузок.
Это проблему можно частично решить — см. Operators там же, в CodeJam. Но все равно остается некоторый оверхед, поэтому в максимально универсальном коде проще перегрузки сгенеритью.
К счастью, на практике в прикладном коде писать дженерик-арифметику с высокими требованиями к перформансу приходится редко (а там где часто — там .NET не лучший выбор).
В общем, совершенно стандартная ситуация — где то выигрываем, где то проигрываем. И только любители С++ чудесным образом не замечают кучу недостатков любимого языка, и разводят на тему "С++ круче всех" километровые флеймы.
НС>>Или давай вспомним, что куча плюсовых OR/M вообще не поддерживают NULL в value колонках, видать из-за крутой алгоритмической выразительности.
EP>Причём тут ограничения каких-то левых OR/M