Информация об изменениях

Сообщение Re[43]: Nemerle через 5 лет - выстрелит или скончается? от 06.10.2014 12:40

Изменено 06.10.2014 12:48 Evgeny.Panasyuk

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

VD>С другой стороны выделение памяти в хипе тоже в разы быстрее.


В вопросах производительности не имеет особого смысла рассматривать выделение памяти отдельно от освобождения.
Но да, есть случаи, как уже выше сказал alex_public, где стандартный аллокатор управляемых языков будет быстрее стандартных new/delete C++

VD>В итоге преимущество становится иллюзорным и слихвой покрывается существенно больше безопасностью кода и простотой программирования.


VD>У плюсов и сей действительно есть некоторые преимущества в области оптимизации, но чем за это приходится платить? Надежность, временем необходимым на доведение кода до качественного состояния, сложностью в дизайне и т.п. В среднем же, если не заниматься вылизыванием каждой строчки кода, то оставание дотнета не превысит и двух раз. Реальный средний гандикап измеряется процентами. Ну, а там где нужно вылизать есть ансэйф и даже С/С++.


Вот только нужно не забывать, что C++ это не только преимущества в скорости, но ещё и в гибкости.
На C# — шаг влево, шаг вправо и упираешься в забор
Автор: Evgeny.Panasyuk
Дата: 03.11.13
, в результате код получается более многословный.
Обобщённый код (это даже не метапрограммирование) на 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# будет облом.
И, что-то мне подсказывает, если это и получится на Nemerle, то не так складно, ибо система типов .NET — примитивней
Ожидаю блаб-объяснений что это и не нужно, потому что можно без этого
Re[43]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:

VD>С другой стороны выделение памяти в хипе тоже в разы быстрее.


В вопросах производительности не имеет особого смысла рассматривать выделение памяти отдельно от освобождения.
Но да, есть случаи, как уже выше сказал alex_public, где стандартный аллокатор управляемых языков будет быстрее стандартных new/delete C++

VD>В итоге преимущество становится иллюзорным и слихвой покрывается существенно больше безопасностью кода и простотой программирования.


VD>У плюсов и сей действительно есть некоторые преимущества в области оптимизации, но чем за это приходится платить? Надежность, временем необходимым на доведение кода до качественного состояния, сложностью в дизайне и т.п. В среднем же, если не заниматься вылизыванием каждой строчки кода, то оставание дотнета не превысит и двух раз. Реальный средний гандикап измеряется процентами. Ну, а там где нужно вылизать есть ансэйф и даже С/С++.


Вот только нужно не забывать, что C++ это не только преимущества в скорости, но ещё и в гибкости.
На C# — шаг влево, шаг вправо и упираешься в забор
Автор: Evgeny.Panasyuk
Дата: 03.11.13
, в результате код получается более многословный.
Обобщённый код (это даже не метапрограммирование) на 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# будет облом.
И, что-то мне подсказывает, если это и получится на Nemerle, то не так складно, ибо система типов .NET — примитивней
Ожидаю блаб-объяснений что это и не нужно, потому что можно без этого