Глянул сегодня в блог разработчиков 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++.
Комментариев нет:
Отправить комментарий