Re[16]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 09.08.16 13:20
Оценка: +1
Здравствуйте, 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# будет облом.
Отредактировано 09.08.2016 13:22 Evgeny.Panasyuk . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.