среда, 8 июня 2016 г.

[prog.c++] Сложность C++ как раз и не позволит ему умереть

Глянул сегодня в блог разработчиков MSVC, в заметку, где рассказывается про улучшения поддержки expression SFINAE. И в приведенных там примерах увидел ответ на вопрос: "Сможет ли какой-то язык заменить C++ в ближайшее время".

Не сможет.

Ибо:

template <class Fp, class A0, class ...Args>
inline auto invoke(Fp && f, A0 && a0, Args && ...args)
-> decltype(((*forward<A0>(a0)).*f)(forward<Args>(args)...))
{
   return ((*forward(a0)).*f)(forward(args)...);
}

Да, это сложно. Да, это выглядит страшно. Да, нужно потратить огромное количество времени, чтобы разобраться в C++ настолько, чтобы без проблем работать с таким кодом. Ну и скажем прямо, далеко на все действующие C++ники способы на это (включая меня самого).

Однако, тут нужно понять простую вещь: необходимость писать подобный код появилась не на пустом месте. Это не Страуструп сидя за рюмкой чая с Саттером в пьяном угаре решили добавить еще пару-тройку фич, чтобы окончательно превратить C++ во write-only language. Такое усложнение языка произошло из-за повседневного использования C++ в проектах, объем и сложность которых далеко не всегда можно себе представить. Т.е. в реальной жизни есть необходимость писать сложный код. Который еще и должен быть эффективным. Для достижения чего C++ и усложняется. И будет усложняться дальше.

Ну а раз C++ усложняется не просто так и, вбирая в себя все больше и больше, упрощает решение насущных проблем, то какой должна быть вымышленная альтернатива C++, которая бы оставила его не у дел?

Альтернатива должна быть такой, чтобы приведенный выше фрагмент записывался просто и понятно. А стоимость в run-time от подобной конструкции чтобы была не выше, чем у C++ (лучше, если еще ниже).

Т.е. должно появится что-то, что умеет все то, что умеет C++, но делает это намного проще, чем C++.

Есть у меня сомнения в том, что это в принципе возможно. И, тем более, еще более сомнительно, что это реализуемо на практике.

PS. То, что для С++ пока не видно альтернатив вовсе не означает, что для C++ осталось много ниш, где его использование было бы оправдано. Очень многие вещи можно (пока?) делать без C++.

Комментариев нет: