Cfront был оригинальным компилятором для C++ (тогда известного как « C with Classes») примерно с 1983 года, который преобразовывал C++ в C; разработан Бьярне Страуструпом в AT&T Bell Labs. Препроцессор не понимал весь язык , и большая часть кода была написана с помощью трансляций . Cfront имел полный парсер , строил таблицы символов и строил дерево для каждого класса , функции и т. д. Cfront был основан на CPre, компиляторе C, выпущенном в 1979 году.
Поскольку Cfront был написан на C++, его было сложно запустить на машине без компилятора/транслятора C++. Вместе с исходными текстами Cfront C++ также предоставлялась специальная «полупрепроцессированная» версия кода C, полученная в результате компиляции Cfront с самим собой. Этот код C должен был быть скомпилирован с помощью собственного компилятора C, а полученный исполняемый файл мог затем использоваться для компиляции исходных текстов Cfront C++.
Большая часть усилий по портированию для запуска Cfront на новой машине была связана со стандартным вводом-выводом. Потоки Cfront C++ были тесно связаны с буферизованными потоками ввода-вывода библиотеки C, но взаимодействие с остальной частью среды C было незначительным. Компилятор можно было портировать на большинство производных System V без особых изменений, но системы на основе BSD обычно имели гораздо больше вариаций в своих библиотеках C и связанных структурах stdio.
Cfront определял язык примерно до 1990 года, и многие из наиболее неясных случаев в C++ были связаны с его подходом к трансляции с C++ на C. Несколько остатков метода трансляции Cfront все еще можно найти в современных компиляторах C++; искажение имен было создано Cfront, поскольку относительно примитивные компоновщики в то время не поддерживали информацию о типах в символах, а некоторые модели создания экземпляров шаблонов произошли от ранних усилий Cfront. C++ (и Cfront) были напрямую ответственны за многие улучшения в компоновщиках Unix и форматах объектных файлов , поскольку это был первый широко используемый язык, который требовал проверки типов во время компоновки, слабых символов и других подобных функций.
Cfront 4.0 был заброшен в 1993 году после неудачной попытки добавить поддержку исключений . [1] Язык C++ вышел за рамки своих возможностей; однако позже появился компилятор с похожим подходом, а именно Comeau C/C++ .
Аналогично тому, как cfront может преобразовывать исходный код C++ в нечто, что может быть скомпилировано ранее доступными компиляторами C, cppfront преобразует исходный код, написанный на новом и экспериментальном C++ «синтаксисе 2», в нечто, что может быть скомпилировано ранее доступными компиляторами C++ «синтаксиса 1». [2] [3]