Страуструп утверждает, что Cfront, первый компилятор C ++, был написан на C ++ ( Stroustrup FAQ ).
Однако как вообще возможно, чтобы первый компилятор C ++ был написан на C ++?
Код, составляющий компилятор, тоже должен быть скомпилирован, и поэтому первый компилятор C ++ не мог быть написан на C ++, не так ли?
Ответы:
Ключ прямо здесь:
Поэтому первая версия Cfront была написана не на C ++, а на промежуточном языке. Возможность создавать компиляторы и препроцессоры C непосредственно в C привела ко многим нововведениям (и огромным дырам в безопасности ) в C. Таким образом, вы пишете свой новый препроцессор, который превращает код «C with Classes» в прямой C (потому что прямой C может делать что-нибудь), а затем вы используете "C с классами", чтобы написать компилятор C ++ (не то, что вы не можете сделать это в C, просто это займет некоторое время), а затем вы используете этот компилятор C ++, чтобы написать более эффективный / полный компилятор в C ++. Понял?
источник
Это было начато. Как только функция C ++ была добавлена в cfront, cfront может также использовать эту функцию с этого момента (но не для реализации этой самой функции). Это работало, потому что у cfront была возможность преобразовать код C ++ в код C. Поэтому, если появится какая-то новая платформа, вы можете использовать cfront на другой платформе для преобразования cfront из C ++ в C, а затем использовать компилятор C новой платформы, чтобы завершить компиляцию из C в объектный код.
источник
Я думаю, что BS отвечает на этот вопрос:
Сначала он создал что-то, что он назвал «C с классами», реализованный простым препроцессором в C. Это был в основном C ++, но препроцессор почти не проверял. Затем он использовал это для написания Cfront, более мощной версии переводчика C ++ в C, с проверкой типов, таблиц символов и т. Д.
источник
Я добавлю этот ответ, так как ни один ответ не охватывал этот аспект.
Технически вам не нужно программное обеспечение для компиляции кода. Пока у вас есть необходимые спецификации компилятора, вы можете выполнить фактическую компиляцию вручную. Это не то, как был скомпилирован первый компилятор C ++. Я просто говорю, что это возможно.
Сравните с языком ассемблера. Когда они использовались в первые дни, не было программного обеспечения на ассемблере для преобразования кода сборки в машинный код. Это было сделано вручную, но язык ассемблера дал программистам лучший обзор.
источник