Ответ 1
Я думаю, что история (хотя я недостаточно взрослая, чтобы рассказать всю историю), boost:: bind был впервые создан для замены сложного в использовании bind1st/bind2nd в С++ 98, и он достигает его цель и теперь часть С++ 11. Но также, как и последние 10 лет, появление стиля функционального программирования в С++, boost:: lambda нажимает на него до сих пор (на момент его создания), что поддерживает достаточно широкий набор функциональных конструкций с чистым библиотечным подходом в С++.
А потом, как я знаю из группы новостей, автор boost:: lambda и boost:: phoenix попытается объединить две библиотеки, поскольку они имеют дело с одной и той же проблемой. Я предполагаю, что это был прекрасно спроектированный boost:: phoenix2
И затем наступает boost:: proto, который является библиотекой для написания шаблонов выражений, или я бы сказал, что это мета-библиотека. Итак, феникс-нирвана снова, возродившись на boost:: proto, тогда мы видим phoenix3. Я думаю, что phoenix3 является самым мощным среди всех вышеперечисленных.
С другой стороны, С++ 11 добавляет поддержку языка для лямбда-выражения, который я лично считаю очень полезным и удобным. Единственный недостаток - это не полиморфный (в то время как phoenix3 позволяет создавать объекты полиморфной функции).
В качестве вывода о том, что я прихожу с личным опытом, выражение лямбда С++ 11 - это выбор для повседневной работы, если таковой имеется. Он удобен, понятен и удобен во время компиляции. Phoenix3 является полиморфным, очень мощным, очень крутым, с недостатком длительной компиляции.