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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
3 180
9

Ответы 9

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

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

Причина, по которой я остановился на этом вопросе, заключается в поиске краткого в использовании (то есть с минимальными строками понятного человеку кода) языка с C++.

amit 24.05.2010 14:51

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

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

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

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

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

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

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

См. Бьярн Страуструп: часто задаваемые вопросы (изобретатель C++)

Не совсем: C++ не имеет первоклассных функций с автоматическим захватом среды. То, что вы имеете в виду, чрезвычайно утомительно и гораздо менее выразительно. Кроме того, Бьярне Страуструп и Алекс Степанов вообще совершенно не правы, когда дело касается функционального программирования.

J D 20.10.2008 10:02

В C++ 0x есть первоклассные функции с автоматическим захватом среды в форме лямбда-выражений, хотя при обычном управлении ресурсами C++ применяются предостережения (из-за отсутствия GC).

Pavel Minaev 12.07.2009 12:35

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

D на самом деле плохо работает с C++. Вы почти всегда должны писать обертки C.

Zifre 26.04.2009 23:04

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

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

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

Феликс очень хорошо интегрируется с C++.

kirbyfan64sos 13.04.2015 21:34

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

Другие вопросы по теме