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

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

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

24.08.2008 12:14:14
9 ОТВЕТОВ

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

Учитывая все обстоятельства, я не уверен, что вы имеете в виду / ожидаете.

7
24.08.2008 12:24:32
Причина, по которой я наткнулся на этот вопрос, заключается в поиске лаконичного (то есть минимального количества строк, понятного человеку) языка с C ++.
amit 24.05.2010 10:51:44

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

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

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

3
24.08.2008 12:25:52

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

7
24.08.2008 12:26:13

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

Опять же, это C, я не совсем уверен, как далеко находится CFI FFI ...

6
24.08.2008 13:20:11

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

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

-1
24.08.2008 18:09:55
Не совсем: C ++ не имеет первоклассных функций с автоматическим захватом среды. То, на что вы ссылаетесь, невероятно утомительно и гораздо менее выразительно. Кроме того, Бьярн Страуструп и Алекс Степанов вообще не правы в функциональном программировании.
Jon Harrop 20.10.2008 06:02:08
C ++ 0x имеет первоклассные функции с автоматическим захватом среды в виде лямбд, хотя с обычными C ++ предостережениями управления ресурсами применимы (из-за отсутствия GC).
Pavel Minaev 12.07.2009 08:35:23

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

3
24.08.2008 21:01:48
D на самом деле не очень хорошо работает с C ++. Вы почти всегда должны писать обертки на Си.
Zifre 26.04.2009 19:04:35

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

1
24.08.2008 21:08:47

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

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

8
10.01.2019 01:37:35
Феликс очень хорошо интегрируется с C ++.
kirbyfan64sos 13.04.2015 18:34:54

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

0
11.07.2017 12:58:57