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



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

那么,为了简化语法和/或增强功能,哪些已建立的编程语言可以编译成C/C++源代码?

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

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

GHC(Glasgow Haskell编译器)过去有一个选项(-fvia-c)编译到C。

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

OOC是一个非常新但非常好的东西。

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

报价Qt文档:

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

所以这有点像C++变成了C++,我不确定它是否符合你想要的。

编程语言IBMInformix4GL经过多步骤转换为C代码,然后将其编译并链接到自己的运行库、ESQL/C(嵌入式SQL in C)运行库和系统的C库。

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

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

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

可嵌入公共Lisp(ECL)可以将公共Lisp编译为C。

我想你可以为LLVM编写一个C后端,然后你可以将几乎所有的东西翻译成C,但更深层次的问题是"为什么?",为什么不把目标对准一些中间的机器代码语言呢?(例如LLVM或JVM)

现在,在旧时代,编译到C的想法更有说服力,因为当时缺乏像样的vm语言,但今天没有太多好的理由这样做。也就是说,你仍然可以找到很多项目,它们采用某些解释语言,并试图将它们编译到C/C++。例如,这里有一个python到C++的编译器:

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

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

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

至于我对这个列表的贡献,lex和yacc"程序"(如果可以这么认为的话)通常被转换成C代码——这是一个可怕的、混乱的混乱,但C代码。。。

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

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

可以将Matlab(嵌入式Matlab)的子集编译为C。您需要嵌入式编码器工具箱。

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

如果你正在寻找一种通用的、易于学习的语言,Python总是一个不错的选择,它可以做C/C++所能做的一切。

最新更新