




В C++ нет экосистемы в смысле Java или .NET. Нет ни виртуальной машины, ни даже среды выполнения, есть только узкоспециализированная стандартная библиотека, которая по замыслу плохо работает в чисто функциональной среде. В C++ даже нет стандарта ABI.
Учитывая все обстоятельства, я не уверен, что вы имеете в виду / ожидаете.
Поскольку Scala компилируется в байт-код Java, а F# компилируется в байт-код .NET, предназначенный для работы на соответствующих виртуальных машинах. Правильное сравнение было бы, если есть какой-то функциональный язык, который компилируется в машинно-зависимый код, готовый к запуску на компьютере, и да, есть.
Я не думаю, что вы это имели в виду, но лучшее, что я могу предложить, - это FC++. Способствовать росту - еще одна библиотека, которая имеет множество функций, которые можно распознать как производные от функционального программирования.
Однако я готов поспорить, что «настоящего» функционального программирования на C++: es не существует.
Ах, еще кое-что. Хотя это, конечно, не то, что вы имели в виду, метапрограммирование шаблона в C++ является чисто функциональным.
Как уже было сказано, я не совсем уверен в «экосистеме» C++. Но Haskell действительно имеет интерфейс внешних функций, который позволяет вам вызывать функции C из Haskell и функции Haskell из C.
Опять же, это C, я не совсем уверен, насколько далеко продвинулся C++ FFI ...
C++ не может быть чисто функциональным языком, но части STL, безусловно, функциональны.
См. Бьярн Страуструп: часто задаваемые вопросы (изобретатель C++)
Не совсем: C++ не имеет первоклассных функций с автоматическим захватом среды. То, что вы имеете в виду, чрезвычайно утомительно и гораздо менее выразительно. Кроме того, Бьярне Страуструп и Алекс Степанов вообще совершенно не правы, когда дело касается функционального программирования.
В C++ 0x есть первоклассные функции с автоматическим захватом среды в форме лямбда-выражений, хотя при обычном управлении ресурсами C++ применяются предостережения (из-за отсутствия GC).
Язык D был разработан как преемник C++. Чисто функциональное подмножество D разрабатывается Андреем Александреску для D 2.0. Я предполагаю, что D хорошо взаимодействует с C++.
D на самом деле плохо работает с C++. Вы почти всегда должны писать обертки C.
Я согласен с тем, что не уверен в экосистеме для C++. OCaml довольно популярен для функционального программирования вне .NET. F# также основан на нем.
Язык Феликс Джона Скалера разработан для взаимодействия с C++ и обеспечивает функциональную парадигму.
Однако с этим возникают проблемы. Функциональные языки предоставляют первоклассные функции, которые позволяют создавать замыкания: функции, которые захватывают и переносят значения из среды, в которой они были определены. Это делает невозможным статическое определение времени жизни значений (поскольку замыкание может переносить значение из его область действия) и, следовательно, эффективно требует сборщика мусора, но C++ не собирает мусор.
Феликс очень хорошо интегрируется с C++.
Этот вопрос был опубликован в 2008 году. Для справки: C++ 11 и более поздние версии поддерживают функциональное программирование. Смотрите еще одно обсуждение, обновленное для этого Функциональное программирование на C++
Причина, по которой я остановился на этом вопросе, заключается в поиске краткого в использовании (то есть с минимальными строками понятного человеку кода) языка с C++.