Здравствуйте, samius, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>Здравствуйте, samius, Вы писали:
S>> В свое время VladD2 на висби еже дела тест при компараторе на структуре и тогда они инлайнили компаратор. Но затем решили, что это не нужно.
S>> То есть если компаратор заранее известен, то и проинлайнить как это делается в C++ с шаблонами.
S>Т.е. если компаратор заранее известен, то никакого отношения к инлайну дженерикового компаратора это не имеет.
Угу, а как же шаблоны то инлайнят функции при специализации, если компаратор не известен
Еще раз
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
Здесь как ты видишь дженерик метод Func<TSource, bool> predicate
При этом автоматически выводится тип.
S>>Но нужно это только для валуе типов.
S>> В большинстве же случаев ты будешь использовать линк
S>>S>>arr.Where(x => x > q).Select(x => x + 3).Sum();
S>>
S>> Который и сейчас прекрасно инлайнится.
S>Инлайнится Where, Select и Sum, функция, принимающая целый x и сравнивающая с q, функция, добавляющая целому 3. Но никак не компаратор и оператор сложения. Параметрически полиморфны здесь Where и Select, но не компаратор, сложение и Sum.
Еще раз, нет никаких особых препятствий для инлайнинга сомпараторов при специализации как это делается в C++.
При этом в том же Net Native как раз это и происходит.