我正在读一本关于编译器设计的书,其中有一部分说,
不同语言的编译器的主要区别在于它们生成的代码。一般来说,可以说命令式语言和面向对象语言的编译器生成汇编语言代码;而函数式语言编译器以 C 或 C++ 生成。
最后一部分关于 C/C++ 的内容正确吗?我通过谷歌搜索找不到任何东西,所以我在这里问。
最后一部分关于 C/C++ 的内容正确吗?
不,不是。
有些语言确实可以编译为 C,但这并不特定于函数式语言。如果这在函数式语言中比非函数式语言更常见,那么肯定不会有人将其称为函数式语言的属性。
此外,大多数现实世界的函数式编程语言绝对不会被编译为 C(通过其官方和/或最常用的实现)。如果我列出我能想到的前十种函数式编程语言/实现(Haskell(GHC、Hugs)、OCaml、F#、Scala、Clojure、Racket、Common Lisp(SBCL、CLisp)),它们都不会编译为 C(以据我所知)。 GHC 确实曾经有过 C 后端,但现已停止使用。
我能想到的两种主要实现编译为 C 的语言是 Vala 和 Haxe,它们都不是函数式语言。在其中一个链接的线程中,提到了“鸡计划”。这是一个相对知名的使用 C 的实现。这不足以证明“通常”情况是这样的说法。