Cfrontは、1983年頃に登場したC++(当時は「C with Classes 」と呼ばれていた)の最初のコンパイラで、C++をCに変換するものでした。AT&Tベル研究所のビャルネ・ストロヴストルップによって開発されました。プリプロセッサは言語全体を理解していたわけではなく、コードの多くは翻訳によって記述されていました。Cfrontは完全なパーサーを備え、シンボルテーブルを作成し、各クラス、関数などのツリーを構築しました。Cfrontは、1979年に開発が始まったCコンパイラであるCPreをベースにしています。
CfrontはC++で記述されていたため、C++コンパイラ/トランスレータのないマシン上でブートストラップを行うのは困難でした。CfrontのC++ソースコードに加えて、Cfront自身をコンパイルして生成された、特殊な「半プリプロセス」バージョンのCコードも提供されました。このCコードはネイティブのCコンパイラでコンパイルされ、生成された実行ファイルを使用してCfrontのC++ソースコードをコンパイルすることができました。
Cfrontを新しいマシンで動作させるための移植作業の大部分は、標準入出力に関するものでした。CfrontのC++ストリームはCライブラリのバッファ付き入出力ストリームと密接に連携していましたが、C環境のその他の部分との相互作用はほとんどありませんでした。コンパイラはほとんどのSystem V派生システムに大した変更を加えることなく移植できましたが、BSDベースのシステムでは、Cライブラリや関連するstdio構造に多くのバリエーションが存在するのが一般的でした。
Cfrontは1990年頃までC++の言語定義を担い、C++のあまり知られていない特殊なケースの多くは、CfrontのC++からCへの変換方法に起因していました。Cfrontの変換方法の名残は、今日のC++コンパイラにもいくつか見られます。名前マングリングはCfrontが考案したもので、当時の比較的原始的なリンカはシンボル内の型情報をサポートしていなかったためです。また、テンプレートインスタンス化モデルの一部は、Cfrontの初期の取り組みから派生しています。C++(およびCfront)は、 Unixリンカや オブジェクトファイル形式の多くの改善に直接貢献しました。これは、C++がリンク時の型チェック、弱いシンボル、その他同様の機能を必要とする最初の広く使用された言語だったためです。
Cfront 4.0 は例外サポートを追加しようとした試みが失敗に終わった後、1993 年に開発が中止されました。[ 1 ] C++ 言語は、その能力を超えて成長していました。しかし、後に同様のアプローチのコンパイラ、Comeau C/C++ が利用可能になりました。
Cfront が C++ ソース コードを、以前から利用可能な C コンパイラでコンパイルできるものに変換するのと同様に、cppfront は、新しく実験的な C++ の「構文 2」で書かれたソース コードを、以前から利用可能な「構文 1」の C++ コンパイラでコンパイルできるものに変換します。[ 2 ] [ 3 ] cppfrontは、コードに対して多くの妥当性チェックを実行せず、シンボルの正しい使用を確立するなど、コードの非ローカルな理解を必要とするチェックについては C++ コンパイラに依存するという点で、範囲が異なります。一方、Cfront は、たまたまアセンブラではなく C 言語をターゲットにしていた完全なコンパイラでした。