Существует ли функциональный язык для экосистемы С++?

Java имеет Scala и .NET имеет F #. Оба эти языка очень сильно интегрированы в соответствующие платформы Java и .NET. Классы могут быть записаны в Scala, а затем расширены в Java, например.

Существует ли эквивалентный функциональный язык, который очень хорошо взаимодействует с С++?

Ответ 1

Язык Феликса Джона Скаллера разработан для взаимодействия с C++ и обеспечения функциональной парадигмы.

Есть проблемы с этим, хотя. Функциональные языки предоставляют первоклассные функции, которые позволяют создавать замыкания: функции, которые собирают и переносят значения из среды, в которой они были определены. Это делает невозможным статическое определение времени жизни значений (поскольку замыкание может нести значение из его объем) и, следовательно, фактически требует сборщика мусора, но C++ не является сборщиком мусора.

Ответ 2

С++ не имеет экосистемы в смысле Java или .NET. Там нет виртуальной машины, даже среды исполнения, есть только высокоспециализированная стандартная библиотека, которая по дизайну не работает хорошо в чисто функциональной среде. С++ даже не имеет стандарта ABI.

Все рассмотренные вещи, я не уверен, что вы имеете в виду/ожидаете.

Ответ 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 (изобретатель С++)