67

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?

JasonMArcher's user avatar
JasonMArcher
15.1k22 gold badges59 silver badges53 bronze badges
askedJun 27, 2011 at 20:55
Jeff's user avatar
11
  • 7
    Duplicate ofstackoverflow.com/questions/1721804/…CommentedJun 27, 2011 at 20:59
  • 7
    Any 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++.CommentedJun 27, 2011 at 20:59
  • 3
    I 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.CommentedJun 27, 2011 at 21:00
  • 7
    Interesting 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.CommentedJun 27, 2011 at 21:15
  • 2
    Exact duplicate (or near enough) ofstackoverflow.com/questions/1721804CommentedJun 28, 2011 at 5:01

14 Answers14

20

The languageHaxe can output to C++, C#, Java, JavaScript, Python(experimental), PHP, Flash and NekoVM.

Mark Knol's user avatar
Mark Knol
10.3k3 gold badges31 silver badges44 bronze badges
answeredJul 8, 2011 at 0:05
M.Stoffregen's user avatar
Sign up to request clarification or add additional context in comments.

2 Comments

A List of Go-to-C, & Hexe-to-*, *-to-Haxe, & other (source-to-source) Transpilers / Translators / Transformers / TransCompilers :stackoverflow.com/questions/64180191
A List of Go-to-C , & Go-to-C++/Cpp , & Hexe-to-* , & *-to-Haxe , & other source-to-source Transpilers / TransCompilers :aterik.github.io/Transpiler.and.similar.List
17

Vala andGenie are languages that use the GObject type system and compile to C code. I've never used them but they look interesting. GObject is the type system used by GTK but I believe it's separable from GTK.

answeredJul 7, 2011 at 20:38
Sean's user avatar

Comments

11

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.

answeredJul 11, 2011 at 9:40
stusmith's user avatar

Comments

10

OOC is very new but quite nice.

answeredJul 12, 2011 at 21:29
tsg's user avatar

Comments

9

There'sHipHop, which transforms PHP programs to C++.

answeredJun 27, 2011 at 20:58
GWW's user avatar

Comments

8

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.

answeredJun 27, 2011 at 21:07
Vinicius Kamakura's user avatar

2 Comments

QT is the form of C++ that doesn't trigger my gag reflex.
Agreed. Win32 was awful to read. The stuff with meta oblects, e.g. isn't part of C++, so it's an extended C++ that compiles to C++.
4

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 code
  • program.4ec - C code with embedded ESQL/C and extended input operations
  • program.ec - C code with embedded ESQL/C
  • program.c - pure C code
  • program.o - object code
  • program - 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.

answeredJul 8, 2011 at 0:40
Jonathan Leffler's user avatar

Comments

4

Embeddable Common Lisp (ECL) can compile Common Lisp to C.

answeredJul 10, 2011 at 16:44
sigjuice's user avatar

Comments

3

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:

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

answeredJun 27, 2011 at 21:05
Mikola's user avatar

3 Comments

The "why" is actually easy to explain: you could (i.e. UE4, as I am now) want to use an framework, where only C/C++ is accepted, but you want to use a higher-level language. Cross-platform requirements of the framework might preclude simply using some other language, andlinking to the framework.
Another reason so you would have higher-level debugging for example C++ presuming you haven’t yet developed a debugger for your programming language.
Some things that precompile to C++ aim to limit error-prone features of the language, so as to produce programs with fewer bugs.
1

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...

answeredJul 7, 2011 at 21:18
thkala's user avatar

Comments

0

I hear that clang can compile C++ into C. I doubt that would "simplify" anything, though.

answeredJun 27, 2011 at 20:59
Kerrek SB's user avatar

Comments

0

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

answeredJun 27, 2011 at 21:05
dave's user avatar

Comments

0

A subset of Matlab (Embedded Matlab) can be compiled to C. You need the embedded coder toolbox.

answeredJul 7, 2011 at 20:54
edgar.holleis's user avatar

Comments

-3

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.

answeredJun 27, 2011 at 21:04
Chriszuma's user avatar

2 Comments

-1 : "Python is always a good choice, and it can do everything that C/C++ can" ...This is balant misinformation ; nothing could be further from the truth.
@AnAnt But this is at least partly true: there are several compilers thattranslate Python to C or C++.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.