Portable C Compiler

Portable C Compiler (略して pcc) はベル研究所のスティーヴン・カーティス・ジョンソンが1970年代に書いたC言語コンパイラであるA portable compiler: theory and practice。異なるアーキテクチャ用のコードを出力することが容易なコンパイラの先駆けであり、1980年代初期には多くのCコンパイラがpccをもとにしていたThe Development of the C Language。Version 7 Unixにおいて、デニス・リッチーのコンパイラであるccと並行して添付され、ccとpccが同時に使えるようになったのがpccの初出である。その後、1990年の4.3BSD-Renoに含まれるなど、4.4BSDでGNU Cコンパイラに取って代わられるまで、長く標準コンパイラとして君臨していた。

pccの成功の鍵は移植性と診断能力にある。

ソースファイルの大部分がマシン非依存である。
文法違反に強く、不正なプログラムを受け付けない。lintはもともとpccの一部だった。
pass1の時点でも最適化する。

こうした特徴を持つコンパイラは当時としては斬新で、たとえばデニス・リッチーによる最初のCコンパイラはPDP-11に強く依存していた。

なお、pccはAlan Snyderによる別のportable C compilerからアイディアを取り入れているが、Snyderのものは遅く複雑で、実装上の問題もあった。

 現在(2014年12月10日) 

近年ではAnders MagnussonがC99対応を目指して開発を続けており、2007年9月にはNetBSDのpkgsrcとOpenBSDのソースツリーに導入された'CVS: cvs.openbsd.org: src' - MARC。どちらもまだ標準コンパイラとして利用しているわけではないが、GCCより軽量でメンテナンスしやすく、BSDライセンスであることから、関心が高まっているSlashdot | GCC Compiler Finally Supplanted by PCC?。

利用者の観点からGCCと比較すると、以下の大きな違いがある。これは両者の目標とするものが異なるためである。

pcc自体が小さく、ビルドしやすい。移植も容易である。
pcc自体の動作が高速である。
出力されるコードが大きく、遅い。GCCは各種最適化に優れている。

2011年4月1日、PCC version 1.0がついにリリースされた。BSD FundのプログラムマネジャーであるMichael Dexterは、プロジェクトへの寄付者に向けて、こう語っている。

2014年12月10日、PCC version 1.1.0がリリースされた。

 関連項目 
 clang

 参考文献 
Johnson, S.C. (1978). "A portable compiler: theory and practice". Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. Tucson, Arizona. pp. 97-104. Online reprint at ACM.
Ritchie, Dennis M. (1993). "The development of the C language". The second ACM SIGPLAN conference on History of programming languages. Cambridge, Massachusetts. pp. 201-208. Online reprint.
Snyder, A. (1975). "A Portable Compiler for the Language C". Master’s Thesis. M.I.T., Cambridge, Mass. Online reprint.
Johnson, S.C. (1981). "A Tour Through the Portable C Compiler". Unix Programmer's Manual, 7th edition, Volume 2, ISBN 0-03-061743-X. Online version. (mirror)

 脚注 

 外部リンク 
初期のソースコード
Anders Magnusson 版の PCC サイト
BSD Licensed PCC Compiler Imported, OpenBSD Journal
スラッシュドット ジャパン | OpenBSD が PCC をソースツリーに投入

Category:C言語
Category:コンパイラ