Здравствуйте, samius, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>> Так параметрический полиморфизм хорошь в том, что он инлайнится.
S>> Я привожу тебе примеры где Дженерики прекрасно инлайнятся. Но при этом получаем проверку типа и интеллисенсе.
S>Вы все еще об этом примере?
S>S>return arr.Where(x => x > q).Select(x => x + 3).Sum();
S>
S>Если да, то в нем предикат и проекция записаны изначально в виде, не относящемся к параметрическому полиморфизму. "x > q" и "x + 3" здесь используют ad-hoc полиморфизм. Это один момент. Второй — инлайнятся Func-и, но не операторы. Вот если бы изначально было записано
S>S>x => SomeGenericComparer.Compare(x, q) > 0
S>
S>подозреваая что метод Compare<T> дженериковый; компилятор выводит T, и после оптимизации мы увидели бы "x > q", то да!
В свое время VladD2 на висби еже дела тест при компараторе на структуре и тогда они инлайнили компаратор. Но затем решили, что это не нужно.
То есть если компаратор заранее известен, то и проинлайнить как это делается в C++ с шаблонами.
Но нужно это только для валуе типов.
В большинстве же случаев ты будешь использовать линк
arr.Where(x => x > q).Select(x => x + 3).Sum();
Который и сейчас прекрасно инлайнится.