Compiler construction 编译为惯用C语言

Compiler construction 编译为惯用C语言,compiler-construction,haskell,lisp,Compiler Construction,Haskell,Lisp,有没有编译成惯用C语言的函数或lisp-ish语言的编译器?大多数编译器似乎提供了类似于由C宏组成的机器语言的东西。我想知道是否有什么东西可以基于更高级的语言生成可读的C代码。我只找到了一个。我不确定您是否可以将大多数函数式语言转换为LISP。结构和语法不太匹配。我相信你可以找到许多转换器,尽管C++。 对于Common Lisp,目前只有一个广泛使用的编译器可以编译成C:。您需要查看输出是否足够可读 几年前,一家公司出售了一个通用的Lisp编译器,正是为了这个目的:将Lisp编译成“可维护的”

有没有编译成惯用C语言的函数或lisp-ish语言的编译器?大多数编译器似乎提供了类似于由C宏组成的机器语言的东西。我想知道是否有什么东西可以基于更高级的语言生成可读的C代码。

我只找到了一个。我不确定您是否可以将大多数函数式语言转换为LISP。结构和语法不太匹配。我相信你可以找到许多转换器,尽管C++。 对于Common Lisp,目前只有一个广泛使用的编译器可以编译成C:。您需要查看输出是否足够可读


几年前,一家公司出售了一个通用的Lisp编译器,正是为了这个目的:将Lisp编译成“可维护的”C。这个编译器非常昂贵。它不再可用,但似乎仍在一两家公司中使用:。

haskell编译器内置编译为C。尽管IIRC没有那么好看。
(选中,main=putStrLn“你好,世界!”


编辑:当然是GHC。

鉴于你用Haskell标记了这个问题,我将给出一个Haskell答案。是一个Haskell编译器,它可以生成非常惯用的ansi-C。它是一个优化的全程序编译器,可以生成速度非常快的二进制文件。不过,我不确定它目前有多稳定,而且它的大小似乎有限制RoGrad它可以处理。但是不要相信我自己的话。< /P> < P>有一个叫编译器的编译器,它产生了高度优化的C源代码。

但是……为什么你要它这样做?问题是,不管你看起来如何,许多高级结构在C级上都是凌乱的。例如,考虑嵌套的闭包。我很好奇。ng如果有足够聪明的编译器,例如,能够弄清楚如何将尾部递归循环转换为for循环,或者能够将内容转换为CP并使用蹦床传递数据结构。至少这通常是可读和可理解的。GCC足够聪明,能够发现尾部递归循环(甚至几乎是尾部递归循环)史蒂夫:当然,每个方案编译器都需要找出尾部递归。有几个Haskell编译器,不止一个可以编译成C,所以如果你说明你在谈论哪一个,那会很有帮助环到GHC,然后是的,它生成的C不是很漂亮,也远不是惯用的。JHC在这方面要好得多。不过GHC现在正努力摆脱通过C编译的模式。他们正在开发一种新的奇特的后端,它将能够完成他们以前使用C编译器进行的所有低级优化。我不明白为什么我应该得到一个向下投票,因为我的答案没有错?我没有向下投票给你,但很抱歉,这是错的。我特别要求使用“惯用C”,而你的回答是生成“不是很好看”的C,与我的要求相反。(但无论如何,谢谢!)我的缺点是,我实际上根本没有看到这个词。我给了Lisp-to-C一个要点,因为这个项目是专门为我的问题设计的,但不幸的是,它不再可用。我真的在考虑给你一个要点,因为JHC似乎按照你的建议生成了非常友好的代码。如果我能给出多个点就好了无论如何,谢谢你给我指点JHC,这是一个非常好的项目。我生成了一个简单的可执行文件,只有16K!