65

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

那么,有哪些既定的编程语言可以编译成 C/C++ 源代码,以简化语法和/或增强功能?

4

14 回答 14

17

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

于 2011-07-08T00:05:47.497 回答
14

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

于 2011-07-07T20:38:17.540 回答
9

OOC很新但是很不错。

于 2011-07-12T21:29:17.003 回答
9

GHC(Glasgow Haskell 编译器)曾经有一个选项 ( -fvia-c) 可以编译为 C。

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

于 2011-07-11T09:40:49.087 回答
8

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

于 2011-06-27T20:58:22.003 回答
7

引用Qt文档:

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

所以它是一种 C++ 变成 C++,我不确定它是否适合你正在寻找的东西。

于 2011-06-27T21:07:40.597 回答
4

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

于 2011-07-10T16:44:55.100 回答
4

IBM Informix 4GL 编程语言经过多步转换为 C 代码,然后编译并与它自己的运行时库、ESQL/C(C 中的嵌入式 SQL)运行时库和系统的 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。

于 2011-07-08T00:40:49.713 回答
3

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

现在在过去,编译成 C 的想法更有说服力,因为缺乏像样的 vm 语言,但今天没有太多好的理由去做。也就是说,您仍然可以找到大量使用某些解释语言并尝试将它们编译为 C/C++ 的项目。例如,这是一个 python 到 C++ 的编译器:

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

于 2011-06-27T21:05:13.520 回答
1

有人可能会争辩说,由于大多数主要的编程语言都是图灵完备的,它们实际上是等价的,用它们编写的程序可以相互翻译。

也就是说,正如其他人所提到的,有相当多的语言有(或曾经是,在他们的开发早期)产生 C 代码的后端,因为这从语言实现中消除了二进制代码生成所涉及的复杂性. 这绝不意味着(双关语无意)所述代码实际上是可读的 - 它只是比其编译形式更具可读性。

至于我对列表的贡献,lexyacc “程序”(如果可以考虑的话)通常被转换为 C 代码——这是一个可怕的、纠结的混乱,但 C 代码仍然......

于 2011-07-07T21:18:10.530 回答
0

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

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

于 2011-06-27T21:05:55.040 回答
0

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

于 2011-07-07T20:54:10.553 回答
0

我听说clang可以将C++编译成C。不过,我怀疑这会“简化”任何事情。

于 2011-06-27T20:59:45.890 回答
-1

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

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

于 2011-06-27T21:04:08.433 回答