Re[24]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 10.08.16 11:29
Оценка:
Здравствуйте, 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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.