编译成C / C ++源代码的编程语言?

时间:2011-06-27 20:55:26

标签: c++ c programming-languages code-translation

我正在使用CoffeeScript来简化JavaScript开发。它是一种语法清晰的语言,可以编译成JavaScript。

那么,为了简化语法和/或增强功能,编译成C / C ++源代码的既定编程语言是什么?

14 个答案:

答案 0 :(得分:15)

语言Haxe可以输出到C ++,C#,Java,JavaScript,Python(实验),PHP,Flash和NekoVM。

答案 1 :(得分:13)

ValaGenie是使用GObject类型系统并编译为C代码的语言。我从来没有使用它们,但它们看起来很有趣。 GObject是GTK使用的类型系统,但我相信它可以与GTK分开。

答案 2 :(得分:9)

OOC很新但非常好。

答案 3 :(得分:8)

HipHop,它将PHP程序转换为C ++。

答案 4 :(得分:8)

GHC(格拉斯哥Haskell编译器)以前有一个选项(-fvia-c)可以编译为C.

我相信从v7开始,LLVM用于生成本机代码,而不是通过外部C编译器。

答案 5 :(得分:6)

引用Qt文档:

  

元对象编译器moc是处理Qt C ++扩展的程序。   moc工具读取C ++头文件。如果它找到一个或多个包含Q_OBJECT宏的类声明,它将生成一个C ++源文件,其中包含这些类的元对象代码。除此之外,信号和槽机制,运行时类型信息和动态属性系统都需要元对象代码。   必须编译moc生成的C ++源文件并将其与类的实现链接。

所以这种C ++变成了C ++,我不确定它是否适合你想要的东西。

答案 6 :(得分:4)

编程语言IBM Informix 4GL经过多步转换为C代码,然后编译并链接到自己的运行时库,ESQL / C(嵌入式SQL in C)运行时库和系统的C库

  • program.4gl - 原始源代码
  • program.4ec - 包含嵌入式ESQL / C和扩展输入操作的C代码
  • program.ec - 嵌入式ESQL / C的C代码
  • program.c - 纯C代码
  • program.o - 对象代码
  • program - 可执行文件

.4ec阶段是一种历史事故;最初,ESQL / C编译器处理扩展输入操作和ESQL / C,但是当从ESQL / C编译器中删除扩展操作时(当ESQL / C库和编译器被重写时),扩展输入操作通过从原始ESQL / C编译器中删除处理该代码的代码来处理。

相当多的人编写了代码生成器,这些代码生成器从另一种语言编写I4GL源代码,或者在提交给I4GL编译器之前将密切相关的源代码预处理到I4GL中。

答案 7 :(得分:4)

Embeddable Common Lisp (ECL)可以将Common Lisp编译为C。

答案 8 :(得分:3)

我想你可以为LLVM写一个C后端,然后你可以将任何东西翻译成C,但更深层次的问题是“为什么?”今天没有任何工具可以做到这一点的原因是,如果你要编译成C,为什么不一直走到目标并使用一些中间机器代码语言呢? (例如,LLVM或JVM)

现在在过去的日子里,编译到C的想法更加可靠,因为缺乏合适的vm语言,但今天没有太多理由去做。也就是说,您仍然可以找到许多项目,这些项目采用某些解释语言并尝试将它们编译为C / C ++。例如,这是一个python到C ++编译器:

http://shed-skin.blogspot.com/

答案 9 :(得分:1)

有人可能会说,由于大多数主要编程语言都是Turing-complete,因此它们实际上是等价的,并且编写在其中的程序可以相互翻译。

也就是说,就像其他人提到的那样,有很多语言可以生成C代码(或者曾经是他们开发的早期阶段)后端,因为这样可以消除二进制代码生成所涉及的复杂性。语言实现。这绝不意味着(双关语)所述代码实际上是可读的 - 它比其编译形式更具可读性。

至于我对列表的贡献,lexyacc“程序”(如果可以认为它们)通常会转换为C代码 - 这是一个可怕的,混乱的混乱,但C尽管如此......

答案 10 :(得分:0)

我听说clang可以将C ++编译成C.我怀疑这会“简化”任何东西。

答案 11 :(得分:0)

大多数语言都可用于生成C代码,但这实际上取决于您要做的事情。你真的希望能够阅读代码吗?您是否只是尝试创建Windows应用程序?

如果您正在寻找一种易于学习的通用语言,Python始终是一个不错的选择,它可以完成C / C ++所能做的所有事情。

答案 12 :(得分:0)

Oracle的PRO * C / C ++是一种嵌入式SQL语言。它允许在C / C ++中包含SQL语句,该语句由预编译器处理,该预编译器使用对所需C / C ++ SQL库的函数调用替换嵌入式SQL语句。预编译器的输出是标准的C / C ++,然后可以编译成可执行文件。

http://en.wikipedia.org/wiki/Pro*C
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14407/toc.htm

答案 13 :(得分:0)

Matlab(嵌入式Matlab)的一个子集可以编译为C.你需要嵌入式编码器工具箱。