Здравствуйте, Serginio1, Вы писали:
EP>>То есть ещё раз, код C# чисто по построению намного труднее оптимизировать — для оптимизаций до уровней аналогичных C++ нужно либо язык модифицировать, либо делать оптимизаторы намного более мощные чем оптимизаторы C++
S> А можно поподробнее чем
S>S> T foo<T>(Func<T> f)
S> {
S> return f();
S> }
S>
S>Принципиально отличается
S>S>template<typename F>
S>auto foo(F f)
S>{
S> return f();
S>}
S>
Тем что на C# после всех подстановок схематически получается:
class AbstractF
{
public:
virtual int virtual_call() = 0;
};
int foo(AbstractF *f)
{
return f->virtual_call();
}
А на C++:
struct ConcreteF
{
int x;
int concrete_call()
{
return x;
}
};
int foo(ConcreteF f)
{
return f.concrete_call();
}
S> И почему для C++ проще занматься оптимизацией?
В этом примере — на C++ вызов конкретного метода, известен размер замыкания и стэковая аллокация. На C# виртуальный вызов, неизвестен размер замыкания и аллокация в куче.
Виртуальный вызов и прочее можно соптимизировать, но это очевидно более сложная задача чем заинлайнить простой вызов конкретного метода
S>T4 работают,
Причём тут T4?