Существует ли функциональный язык для экосистемы С++?
Java имеет Scala и .NET имеет F #. Оба эти языка очень сильно интегрированы в соответствующие платформы Java и .NET. Классы могут быть записаны в Scala, а затем расширены в Java, например.
Существует ли эквивалентный функциональный язык, который очень хорошо взаимодействует с С++?
Ответы
Ответ 1
Язык Феликса Джона Скаллера разработан для взаимодействия с C++ и обеспечения функциональной парадигмы.
Есть проблемы с этим, хотя. Функциональные языки предоставляют первоклассные функции, которые позволяют создавать замыкания: функции, которые собирают и переносят значения из среды, в которой они были определены. Это делает невозможным статическое определение времени жизни значений (поскольку замыкание может нести значение из его объем) и, следовательно, фактически требует сборщика мусора, но C++ не является сборщиком мусора.
Ответ 2
С++ не имеет экосистемы в смысле Java или .NET. Там нет виртуальной машины, даже среды исполнения, есть только высокоспециализированная стандартная библиотека, которая по дизайну не работает хорошо в чисто функциональной среде. С++ даже не имеет стандарта ABI.
Все рассмотренные вещи, я не уверен, что вы имеете в виду/ожидаете.
Ответ 3
А, что-то еще. Хотя это, конечно, не то, что вы имели в виду, шаблон метапрограммирования в С++ является чисто функциональным.
Ответ 4
Как уже было сказано, я не уверен в "экосистеме" С++. Но Haskell имеет интерфейс внешней функции, который позволяет вам вызывать функции C из функций Haskell и Haskell из C.
И снова, что C, я не совсем уверен, как далеко по FFI С++...
Ответ 5
Так как Scala компилируется в байт-код Java, а F # компилируется в .NET байт-код, который запускается на соответствующих виртуальных машинах. Правильное сравнение было бы, если бы был какой-то функциональный язык, который компилируется на машинный зависимый код, готовый к запуску на компьютере, и да, есть.
Я не думаю, что это было то, что вы имели в виду, но лучшее, что я могу предложить, это FС++. Boost - это еще одна библиотека, которая имеет множество функций, которые могут быть распознаны как производные от функционального программирования.
Однако, я бы сказал, что нет "реального" функционального программирования С++: es там.
Ответ 6
Язык "D" был разработан как преемник С++. Существенно функциональное подмножество D разрабатывается Андреем Александреску для D 2.0. Я предполагаю, что D хорошо взаимодействует с С++.
Ответ 7
Я согласен с тем, что я не уверен в экосистеме для С++. OCaml довольно популярен для выполнения функционального программирования вне .NET. F # также основывается на нем.
Ответ 8
Этот вопрос был отправлен в 2008 году. Для справки, С++ 11 поддерживает поддержку функционального программирования. См. Другое обсуждение, обновленное для этого Функциональное программирование на С++
Ответ 9
С++ не может быть чистым функциональным языком, но части STL, безусловно, функциональны.
См. Bjarne Stroustrup FAQ (изобретатель С++)