Awesome
Compilers targeting C
The following is a list of open source compilers that can generate C (or in some cases, C++) code.
Name | Supported languages | Supported targets | Notes | Links |
---|---|---|---|---|
Alumina | Alumina | C | Inspired by Rust | web repo |
ATS | ATS | C | web | |
Austral | Austral | C | Has some similarities to Haskell and Ada | web repo doc |
BaCon (Basic Converter) | Basic | C | web | |
bc9Basic | Basic | C | Can generate C or C++ code. Runs only on Windows but can generate code for *nix. A fork of BCX that outputs valid ISO/ANSI C. Website archive. | web |
Bigloo | Scheme | C | Scheme (R5RS) | web |
Blech | Blech | C | A synchronous programming language for embedded reactive real-time-critical software. | repo |
bmx-ng | BlitzMax | C | A Monkey-derived BlitzMax to C transpiler. | repo |
Cakelisp | Cakelisp | C, C++ | Lisp-like programming language | web repo doc |
Carp | Carp, Lisp | C | A statically typed lisp, without a GC, for real-time applications. | repo |
Cforall | Cforall, C | C | Extends ISO C and outputs augmented C code | web repo doc |
Chapel | Chapel | C | web | |
CHICKEN Scheme | Scheme | C | Scheme (R5RS) | web |
Ciao | Prolog | C | web | |
CLiCC | Common Lisp | C | Compiles a large strict subset of Common Lisp + CLOS to C. | repo |
Critical Mass Modula-3 | Modula-3 | C | repo | |
Cyclone | Scheme | C | Scheme (R7RS). Cheney on the M.T.A. with native threads. | repo |
Cython | Python | C | web | |
Céu | Céu | C | web | |
eC | eC | C | An object-oriented superset of C with modules and generics. | web |
EiffelStudio | Eiffel | C | web | |
Embeddable Common-Lisp | Common Lisp | C | ANSI Common Lisp | web |
Emfrp | Emfrp | C | A pure functional reactive programming language for small-scale embedded systems. | repo |
Emgo | Go | C | Compiles a subset of Go for 32-bit microcontrollers through C. | repo |
Epic | Epic | C | web | |
Esotope Brainfuck Compiler | Brainfuck | C | repo | |
Euphoria to C Translator | Euphoria | C | web | |
f2c | Fortran 77 | C | web | |
Felix | Felix | C++ | repo | |
FreeBASIC | Basic | C | web | |
fut | Fusion | C, C++, C#, D, Java, JavaScript, Python, Swift, TypeScript, OpenCL | A language for making portable libraries with a syntax like C#. | web |
Futhark | Futhark | C | Purely functional data-parallel language generating OpenCL C | repo |
Gambit | Scheme | C | Scheme (R5RS) | web |
GCL | Common Lisp | C | web | |
Genie | Genie | C | web | |
GHC | Haskell | C | C backend documentation page. | web |
GnuCOBOL | COBOL | C | COBOL 2014 with extensions | web |
go2cpp | Go | C++ | Designed to help port Go to C++ | repo |
GoLite | GoLite, Go | C++ | Transpiles a strict subset of Go | repo |
Harbour | xBase, CA-Clipper | C | xBase compatible with CA-Clipper | repo |
Haxe | Haxe | C, C++ | web | |
Idris | Idris | C | A pure functional programming language with dependent types. | web |
Ivory | Ivory | C | A Haskell eDSL for safe systems programming. | web |
jhc | Haskell 98 | C | The resulting code doesn't use a garbage collector. | web |
Kit | Kit | C | A statically typed procedural language with manual MM, traits, pattern matching, and metaprogramming designed with game development in mind. | web |
Language84 | Language84 | C | web | |
m | m | C, WebAssembly | It targets webassembly but actually it compiles to C and then requires to trigger manually clang to get webassembly | web repo |
ManKai Common Lisp | Common Lisp | C | web | |
matiec | ST, IL, SFC | C | A set of textual languages for PLC programming. (SFC: IEC 61131) | repo |
mbeddr | mbeddr | C | A set of languages for embedded software engineering. | web |
Mercury | Mercury | C | web | |
MLton | Standard ML | C | web | |
Monkey 2 | Monkey 2 | C++ | web | |
Mrustc | Rust | C | repo | |
NectarJS | JavaScript | C | The primary target is WebAssembly. How to compile to C. | repo |
Nelua | Nelua | C | A statically-typed meta-programmable systems programming language heavily inspired by Lua. | web |
Nim | Nim | C, C++, Objective C | web | |
Nit | Nit | C | web | |
NN-512 | NN-512 | C | Graph language. Generate C99 code for neural net inference. | web |
Nuitka | Python | C | web | |
nullc | nullc | C, x86, VM | It is a C-like programming language | repo doc |
OBNC | Oberon | C | web | |
ocamlcc | OCaml | C | Compiles OCaml bytecode to C. | repo |
oi | oi | C | C with traits. Compiles to code that can be directly used from plain C. | repo |
ooc | ooc | C | web | |
OpenDylan | Dylan | C | web | |
p2c | Pascal, UCSD, Turbo Pascal, Modula-2 | C, C++ | Supports several Pascal dialects, including UCSD and Turbo Pascal, Modula-2. | web |
ParparVM | Java bytecode | C | Use for the Java to iOS portability part of the Codename One project. | repo |
perlcc | Perl 5 | C | web | |
prometeo | Python | C | Transpiles subset of Python | repo doc |
PtoC | pascal, Turbo Pascal, Oregon Pascal, ISO Pascal, Sun Pascal, HP Pascal | C, C++ | Transpiles to readable code | repo |
purescript-native | PureScript | C++ | repo | |
Py14 | Python | C++ | repo | |
Pythran | Python | C++ | repo | |
QuickJS | JavaScript | C | Compiles JavaScript (ES2020) to bytecode and embeds the bytecode in C. | web |
Ragel | Ragel | C, C++ | Compiles executable finite state machines from regular languages. | web |
RPerl | RPerl, Perl. | C++ | RPerl, a restricted subset of Perl. Unrelated to RPython. | repo |
RPython | RPython, Python. | C | RPython, a restricted subset of Python. Unrelated to RPerl. | web |
Sather | Sather | C | web | |
Scheme-to-C | Scheme | C | Example nanopass compiler | repo |
Seed7 | Seed7 | C | web | |
Shedskin | Python | C++ | repo | |
SLua | Lua | C | repo | |
SystemTap | SystemTap | C | SystemTap scripting language compiles kernel modules for monitoring Linux systems. | web |
ThinScript | ThinScript | C, JavaScript, WebAssembly | A lower-level programming language inspired by TypeScript. ThinScript also compiles to JavaScript and WebAssembly. | repo |
TMPPy | TMPPy, Python | C++ | Transpiles a subset of Python | repo doc |
ts2c | JavaScript, TypeScript | C | Compiles a subset of JavaScript/TypeScript (ES3) to readable C89. | repo |
TSP | Tcl | C | A typed subset of Tcl. An experimental JIT. Compiles procedures written in a statically typed subset of Tcl to C or Java to accelerate Tcl programs. | repo |
UbxBasic | Basic | C, C++ | A fork of BCX that adds Linux support in addition to Windows. Uses Glib. | web |
Ur/Web | Ur/Web | C | web | |
V | V | C | A no-GC systems language with modern features like sum types and immutability by default. | repo |
Vala | Vala | C | web | |
Vostok | Oberon-07 | C, Java, JavaScript, Oberon | repo | |
wasm2c | WebAssembly | C | Converts WASM files to C source and header. | repo |
wasmdec | WebAssembly | C | Converts WebAssembly binaries to C. | repo |
wax | wax | C, C#, C++, Java, Lua, Python, Swift, TypeScript, WebAssembly | A language design for transpiling. | web |
Yaksha | Yaksha | C | Compiles "Python like" programming language to C99. No Garbage collector (manual memory management). Builtin support for raylib & wasm4. Macro system is a lisp dialect (YakshaLisp) | web repo doc |
Zephir | Zephir | C | A language for writing PHP extensions. | web |
ZZ | ZZ (Drunk Octopus) | C | A safe dialect of C for embedded systems inspired by Rust. | repo |
C macro languages
- C-Mera, a simple source-to-source compiler that transforms s-expression notation to code in a C-family language.
- LISP/c, a Common Lisp-based macrolanguage for C.
See also
- Cello, a library for high-level programming in C.
- Clue, an ANSI C compiler targeting high level languages (Lua, JavaScript, Perl 5, C, Java, Common Lisp).
- LLVM C backend resurrected.
- luastatic, a tool that builds standalone executables from Lua programs by embedding Lua code in C.
Contributing
Your contributions are welcome! Please submit a pull request or create an issue to add a new compiler to the list.