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

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

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

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

Vala和Genie是使用GObjecttypes系统并编译为C代码的语言。 我从来没有用过,但看起来很有趣。 GObject是GTK使用的types系统,但我相信它可以与GTK分离。

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

OOC非常新,但相当不错。

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

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

引用Qt文档:

元对象编译器moc是处理Qt的C ++扩展的程序。 moc工具读取一个C ++头文件。 如果它发现一个或多个包含Q_OBJECTmacros的类声明,它将生成一个包含这些类的元对象代码的C ++源文件。 其中,信号和插槽机制,运行时间types信息和dynamic属性系统需要元对象代码。 必须编译由moc生成的C ++源文件,并将其与类的实现链接起来。

所以这是一种C ++变成C ++,我不知道它是否适合你在找什么。

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

  • program.4gl – 原始的源代码
  • program.4ec – 带有embedded式ESQL / C和扩展input操作的C代码
  • program.ec – embedded式ESQL / C的C代码
  • program.c – 纯C代码
  • program.o – 对象代码
  • program可执行

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

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

可embedded的Common Lisp(ECL)可以将Common Lisp编译为C.

我想你可以为LLVM写一个C后端,那么你可以将任何东西都翻译成C,但是更深层次的问题是“为什么? 今天没有这样做的工具的原因是,如果你要编译到C,为什么不去所有的方向,而是针对一些中间机器代码语言呢? (例如,LLVM或JVM)

现在在较早的时候,编译C语言的想法更加有效,因为缺乏体面的Vm语言,但是今天没有太多充分的理由去做。 也就是说,你仍然可以find很多围绕某些解释性语言的项目,并尝试将它们编译为C / C ++。 例如,这里是一个C ++编译器的Python:

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

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

人们可以争辩说,因为大多数主要的编程语言都是图灵完备的 ,所以它们实际上是等价的,写在其中的程序可以互相翻译。

也就是说,正如其他人已经提到的那样,有相当多的语言(他们在开发早期曾经是(或曾经是)在后端生成C代码,因为从语言实现中去除了涉及二进制代码生成的复杂性。 这并不意味着(双语意味着)所说的代码实际上是可读的 – 它比它的编译forms更具可读性。

至于我对列表的贡献, lex和yacc “程序”(如果他们可以被认为是这样的话)通常被转换成C代码 – 这是一个可怕的,混乱的混乱,但是C代码仍然是…

大多数语言都可以用来生成C代码,但是这实际上取决于你想要做什么。 你真的希望能够阅读代码吗? 你只是想创buildWindows应用程序?

如果您正在寻找一种易于学习的普遍有用的语言,Python总是一个不错的select,它可以完成C / C ++所能做的一切。

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

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

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