BCPL
読み:ビースィーピーエル
外語:BCPL: Basic Combined Programming Language

 かつて作られ使われたとされるプログラミング言語CPLを簡略化したものとされているが、殆ど別物となっている。
目次

概要
 BCPLはBasic CPLの略であるが、元々はBootstrap CPLの略だったとされる。いずれにしても、簡略化したCPLを意味している。
 巨大な仕様だったCPLに対し、BCPLは極端に簡略化した言語仕様が目指されたようである。そして、CPL→BCPLにおける最も重要なことは、CPLにはあった「データ型の概念」を廃止したことにある。
 高級言語は一般に、データを抽象化し、計算機のハードウェアを意識させないように設計される。一方、BCPLは計算機のハードウェアの都合が導入された。これは、多機能なアセンブリ言語になった、と言うこともできる。
 データ型はプログラムの中でプログラマーが任意に表現できるため、アセンブリ言語のような発想の言語となっている。

特徴
 アセンブリ言語を高級言語的に表現するために作られた言語とされている。
 制御構造と制御文からなる構造化言語である。ポインターを扱うことができ、データ型は持たない。

変遷

CPL→BCPL
 BCPLはCPLを簡略化した言語とされており、CPL→BCPLの段階で、大幅に言語仕様が削除された。特に注目される点は「データ型がない」ということである。
 CPLは複雑なデータ型の定義があったが、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は似ても似つかないものとなっている。

BCPL→C
 Cは、BCPL→Bで受け継がれたBCPLの「データ型がない」という特徴を捨てたことになる。これで、見た目においては、CはBCPLの影響を一つも残していないことになるが、実際はそうでもない。
 CPL→BCPLの段階で、BCPLはデータ型を捨てると共に「アセンブリ言語的ななにか」を仕様とした。これはCでも仕様の基本的な柱となっており、データ型が導入されても変わっていない。
 BCPLから生まれた言語的な哲学は、Bを経て、Cに至ってもなお健在である。

再検索