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

Я говорю что если брать сферические рассуждения о гипотетической возможности оптимизировать код с тормозных языков до уровня C++ — то да,
теоретически это вполне возможно, даже для динамически типизированных
S>Но возможность приблизить скорость выполнения .Net код к C++ это просто небольшой плюсик не более, что бы убрать у С++ ников их главный козырь.
1. Дело-то не в .NET, а в C# — сам язык, его семантика и идиомы не способствуют производительности.
2. Приблизить, то есть убрать некоторые из тормозов — да, возможно. Но выйти на одинаковый уровень — в обозримом будущем маловероятно.
3. Производительность это не единственный козырь C++, помимо этого например кроссплатформенность, и гибкость языка.
| | пример |
| | Вот например, на Python можно сделать так (будет работать для любых типов имеющих соответствующие операторы):
def add(x, y):
return x + y
def sub(x, y):
return x - y
def apply(f, *args):
return f(*args)
print(apply(apply, apply, apply, add, 1, 2))
print(apply(apply, apply, sub, 11, 2))
Аналог на C++:
auto add = [](auto x, auto y)
{
return x + y;
};
auto sub = [](auto x, auto y)
{
return x - y;
};
auto apply = [](auto f, auto... args)
{
return f(args...);
};
print(apply(apply, apply, apply, add, 1, 2));
print(apply(apply, apply, sub, 11, 2));
На C# будет облом. |
| | |