Функциональное программирование на С++

Андрей Александреску - "Современное проектирвоание на языке С++" ======> "Как я трахнул ёжика"
C++ - ужасный, страшный, и совершенно уродский язык.
Однако, знаете ли вы, что
* С++ шаблоны - это полноценная нетипизированная лямбда? (вы не ослышались, нетипизированная. Сами шаблоны внутри себя типов не имеют).
* На шаблонах можно построить нумералы Чёрча
* На шаблонах выполняются три типа редукции
* Инстанцирование шаблона - это редукция терма в нормальную форму
* Шаблоны С++ - полноценный glue language для метапрограммирования, прозрачно проинтегрированный с самим С++ (lisp проинтегрирован лучше, template haskell - хуже)
* Язык шаблонов тьюринг-полон, и программы на нём написанные выполняются на этапе компиляции
В целом, однозначно, я не видел настолько мощного языка для обобщенного программирования, метапрограммирования.
В ocaml не хватает параметрического полиморфизма, в lisp типизации (в С++ нетипизированная лямбда внутри шаблонов, но типизированный результирующий код. Уникальный feature, нигде больше такого не видел), а в haskell - простоты.
Да, вы не ослышались, шаблоны С++ и язык на их базе очень прост.
Как-нибудь напишу примерчики и маленький туториал
Теперь ложка дёгтя
* Очень медленно компилируется и требуется прорву оперативной памяти для компиляции. Фактически, имеет экпонециальную зависимость оперативной памяти потребляемой компилятором и размер объектных файлов от размера кода.
* Замангленные в Си имена ужасно нечитаемы
* Не имеет внятной и удобной стратегии обработки ошибок метапрограмм
* Не имеет удобного отладчика
* Совершенно ублюдский, многословный, неочевидный синтаксис
Знакомиться just for fun - обязательно. Я уверен, что у шаблонов C++ есть чему поучиться программистам на всех языках.
Книги для чтения

