12

JavaにはScalaがあり、.NETにはF#があります。これらの言語は両方とも、それぞれのJavaおよび.NETプラットフォームに非常に高度に統合されています。クラスはScalaで記述してから、たとえばJavaで拡張できます。

C ++と高度に相互運用する同等の関数型言語はありますか?

4

9 に答える 9

8

ああ、何か他のもの。これは確かにあなたが意図したことではありませんが、C++でのテンプレートメタプログラミングは純粋に機能的です。

于 2008-08-24T12:26:13.197 に答える
8

John SkallerによるFelix言語は、C++ と相互運用し、関数型パラダイムを提供するように設計されています。

ただし、これを行うには問題があります。関数型言語は、クロージャーの作成を可能にするファーストクラスの関数を提供します。関数は、値が定義された環境から値をキャプチャして保持します。これにより、値の有効期間を静的に決定することができなくなります (クロージャーはそのスコープ) であり、その結果、効果的にガベージ コレクターが必要になりますが、C++ はガベージ コレクトされません。

于 2008-10-20T05:56:24.420 に答える
7

C ++には、Javaまたは.NETという意味でのエコシステムはありません。仮想マシンもランタイム環境もありません。設計上、純粋に機能的な環境ではうまく機能しない、高度に専門化された標準ライブラリしかありません。C++にはABI標準すらありません。

すべてを考慮して、私はあなたが何を意味するか/期待するかわかりません。

于 2008-08-24T12:24:32.013 に答える
6

言われているように、C++ の「エコシステム」についてはよくわかりません。しかし、Haskellには、Haskell から C 関数を呼び出したり、C から Haskell 関数を呼び出したりできる外部関数インターフェイスがあります。

繰り返しになりますが、これは C です。C++ FFI がどこまで進んでいるかはよくわかりません...

于 2008-08-24T13:20:11.990 に答える
3

ScalaはJavaバイトコードにコンパイルされ、F#は.NETバイトコードにコンパイルされるため、それぞれの仮想マシンで実行されます。正しい比較は、マシンに依存するコードにコンパイルされ、コンピューターで実行する準備ができている関数型言語があるかどうかです。そうです。

それがあなたの意図したことではないと思いますが、私が提供しなければならない最高のものはFC++です。Boostは、関数型プログラミングから派生したものとして認識できる多くの機能を備えたもう1つのライブラリです。

ただし、「実際の」関数型プログラミングC ++:esは存在しないと思います。

于 2008-08-24T12:25:52.993 に答える
3

「D」言語は、C++ の後継として設計されました。D の純粋に機能的なサブセットが、D 2.0 用に Andrei Alexandrescu によって開発されています。D は C++ とうまく相互運用できると思います。

于 2008-08-24T21:01:48.247 に答える
1

C++ のエコシステムについて確信が持てないことに同意します。 OCamlは、.NET の外部で関数型プログラミングを行う場合に非常に人気があります。F# もそれに基づいています。

于 2008-08-24T21:08:47.603 に答える
-1

C++ は純粋な関数型言語ではないかもしれませんが、STL の一部は確かに関数型です。

Bjarne Stroustrup FAQ (c++ の発明者) を参照してください 。

于 2008-08-24T18:09:55.787 に答える