0

Я читал книгу о Compiler Design и есть часть в нем, который говорит,Правильно ли это утверждение о языках функционального программирования?

Основное различие в составителей различных языков связана с кодом, генерируемым ими. В общем, можно сказать, что компиляторы для императивных и объектно-ориентированных языков генерируют код на языке ассемблера; тогда как компиляторы функциональных языков генерируются на C или C++.

Является ли последняя часть о C/C++ правильной? Я не мог найти ничего в поиске Google, поэтому я спрашиваю здесь.

+1

Да, C является популярным промежуточным форматом для языков более высокого уровня, потому что для каждой архитектуры существуют компиляторы C. От http://yosefk.com/blog/c-as-an-intermediate-language.html: «* Он чрезвычайно портативен, он компилируется в удобном режиме, прекрасно оптимизируется, и вы получаете возможность взаимодействия с множеством вещей. *« – Bergi

+2

Это [не только функциональные языки] (http://stackoverflow.com/questions/6498850/programming-languages-that-compile-into-cc-source). Однако языки, использующие функциональную парадигму, обычно более высокого уровня, поэтому вы, скорее всего, найдете их в этой категории. – Bergi

+2

См. Также межсайтовый дубликат [Когда имеет смысл сначала скомпилировать мой собственный язык с кодом C?] (Http://softwareengineering.stackexchange.com/q/257868/66652) на [SoftwareEngineering.SE] – Bergi

ответ

5

Является ли последняя часть о C/C++ правильной?

Нет, это не так.

Некоторые языки компилируются в C, но это не относится к функциональным языкам. Если это более распространено среди функциональных языков, чем нефункциональных, то, конечно, это не так, что можно назвать этим свойством функциональных языков.

Далее, определенно, не так, что большинство языков функционального программирования реального мира скомпилированы в C (по их официальной и/или самой используемой реализации). Если я перечислю первые десять функциональных языков программирования/реализаций, о которых я могу думать (Haskell (GHC, Hugs), OCaml, F #, Scala, Clojure, Racket, Common Lisp (SBCL, CLisp)), ни один из них не компилируется с C (до насколько я знаю). В какой-то момент GHC имел поддержку C, но это было прекращено.

Два языка, о которых я могу думать, чьи основные реализации, скомпилированные в C, являются Vala и Haxe, ни один из которых не является функциональными языками. В одной из связанных нитей была упомянута «Куриная схема». Итак, это одна относительно известная реализация, использующая C. Этого недостаточно, чтобы оправдать утверждение о том, что это «обычно».

+0

Мощный компилятор языка испускает LLVM-IR. –

Смежные вопросы