Автор QEMU — Fabrice Bellard — написал еще нескольно занимательных программ.
Одной из них является TCC — Tiny C Compiler. Это ультра быстрый и ультра маленький компилятор С. Сразу возникает подозрение — слово “tiny” в название, да еще и “ультра быстрый” и “ультра маленький”. Главный вопрос — какие у него ограничения?
Как заявляет автор, TCC полностью поддерживает стандарт языка С вплоть до ISO C99 включительно, но целевая платформа только x86. Компилятор имеет также мини версию системной библиотеки libc. Когда это возможно, компилятор совмещает фазы компилирования, ассемблирования и линковки для дополнительного ускорения, хотя поддерживаются стандартные ABI и можно подлинковать что-то готовое.
Компилятор доступен в исходных текстах и в двоичном виде под Windows. Скомпилировать его можно вручную, например, самим же TCC.
Занимательная статья о применении возможностей этого компилятора - ссылка
Есть, конечно, некоторые претензии к нему. Во-первых, это C, а не C++. Во-вторых, использование компилятора в качестве интерпретатора имеет некоторое ограничение. Допустим, я в результате компиляции получил myprog.exe. Тогда я её могу вызвать, передав программе аргументы командной строки. Если же я вызываю tcc для компиляции "на лету", то я передаю tcc аргументы командной строки: собственно исходник на Си и плюс опции при компиляции. Но как потом передать аргументы командной строки откомпилированному модулю, да ещё в той же самой строке, в которой передаются аргументы для tcc? Пока что не нашёл ответа на такой вопрос. Может, его задать Белларду?