Cfront は、1983 年頃からC++ (当時は「C with Classes」と呼ばれていました)のオリジナルのコンパイラであり、C++ を C に変換しました。AT &T ベル研究所のBjarne Stroustrupによって開発されました。プリプロセッサは言語のすべてを理解したわけではなく、コードの多くは翻訳によって書かれました。Cfront には完全なパーサーがあり、シンボル テーブルを構築し、クラス、関数などのツリーを構築しました。Cfront は、1979 年に開始された C コンパイラである CPre をベースとしていました。
Cfront は C++ で記述されているため、C++ コンパイラ/トランスレータのないマシンでブートストラップするのは困難でした。Cfront C++ ソースとともに、Cfront 自体をコンパイルして生成された特別な「半分プリプロセスされた」バージョンの C コードも提供されました。この C コードはネイティブ C コンパイラでコンパイルされ、その結果生成された実行可能ファイルを使用して Cfront C++ ソースをコンパイルできました。
Cfront を新しいマシンで実行するための移植作業のほとんどは、標準 I/O に関連していました。Cfront の C++ ストリームは、C ライブラリのバッファリングされた I/O ストリームと密接に結びついていましたが、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' で記述されたソースコードを従来の '構文 1' C++ コンパイラでコンパイルできる形式に処理します。[2] [3]
参考文献
- ^ スコット・マイヤーズ、史上最も重要な C++ ソフトウェア、2006 年
- ^ 「プロフェッショナル C++ の哲学と原則」 2022 年、373 ページ。
- ^ Paul Krill. 「Cppfront プロジェクトは C++ の近代化を目指しています」。InfoWorld。
- 注記
- Bjarne Stroustrup. 「現実世界における、そして現実世界のための言語の進化: C++ 1991-2006」(PDF)。2007-11-20 にオリジナル(PDF)からアーカイブ。
- ビャルネ・ストルストラップ。 「ビャルネ・ストロイストラップのよくある質問」。
- Bjarne Stroustrup. 「C++ の設計と進化」。
外部リンク
- C++ 履歴ソース アーカイブでの Cfront リリース
- cfront v3、ベル研究所の Plan 9第 4 版の cfront レポート
- Cfront 3.0.3、「1994 年の AT&T/Bell Labs C++ から C へのトランスレータ。最新のハードウェアで構築できるように修正されています。」
