2008-08-24 5 views
11

Java hat Scala und .NET hat F#. Beide Sprachen sind sehr stark in die jeweiligen Java- und .NET-Plattformen integriert. Klassen können in Scala geschrieben und dann beispielsweise in Java erweitert werden.Gibt es eine funktionale Sprache für C++ - Ökosystem?

Gibt es eine äquivalente funktionale Sprache, die hochgradig mit C++ interoperiert?

Antwort

7

C++ hat kein Ökosystem im Sinne von Java oder .NET. Es gibt keine virtuelle Maschine, keine Laufzeitumgebung selbst, es gibt nur eine hoch spezialisierte Standardbibliothek, die in einer rein funktionalen Umgebung nicht gut funktioniert. C++ hat nicht einmal einen ABI Standard.

Alles in allem bin ich mir nicht sicher, was Sie meinen/erwarten.

+1

Der Grund, warum ich auf diese Frage landete ist auf der Suche nach einer prägnanten zu verwenden (d. H. Minimale Zeilen des menschlichen verständlichen Codes) Sprache mit C++. –

3

Da Scala in Java-Bytecode kompiliert wird und F # in .NET-Bytecode kompiliert wird, wird sie auf ihren jeweiligen virtuellen Maschinen ausgeführt. Der richtige Vergleich wäre, wenn es eine funktionale Sprache gibt, die sich zu maschinenabhängigem Code kompiliert, bereit ist, auf einem Computer zu laufen, und ja, es gibt sie.

Ich glaube nicht, dass Sie das meinten, aber das Beste, was ich zu bieten habe, ist FC++. Boost ist eine andere Bibliothek, die eine Menge von Funktionen aufweist, die als aus funktionaler Programmierung abgeleitet erkannt werden können.

Allerdings würde ich wetten, es gibt keine "echte" funktionale Programmierung C++: es da draußen.

5

Wie gesagt, ich bin mir nicht wirklich sicher über ein C++ "Ökosystem". Aber Haskell hat eine Foreign Function Interface, die Sie C-Funktionen von Haskell und Haskell Funktionen von C.

Dann wieder aufrufen können, das ist C, ich bin nicht wirklich sicher, wie weit die C++ FFI ist ...

-1

C++ ist vielleicht keine reine funktionale Sprache, aber Teile von STL sind sicherlich funktional.

Siehe Bjarne Stroustrup FAQ (der Erfinder der C++)

+3

Nicht wirklich: C++ hat keine erstklassigen Funktionen mit automatischer Umgebungserfassung. Was Sie sagen, ist schleimig langweilig und weit weniger ausdrucksvoll. Auch Bjarne Stroustrup und Alex Stepanov sind in der Regel völlig falsch, wenn es um funktionale Programmierung geht. –

+2

C++ 0x hat First-Class-Funktionen mit automatischer Umgebungserfassung in Form von Lambdas, obwohl mit den üblichen C++ - Ressourcen-Management-Vorbehalten gelten (wegen des Fehlens von GC). –

3

Stufe 'D' Sprache als Nachfolger von C++ entwickelt wurde. Eine rein funktionale Teilmenge von D wird von Andrei Alexandrescu für D 2.0 entwickelt. Ich denke, D interagiert gut mit C++.

+1

D funktioniert eigentlich nicht gut mit C++. Sie müssen fast immer C-Wrapper schreiben. – Zifre

1

Ich stimme zu, dass ich mir eines Ökosystems für C++ nicht sicher bin. OCaml ist ziemlich beliebt für die funktionale Programmierung außerhalb von .NET. F # basiert auch darauf.

8

Die Felix Sprache von John Skaller ist entworfen, um mit C++ zusammenzuarbeiten und das funktionale Paradigma bereitzustellen.

Es gibt jedoch Probleme dabei. Funktionale Sprachen bieten erstklassige Funktionen, die die Erstellung von Closures ermöglichen: Funktionen, die Werte aus der Umgebung, in der sie definiert wurden, erfasst und übertragen haben. Dies macht es unmöglich, die Lebensdauer von Werten statisch zu bestimmen (weil ein Closure einen Wert enthalten könnte) seinen Umfang) und folglich effektiv einen Garbage Collector erfordert, aber C++ ist kein Garbage Collection.

+0

Felix integriert sich sehr gut mit C++. – refi64

0

Diese Frage wurde im Jahr 2008 veröffentlicht. Als Referenz haben C++ 11 ab Unterstützung für die funktionale Programmierung.Siehe eine andere Diskussion aktualisiert für diese Functional Programming in C++

Verwandte Themen