суббота, 16 мая 2015 г.

[prog.flame.c++14] Таки почему Rust не убийца C++...

...хорошо показывает вот эта презентация о новой библиотеке для шаблонного метапрограммирования в C++14 под названием Hana.

Презентация не простая. Для ее полного понимания нужно иметь очень хорошее знание C++. Я, например, понимал далеко не все.

Тем не менее, это именно то направление, куда движется C++. И это совсем не то направление, в котором пытается застолбить себе нишу Rust.

Складывается ощущение, что Rust ставит себе целью сократить количество проблем при программировании на C. Грубо говоря, Rust позиционируется как инструмент, посредством которого человек продолжает писать на C, но попытки выстрела в ногу пресекаются компилятором. Причем уровень безопасности определяется разработчиками языка/компилятора.

Тогда как C++ последние лет 20-25 развивается так, чтобы позволить прикладным программистам писать максимально высокоуровневый код, который при этом имеет достойную эффективность. И защита от отстреливания ног обеспечивается не жесткими требованиями языка/компилятора, а свойствами заточенных под задачу прикладных библиотек.

Как раз Hana, на мой взгляд, является показательным этапом эволюции средств шаблонного метапрограммирования, запущенного в массы с легкой руки Александреску. Да, для этого потребовалось много времени. Тем не менее, результат развития языка и экосистемы вокруг него, на примере Hana можно увидеть достаточно четко.

Повторюсь: то, что демонстрирует Hana -- это направление движения C++. Пока это авангард, но через 5-7 лет такие вещи станут обыденными для средней руки разработчиков. Что, имхо, уже сейчас делает разработку на C++ более похожей на разработку на Haskell-е или OCaml-е, чем на программирование на C, пусть даже с классами.

Поэтому вряд ли Rust сможет стать убийцей C++. Ведь одно дело бить по рукам программиста за попытку вызвать free() не в том месте. И совсем другое -- предоставлять набор средств для произвольного повышения уровней абстракции. По моему скромному опыту, упрощение решения сложных задач и минимизация количества ошибок за счет использования более высокоуровневых библиотек гораздо важнее, чем контроль за временем уничтожения объектов со стороны компилятора.

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