Cfront

Cfront(シーフロント)は、ビャーネ・ストロヴストルップが1983年頃に開発した、C++(当時はC with Classesと呼ばれていた)の初期のコンパイラです。C++ソースコードC言語に変換する役割を担っていました。

プリプロセッサはソースコードをプログラミング言語として解釈せず、単に文字列を変換するだけですが、Cfrontは完全なパーサを搭載していました。これにより、シンボルテーブルの構築、クラスや関数のツリー構造の作成が可能になりました。これは、単なるテキスト変換以上の複雑な処理をCfrontが行っていたことを意味します。

Cfront自体もC++で記述されていました。当初はC++コンパイラ自体が存在しなかったため、ブートストラップ問題(コンパイラをコンパイルするためのコンパイラがない状態)が生じました。この問題を解決するために、C++で記述されたCfrontのソースコードと同時に、そのCfrontでコンパイルし、C言語に変換した「半分処理済み」の特殊バージョンも提供されました。この特殊バージョンは、ネイティブなC言語コンパイラでコンパイルすることができ、C++で記述されたCfrontのコードをコンパイルできる実行ファイルを作成することができました。

Cfrontを新しいマシンに移植する際には、特に標準入出力周りの部分が問題となりました。C++のストリームは、C言語標準ライブラリのバッファ付きI/Oストリームに強く依存していましたが、C言語の他のライブラリとの関連性は薄かったのです。System V系のシステムへの移植は比較的容易でしたが、BSD系のシステムではC言語のライブラリや標準入出力の構造体に多くの差異があったため、より多くの修正が必要となりました。

Cfrontは1990年頃まで、事実上C++の言語規格そのものであり、C++は「C++からC言語へのコンバータ」に過ぎない、非常にマイナーな存在でした。しかし、今日のC++にもCfrontのコンバータとしての名残が見られます。例えば、名前修飾は、当時の比較的原始的なリンカがシンボルの型情報をサポートしていなかったためにCfrontで実装されたものであり、一部のテンプレートのインスタンス化に関する仕様も、Cfrontの初期の試行錯誤から発展したものです。

C++(およびCfront)は、タイプチェックやweak symbol(同じシンボルがある場合はweak symbolが無視される)のような機能をリンク時に必要とする言語として、初めて広く普及しました。このことは、Unixにおけるリンカとオブジェクトファイルファイルフォーマットの発展に直接的に重要な役割を果たしました。

例外処理が未完成のまま、Cfront 4.0は開発が中止され、現在では販売されていないようです。C++はCfrontの限界を超えて成長しましたが、同様のアプローチを取りつつ、より標準に準拠したComeau C/C++が後に登場しました。

関連情報として、Cpre(Cプリプロセッサ)、トランスコンパイラがあります。

外部リンク

Cfront is mentioned in Bjarne Stroustrup's FAQ
Cfront Releases at C++ Historical Sources Archive

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。