Сообщение Re[19]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом от 09.08.2016 14:40
Изменено 09.08.2016 14:45 Serginio1
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
S>>>> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.
S>>>>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет.
EP>>>Вообще-то разница огромная.
EP>>>Например замыкания в C++ можно принимать в ФВП по конкретному типу, то есть без всякого динамического полиморфизма — такое элементарно инлайнится. А вот косвенные вызовы на объектах произвольного размера инлайнить на порядки труднее.
EP>>>Более того, инлайнинг это не единственный плюс относительно производительности — помимо этого например превалирующая value семантика.
S>> Так и в C# тоже можно. Так же статически можно определить передаваемый тип.
EP>C++:
EP>
EP>Аналог на C# в студию.
Не знаю может ли вывести тип дженерика, но по идее и так должно работать.
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; });
}Не знаю может ли вывести тип дженерика, но по идее и так должно работать.
Re[19]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
S>>>> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.
S>>>>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет.
EP>>>Вообще-то разница огромная.
EP>>>Например замыкания в C++ можно принимать в ФВП по конкретному типу, то есть без всякого динамического полиморфизма — такое элементарно инлайнится. А вот косвенные вызовы на объектах произвольного размера инлайнить на порядки труднее.
EP>>>Более того, инлайнинг это не единственный плюс относительно производительности — помимо этого например превалирующая value семантика.
S>> Так и в C# тоже можно. Так же статически можно определить передаваемый тип.
EP>C++:
EP>
EP>Аналог на C# в студию.
Не знаю может ли вывести тип дженерика, но по идее и так должно работать.
Я например в своей компоненте вывожу тип в рантайме.
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; });
}Не знаю может ли вывести тип дженерика, но по идее и так должно работать.
Я например в своей компоненте вывожу тип в рантайме.