Re[48]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.01.17 14:52
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>Т.е. если компаратор заранее известен, то никакого отношения к инлайну дженерикового компаратора это не имеет.


S> Угу, а как же шаблоны то инлайнят функции при специализации, если компаратор не известен

В момент специализации шаблона он известен.

S>Еще раз


S>
S>public static IEnumerable<TSource> Where<TSource>(
S>    this IEnumerable<TSource> source,
S>    Func<TSource, bool> predicate
S>)
S>


S> Здесь как ты видишь дженерик метод Func<TSource, bool> predicate

S>При этом автоматически выводится тип.
Дженерик метод, точнее делегат и выводящийся тип я вижу. Я не вижу здесь дженерикового компаратора. Его в этом примере нет, изначально есть лишь оператор сравнения для Int32. И в процессе инлайна Where и т.п., вызов оператора сравнения Int32 остается самим же собой. Т.е. с ним абсолютно ничего не происходит.

S>>Инлайнится Where, Select и Sum, функция, принимающая целый x и сравнивающая с q, функция, добавляющая целому 3. Но никак не компаратор и оператор сложения. Параметрически полиморфны здесь Where и Select, но не компаратор, сложение и Sum.


S> Еще раз, нет никаких особых препятствий для инлайнинга сомпараторов при специализации как это делается в C++.

Препятствий-то нет, но и инлайнинга тоже нет.
S>При этом в том же Net Native как раз это и происходит.
Можно ссылку? Еще раз уточню, я ожидаю увидеть автоматический разворот обобщенного компаратора Compare<T>(T, T) в специальный для типа T. Именно это я подразумеваю под инлайном дженерикового компаратора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.