Re[47]: «Собаку съел»
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 20.01.17 07:08
Оценка:
Здравствуйте, 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 как раз это и происходит.
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.