Visual C++コンパイラとPhoenix Compiler Framework


Visual C++コンパイラについて調べたのでメモ。

Visual C++コンパイラとは

Microsoft Visual C++という、Microsoft製のC/C++統合開発環境に付属のC/C++コンパイラ。Visual Studioをインストールする際にC/C++開発サポートを有効にすると、Microsoft Visual C++が導入される。このVisual C++コンパイラ自体は、標準のインストール先であればC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\binに存在し、以下の実行ファイルとDLLで構成される。

  • cl.exe:コンパイラのドライバ
  • c1.dll:Visual Cのフロントエンド
  • c1xx.dll:Visual C++のフロントエンド
  • c2.dll:バックエンド

/posts/2019-02-10-phoenix-compiler.png

cl.exe

コンパイラのドライバで、フロントエンド、バックエンドをつなぐ役割。

c1.dllc1xx.dll

コンパイラのフロントエンド処理を実行する。C/C++ソースコードを解析し、MSIL(Microsoft Intermediate Language)形式の中間言語を生成する。ソースコードがC言語の場合はc1.dll、C++言語の場合はc1xx.dllにより処理される。

c2.dll

コンパイラのバックエンド処理を実行する。フロントエンドで生成されたMSILを受取り、最適化、コード生成(オブジェクトファイル生成)を行う。

Phoenix Compiler Frameworkとは

Microsoftが2003年頃?から研究開発しているコンパイラフレームワーク。プラグイン機構を採用することで、コンパイラのフロントエンド、バックエンドを取り替えることができる。これにより、新たなプログラミング言語/CPUアーキテクチャへの対応に必要な開発コストを削減可能となる。Visual C++コンパイラはこのPhoronix Compiler Frameworkがベースになってるよう。

余談

LLVMの作者の一人であるChris Lattnerは学生時代、Microsoft ResearchのインターンでPhoenix Compiler Frameworkの開発に関わっていたらしい。具体的には、MicrosoftコンパイラとLLVMコンパイラのブリッジ(LLVMが.NETコードをコンパイル可能とする)の開発を行っていたそう。

参考文献