ポータブルC コンパイラ( pccまたはpccm - portable C compiler machineとも呼ばれる) は、1970 年代半ばにベル研究所のStephen C. Johnsonによって書かれたC プログラミング言語の初期のコンパイラです。 [ 1 ] 1973 年にAlan Snyderによって提案されたアイデアの一部に基づいており、[ 2 ] [ 3 ] 「ベル研究所によって C コンパイラとして配布され、Dennis Ritchieの承認を得ました。」[ 4 ]
異なるコンピュータ アーキテクチャ向けにコードを出力するように容易に適応できる最初のコンパイラの 1 つであったため、このコンパイラは長きにわたって使われました。第 7 版 Unixで初登場し、1994 年に4.4BSDがリリースされるまでBSD Unixに同梱されていましたが、 GNU C コンパイラに置き換えられました。当時、非常に影響力があり、1980 年代初頭には、ほとんどの C コンパイラがこれをベースにしていました。[ 5 ] Anders Magnusson と Peter A Jonsson は 2007 年に pcc の開発を再開し、 C99標準をサポートするために大幅に書き直しました。[ 6 ]
PCCの主な特徴は、移植性と診断機能の向上です。このコンパイラは、ソースファイルのうちマシンに依存する部分がごくわずかになるように設計されています。構文エラーに対する耐性が高く、同時代のコンパイラよりも徹底した妥当性チェックを実行します。
デニス・リッチーが作成した最初のCコンパイラは、再帰下降パーサーを使用し、PDP-11に関する特定の知識を組み込み、オプションのマシン固有オプティマイザを利用して生成されるアセンブリ言語コードを改善した。一方、ジョンソンのpccmはyaccで生成されたパーサーをベースとし、より汎用的なターゲットマシンモデルを使用していた。どちらのコンパイラも、ターゲット固有のアセンブリ言語コードを生成し、それをアセンブルしてリンク可能なオブジェクトモジュールを作成した。
PCCの後のバージョン(ベル研究所内では「QCC」および「RCC」として知られていた)は、他のターゲットアーキテクチャモデルをサポートした。
PCCが実装する言語は、ビャルネ・ストロヴストルップが「クラシックC」と呼んだK&R Cの拡張版であり、戻り値の型(値を返さない関数用)、列挙型、構造体代入を組み込んでいる。[ 4 ]void
スティーブ・ジョンソンによるオリジナル版を基にしたPCCの新バージョンは、アンダース・マグヌソンによってメンテナンスされている。[ 6 ]このコンパイラはBSDライセンスの下で提供されており、その開発はBSD Fundと呼ばれる非営利団体によって資金提供されている。マグヌソンによれば、次のようになる。
(ライセンスマニア向けにBSDライセンスであることは別として)大きな利点は、gccよりも5~10倍高速でありながら、妥当なコードを生成することです。<...>移植も非常に簡単です...
—アンダース・マグヌソン[ 7 ]
この新しいバージョンは、2007 年 9 月にNetBSD pkgsrcおよびOpenBSDソース ツリーに追加され[ 8 ]、その後、NetBSDメイン ソース ツリーに追加されました[ 9 ]。BSDベースのオペレーティングシステムで GNU C コンパイラに取って代わるために使用される可能性があるという憶測もありましたが[ 10 ] 、 FreeBSD [ 11 ] [ 12 ]とNetBSD [ 13 ]はどちらも潜在的な代替としてClangを検討しており、 OpenBSDのTheo de Raadt 氏は、 pcc はまだ gcc の代替として準備できておらず、gcc の廃止は最優先事項ではないと主張しています[ 14 ] 。2009 年 12 月 29 日、pcc は機能的な x86 OpenBSDカーネル イメージをビルドできるようになりました[ 15 ] 。
pcc バージョン 1.0 は 2011 年 4 月 1 日にリリースされました。[ 16 ] このリリース時点では、コンパイラはx86およびx86-64プロセッサ アーキテクチャをサポートし、NetBSD、OpenBSD、FreeBSD、さまざまなLinuxディストリビューション、およびMicrosoft Windows上で動作します。[ 17 ] 2022 年現在、より多くのアーキテクチャのサポート、 FORTRAN 77およびC++フロントエンドの サポートを含むさらなる開発が継続されています。
PCC は2012 年にOpenBSDソースツリーから削除されました。 [ 18 ]開発は停滞しており、 GNU Compiler Collectionの実用的な代替となるようなものに開発を引き継ぐメンテナーが現れませんでした。[ 19 ] [ 20 ]
pccの最新バージョンである1.1.0は、2014年12月10日にリリースされました。[ 21 ]
年代初頭には、ほぼすべてのコンパイラが Johnson の
pcc
をベースにしていました。1985 年までには、多くの独立系コンパイラ製品が登場しました。
しかし、それは本当の議題ではありませんでした。 GNU のコードを嫌っていると思っている人もいますが、 問題は、大きなコードと、上流でメンテナンスされていないバグのあるコードが嫌いなことです。 それが本当の問題です... gcc はリリースごとに 5〜6% 遅くなり、新しいバグがあり、ひどいコードを生成し、私たちをイライラさせます。 これは、より良いものが現れるかどうかを試す試みにすぎません。