Здравствуйте, Serginio1, Вы писали:
S>>> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.
S>>>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет.
EP>>Вообще-то разница огромная.
EP>>Например замыкания в C++ можно принимать в ФВП по конкретному типу, то есть без всякого динамического полиморфизма — такое элементарно инлайнится. А вот косвенные вызовы на объектах произвольного размера инлайнить на порядки труднее.
EP>>Более того, инлайнинг это не единственный плюс относительно производительности — помимо этого например превалирующая value семантика.
S> Так и в C# тоже можно. Так же статически можно определить передаваемый тип.
C++:
template<typename F>
auto foo(F f)
{
return f();
}
int main()
{
auto x = 0;
return foo([=]{ return x; });
}
Здесь внутри foo, ещё до всяких оптимизаторов, известен и конкретный тип замыкания F, и его размер, и конкретный вызываемый метод.
Аналог на C# в студию.