Что это?
C4 — крошечный самохостящийся компилятор и интерпретатор для небольшого подмножества языка C, написанный всего в четырёх функциях как упражнение в предельном минимализме.
Это компилятор или интерпретатор?
И то и другое: c4 разбирает исходный код C и затем исполняет его напрямую через собственную встроенную виртуальную машину, а не порождает отдельный бинарник. Он даже способен компилировать и запускать собственный исходный код.
Как его запустить?
Скомпилируйте единственный исходный файл командой 'gcc -o c4 c4.c', затем запустите его на C-файле, например './c4 hello.c'.
Нужно что-то ещё, кроме компилятора C?
Нет, достаточно стандартного компилятора C вроде gcc, чтобы собрать единственный файл c4.c; других зависимостей нет.
Он поддерживает весь язык C?
Нет, c4 реализует лишь небольшое подмножество C, нужное для компиляции самого себя (char, int, указатели, базовый поток управления), а не полный стандарт C.
Он работает на Linux, macOS и Windows?
Поскольку это просто стандартный исходный файл на C, собираемый с помощью gcc, он работает везде, где доступен компилятор C, включая Linux, macOS и Windows.
Что именно делают эти четыре функции?
Весь компилятор организован в виде токенизатора, парсера выражений, парсера инструкций и главной управляющей функции; вместе они выполняют лексический анализ, разбор, генерацию кода и исполнение.
Что делает флаг '-s'?
Запуск './c4 -s hello.c' печатает сгенерированные инструкции виртуальной машины вместе с исходником, позволяя увидеть, как именно c4 транслирует ваш код.
Зачем запускать './c4 c4.c c4.c hello.c'?
Так c4 интерпретирует сам себя, который интерпретирует сам себя ради запуска программы, — демонстрация того, что c4 самохостящийся и может компилировать и исполнять собственный исходный код.
Для кого этот проект?
Он для тех, кому интересно, как компиляторы и интерпретаторы устроены внутри, а не для написания настоящих программ на C.
What are similar projects?
lua, craftinginterpreters, acwj, chibicc, the-super-tiny-compiler, lytlnyblOS, cpython, gcc
Which topics is it in?
compilers, from-scratch, interpreter, educational, programming-language, gplv2, computer-science, compiler, c, learning, command-line-tool, education