I'm usingCoffeeScript to make JavaScript development easier. It's a language with clean syntax that compiles into JavaScript.
So, what are the established programming languages that compile into C/C++ source code, to simplify syntax and/or enhance functionality?
- 7Duplicate ofstackoverflow.com/questions/1721804/…bdonlan– bdonlan2011-06-27 20:59:16 +00:00CommentedJun 27, 2011 at 20:59
- 7Any language could be compiled into C or C++. So I'll assume you're not actually asking aboutlanguages themselves, but about which languages havespecific implementations that compile into C or C++.Brennan Vincent– Brennan Vincent2011-06-27 20:59:22 +00:00CommentedJun 27, 2011 at 20:59
- 3I would argue that it's still a compiler unless there's a close correspondence between the input code and output code (to the point where it's basically just a quick AST transformation). If your 'translator's doing type propagation, etc, then it's probably closer to a compiler.bdonlan– bdonlan2011-06-27 21:00:34 +00:00CommentedJun 27, 2011 at 21:00
- 7Interesting question. Languages in their early stage of development usually compile to C as a precursor to full language development, in an attempt to validate that language features work as expected. Once this is done a language specific front-end is developed as a plugin to an existing back-end. But I would be curious about languages that are specifically designed to just to make using C++ easier. Thus the re-open vote.Loki Astari– Loki Astari2011-06-27 21:15:07 +00:00CommentedJun 27, 2011 at 21:15
- 2Exact duplicate (or near enough) ofstackoverflow.com/questions/1721804Norman Ramsey– Norman Ramsey2011-06-28 05:01:49 +00:00CommentedJun 28, 2011 at 5:01
14 Answers14
The languageHaxe can output to C++, C#, Java, JavaScript, Python(experimental), PHP, Flash and NekoVM.
2 Comments
GHC (the Glasgow Haskell Compiler) used to have an option (-fvia-c
) to compile to C.
I believe that starting with v7 however, LLVM is used to generate native code instead of going via an external C compiler.
Comments
OOC is very new but quite nice.
Comments
There'sHipHop, which transforms PHP programs to C++.
Comments
QuotingQt documentation:
The Meta-Object Compiler, moc, is the program that handles Qt's C++ extensions. The moc tool reads a C++ header file. If it finds one or more class declarations that contain the Q_OBJECT macro, it produces a C++ source file containing the meta-object code for those classes. Among other things, meta-object code is required for the signals and slots mechanism, the run-time type information, and the dynamic property system. The C++ source file generated by moc must be compiled and linked with the implementation of the class.
So it's kind of C++ getting turned into C++, I'm not sure if it fits in what you are looking for.
2 Comments
The programming language IBM Informix 4GL goes through a multi-step transformation to C code, which is then compiled and linked with its own runtime library, the ESQL/C (Embedded SQL in C) runtime libraries, and the system's C libraries.
program.4gl
- original source codeprogram.4ec
- C code with embedded ESQL/C and extended input operationsprogram.ec
- C code with embedded ESQL/Cprogram.c
- pure C codeprogram.o
- object codeprogram
- executable
The.4ec
phase is a sort of historical accident; originally, the ESQL/C compiler handled both the extended input operations and the ESQL/C, but when the extended operations were removed from the ESQL/C compiler (when the ESQL/C library and compiler was significantly rewritten), the extended input operations were handled by carving out the code that handled that from the original ESQL/C compiler.
A fair number of people have written code generators which write I4GL source from another language, or which preprocess a closely related source code into I4GL before it is submitted to the I4GL compiler.
Comments
Embeddable Common Lisp (ECL) can compile Common Lisp to C.
Comments
I suppose you could write a C backend for LLVM, then you could translate pretty much anything down to C, but the deeper question would be "why?" The reason that there aren't any tools that do this today is that if you are going to compile down to C, why not go all the way and target some intermediate machine code language instead? (For example, LLVM or the JVM)
Now in the older days, the idea of compiling down to C was a bit more defensible, since there was a lack of decent vm languages, but today there are not too many good reasons to do it. That said, you can still find plenty of projects around which take certain interpreted languages and try to compile them down to C/C++. For example, here is a python to C++ compiler:
3 Comments
One could argue that since most major programming languages areTuring-complete, they are actually equivalent and programs written in them can be translated into each other.
That said, as other people have mentioned, there are quite a few languages for which there are (or used to be, early in their development) backends that produce C code, since that removed the complexities involved in binary code generation from the language implementation. That does not by any means mean (pun unintended) that said code was actually readable - it was just more readable than its compiled form.
As for my contribution to the list,lex andyacc "programs" (if they can be considered that) are typically transformed into C code - a horrible, tangled mess of it, but C code nonetheless...
Comments
I hear that clang can compile C++ into C. I doubt that would "simplify" anything, though.
Comments
Oracle's PRO*C/C++ is an embedded SQL language. It allows the inclusion of SQL statements in C/C++ which is processed by a precompiler that replaces the embedded SQL statements with function calls to the needed C/C++ SQL libraries. The output from the precompiler is standard C/C++ which can then be compiled to an executable.
http://en.wikipedia.org/wiki/Pro*C
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14407/toc.htm
Comments
A subset of Matlab (Embedded Matlab) can be compiled to C. You need the embedded coder toolbox.
Comments
Most languages can be used to generate C code, but it really depends what you're trying to do. Do you actually want to be able to read the code? Are you just trying to create Windows applications?
If you're looking for a universally useful language that's easy to learn, Python is always a good choice, and it can do everything that C/C++ can.
2 Comments
Explore related questions
See similar questions with these tags.