Re[19]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.08.16 14:40
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.

S>>>>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет.
EP>>>Вообще-то разница огромная.
EP>>>Например замыкания в C++ можно принимать в ФВП по конкретному типу, то есть без всякого динамического полиморфизма — такое элементарно инлайнится. А вот косвенные вызовы на объектах произвольного размера инлайнить на порядки труднее.
EP>>>Более того, инлайнинг это не единственный плюс относительно производительности — помимо этого например превалирующая value семантика.
S>> Так и в C# тоже можно. Так же статически можно определить передаваемый тип.

EP>C++:

EP>
EP>template<typename F>
EP>auto foo(F f)
EP>{
EP>    return f();
EP>}

EP>int main()
EP>{
EP>    auto x = 0;
EP>    return foo([=]{ return x; });
EP>}
EP>
Здесь внутри foo, ещё до всяких оптимизаторов, известен и конкретный тип замыкания F, и его размер, и конкретный вызываемый метод.

EP>Аналог на C# в студию.


 T foo<T>(Func<T> f)
{
  return f();
}

int main()
{
    var x = 0;
    return foo<int>(=>{ return x; });
}


Не знаю может ли вывести тип дженерика, но по идее и так должно работать.
Я например в своей компоненте вывожу тип в рантайме.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 09.08.2016 14:45 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.