0

私はコンパイラ設計に関する本を読んでいましたが、その中に次のような部分があります。

さまざまな言語のコンパイラの主な違いは、それらによって生成されるコードに関係しています。一般に、命令型およびオブジェクト指向言語のコンパイラはアセンブリ言語でコードを生成すると言えます。一方、関数型言語コンパイラは C または C++ で生成されます。

C/C++ に関する最後の部分は正しいですか? Googleで検索しても出てこなかったのでこちらで質問させていただきます。

4

1 に答える 1

6

C/C++ に関する最後の部分は正しいですか?

いいえ、ちがいます。

一部の言語は C にコンパイルされますが、これは関数型言語に固有のものではありません。これが非関数型言語よりも関数型言語でより一般的である場合、これを関数型言語の特性と呼ぶほどではないことは確かです。

さらに、ほとんどの実際の関数型プログラミング言語が (公式の実装や最も使用されている実装によって) C にコンパイルされているというわけではありません。私が思いつく最初の 10 の関数型プログラミング言語/実装 (Haskell (GHC、Hugs)、OCaml、F#、Scala、Clojure、Racket、Common Lisp (SBCL、CLisp)) をリストすると、それらのどれも C にコンパイルされません (to私の知る限り)。GHC には、ある時点で C バックエンドがありましたが、廃止されました。

私が考えることができる 2 つの言語のうち、主な実装が C にコンパイルされるのは Vala と Haxe であり、どちらも関数型言語ではありません。リンクされたスレッドの 1 つで、Chicken Scheme が言及されました。これは、C を使用した比較的よく知られた実装の 1 つです。「一般的に」そうであるという主張を正当化するには、これだけでは不十分です。

于 2016-11-20T23:30:49.543 に答える