JavaにはScalaがあり、.NETにはF#があります。これらの言語は両方とも、それぞれのJavaおよび.NETプラットフォームに非常に高度に統合されています。クラスはScalaで記述してから、たとえばJavaで拡張できます。
C ++と高度に相互運用する同等の関数型言語はありますか?
ああ、何か他のもの。これは確かにあなたが意図したことではありませんが、C++でのテンプレートメタプログラミングは純粋に機能的です。
John SkallerによるFelix言語は、C++ と相互運用し、関数型パラダイムを提供するように設計されています。
ただし、これを行うには問題があります。関数型言語は、クロージャーの作成を可能にするファーストクラスの関数を提供します。関数は、値が定義された環境から値をキャプチャして保持します。これにより、値の有効期間を静的に決定することができなくなります (クロージャーはそのスコープ) であり、その結果、効果的にガベージ コレクターが必要になりますが、C++ はガベージ コレクトされません。
C ++には、Javaまたは.NETという意味でのエコシステムはありません。仮想マシンもランタイム環境もありません。設計上、純粋に機能的な環境ではうまく機能しない、高度に専門化された標準ライブラリしかありません。C++にはABI標準すらありません。
すべてを考慮して、私はあなたが何を意味するか/期待するかわかりません。
言われているように、C++ の「エコシステム」についてはよくわかりません。しかし、Haskellには、Haskell から C 関数を呼び出したり、C から Haskell 関数を呼び出したりできる外部関数インターフェイスがあります。
繰り返しになりますが、これは C です。C++ FFI がどこまで進んでいるかはよくわかりません...
ScalaはJavaバイトコードにコンパイルされ、F#は.NETバイトコードにコンパイルされるため、それぞれの仮想マシンで実行されます。正しい比較は、マシンに依存するコードにコンパイルされ、コンピューターで実行する準備ができている関数型言語があるかどうかです。そうです。
それがあなたの意図したことではないと思いますが、私が提供しなければならない最高のものはFC++です。Boostは、関数型プログラミングから派生したものとして認識できる多くの機能を備えたもう1つのライブラリです。
ただし、「実際の」関数型プログラミングC ++:esは存在しないと思います。
「D」言語は、C++ の後継として設計されました。D の純粋に機能的なサブセットが、D 2.0 用に Andrei Alexandrescu によって開発されています。D は C++ とうまく相互運用できると思います。
C++ のエコシステムについて確信が持てないことに同意します。 OCamlは、.NET の外部で関数型プログラミングを行う場合に非常に人気があります。F# もそれに基づいています。
C++ は純粋な関数型言語ではないかもしれませんが、STL の一部は確かに関数型です。
Bjarne Stroustrup FAQ (c++ の発明者) を参照してください 。