CPL
読み:スィーピーエル
外語:CPL: Combined Programming Language
かつて作られ使われたとされる
プログラミング言語
。1963(昭和38)年に登場したらしい。
目次
概要
変遷
以降の変遷
CPL→BCPL
BCPL→B
B→C
概要
その仕様については定かではない。現在では使われておらずコンパイラーなどの実装はなく、手に入る資料も皆無である。
ただ、CPLのCはCombinedであり、当時存在した、
FORTRAN
、
ALGOL
、
COBOL
といった言語を統合した汎用プログラミング言語として開発されたようである。このため、非常に巨大な言語仕様だったとされている。
後に登場する
PL/I
も同様のコンセプトを標榜したが、CPLはそれより論理的な仕様であったようである。
変遷
以降の変遷
CPLはALGOL系と呼ばれるグループに属するプログラミング言語であり、C言語などと同じグループであるのみならず、CPLはCの祖ともされる。
一般には、CPLからCまでには、次のように変遷を遂げたとされる。
ALGOL60
CPL (1963(昭和38)年)
BCPL
(1967(昭和42)年)
B
(1970(昭和45)年)
C
(1972(昭和47)年)
但し、CがCPLの特徴の多くを有しているかというと、そうではない。CPL→BCPL、BCPL→B、B→C、と変遷する度に、異なるものを受け継いでおり、過去の特徴は失われることになる。
CPL→BCPL
BCPL
はCPLを簡略化した言語であり、CPL→BCPLの段階で、大幅な言語仕様の削除が存在した。
CPLは複雑な
データ型
の定義があったが、BCPLでは逆に、言語仕様としてデータ型の定義を削除し、プログラマーに任せることにした。
高級言語
は一般に、データを抽象化し、計算機のハードウェアを意識させないように設計される。一方、BCPLは計算機のハードウェアの都合が導入された。これは、多機能な
アセンブリ言語
になった、と言うこともできる。
BCPL→B
B
は、高級アセンブリ言語として開発された。より具体的には、
UNIX
の記述言語として開発された。BCPLを参考に開発されたとされるが、実際には殆ど共通点はない。CPLとはもちろん、BCPLとも似ていない。文の構造の表現、文の区切り、注釈文の書き方すら共通性がない。
FORTRANの頃から存在する、どんな言語にも共通的にありそうな表現の他には、ビット演算の
演算子
程度しか共通点が見られない。
BがBCPLから引き継いだものは、CPL→BCPLの際に生まれた言語の哲学「アセンブリ言語的ななにか」である。CPL→BCPLのうちのBの部分ということもでき、Bの言語名がBであるのは、おそらく偶然であろうが、ある意味必然であったのかも知れない。
BCPLからの影響は少ないが、PL/Iからの影響は様々確認できる。少なくともBCPL→Bの段階で、BとCPLの間には断絶が存在する。
B→C
C
はBの後継として開発された。Cの特徴は、CPL→BCPLの段階で失われたデータ型の概念を再導入したことにある。とはいえその仕様はCPLではなく、ALGOL68やPL/Iの影響を強く受けている。
まず、型がなくても無理なく動作させるためには、いくつかの条件が必要である。例えば、アドレス(
ポインター
)とデータは同じ単位でなければならない。アドレスを1つ足したら、次のデータを指す、といった動作が求められる。
当時、BやCのターゲットだった
PDP-7
やPDP-11は
16ビットマイクロプロセッサー
が使われており、データはワード単位だったが、アドレッシングはバイト単位であった。こういった設計は、現在のコンピューターも同じである。
このような環境において型を無くすためには、どちらかに合わせる(具体的には大きな方に合わせる)ことになり、メモリーの利用効率が落ちる。Cは、高級言語の方向性ではなく、アセンブリ言語の置き換えとして計算機の仕様にあわせた処理を書くことが指向されたため、データ型を導入することになったのである。
データ型のないBは同じくデータ型がないBCPLの頭文字、データ型のあるCはデータ型があるCPLの頭文字でありBCPLの2文字目から取られた、というのが通説ではあるが、これについては正確なところは定かではない。
また、CはALGOL68の影響も強く受けており、都合、CPL→BCPL→B→Cという沿革は一つの表面的な出来事であり、現実には他の影響を色濃く反映しているのである。かくして、CPLとCは似ても似つかないものとなっている。
再検索