Поскольку компиляторы C почти повсеместно распространены и доступны практически на каждой платформе, многие (скомпилированные) языки проходят этот этап в своей разработке, чтобы запустить процесс.
На ранних этапах разработки языка, чтобы увидеть, возможен ли язык, самый простой способ получить работающий компилятор - это создать компилятор, который преобразует ваш язык в C, а затем позволить компилятору нативного C создать настоящий двоичный файл.
Проблема в том, что специфичные для языка конструкции теряются, и, следовательно, потенциальные возможности для оптимизации могут быть упущены, поэтому большинство языков на втором этапе получают собственный выделенный компилятор front end
, который понимает специфичные для языка конструкции и, таким образом, может предоставлять стратегии оптимизации на основе эти конструкции.
C ++ прошел фазу 1 и фазу 2 более двух десятилетий назад. Таким образом, легко найти «переднюю часть» компилятора, который предназначен для C ++ и генерирует промежуточный формат, который передается непосредственно в резервную копию. Но вы все равно можете найти версии C ++, переведенные в C (в промежуточном формате) перед компиляцией.