2008-08-24 1 views
11

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

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

ответ

7

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

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

+1

Причина, по которой я приземлился на этот вопрос, ищет язык с понятным языком (например, минимальные строки с понятным человеком кодом) с C++. – 2010-05-24 10:51:44

3

Поскольку Scala компилируется в байт-код Java и компиляции F # в .NET байт-код, созданный для запуска на соответствующих виртуальных машинах. Правильное сравнение было бы, если бы был какой-то функциональный язык, который компилируется на машинный зависимый код, готовый к запуску на компьютере, и да, есть.

Я не думаю, что это было то, что вы имели в виду, но лучшее, что я могу предложить, это FC++. Boost - это еще одна библиотека, которая имеет множество функций, которые можно распознать как производные от функционального программирования.

Однако, я бы сказал, что нет «реального» функционального программирования C++: es там.

7

Ах, что-то еще. Хотя это, конечно, не то, что вы имели в виду, template metaprogramming в C++ является чисто функциональным.

5

Как уже было сказано, я не уверен в экосистеме C++. Но Haskell имеет Иностранного функции интерфейса, который позволяет вызывать функции C из функций Haskell и Haskell из С.

Тогда опять же, это C, я не совсем уверен, как далеко вдоль C++ FFI является ...

-1

C++ не может быть чистым функциональным языком, но части STL, безусловно, функциональны.

См Bjarne Stroustrup FAQ (изобретатель C++)

+3

Не совсем: C++ не имеет первоклассных функций с автоматическим захватом среды. То, что вы имеете в виду, является изящно утомительным и гораздо менее выразительным. Кроме того, Bjarne Stroustrup и Alex Stepanov, как правило, совершенно неправы, когда дело доходит до функционального программирования. – 2008-10-20 06:02:08

+2

C++ 0x имеет первоклассные функции с автоматическим захватом среды в форме лямбда, хотя с обычными требованиями к управлению ресурсами C++ применяются (из-за отсутствия GC). – 2009-07-12 08:35:23

3

Язык 'D' был разработан в качестве преемника C++. Существенно функциональное подмножество D разрабатывается Андреем Александреску для D 2.0. Я предполагаю, что D хорошо взаимодействует с C++.

+1

D действительно не работает с C++. Вы почти всегда должны писать C обертки. – Zifre 2009-04-26 19:04:35

1

Я согласен с тем, что я не уверен в экосистеме для C++. OCaml довольно популярен для выполнения функциональных программ за пределами .NET. F # также основывается на этом.

8

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

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

0

Этот вопрос был отправлен в 2008 году. Для справки, C++ 11 имеет поддержку функционального программирования.См. Другое обсуждение, обновленное для этого Functional Programming in C++