BCPL
出典: フリー百科事典『ウィキペディア(Wikipedia)』
パラダイム: | 手続き型 |
---|---|
設計者: | マーチン・リチャーズ |
開発者: | ケンブリッジ大学 |
型付け: | なし |
影響を受けた言語: | CPL |
影響を与えた言語: | B言語、C言語 |
BCPL(Basic-CPLの略)は、1966年にケンブリッジ大学のマーティン・リチャーズ (Martin Richards)によって、CPLを簡素化して設計されたプログラミング言語である。
BCPLはコンパイラの記述やシステムプログラミングを目的に設計された。
BCPLの設計はB言語に大きな影響を与えている。
[編集] 歴史
BCPL (Basic Combined Programming Language)はケンブリッジ大学のマーティン・リチャーズ氏が1966年に設計したコンピュータプログラミング言語である。これは元々他の言語のコンパイラを記述するのが目的であった。現在広く使われることはないが、非常に移植性が高く(下記参照)、広く普及しているデニス・リッチーのC言語に影響を与えたため、これは非常に影響力があった。
BCPLはその前身である1960年代初頭に開発されたCPLの難しさに対する回答であった。リチャーズは「コンパイルを難しくする特徴を仕様から削る」ことによりBCPLを開発した。CTSSで動作するIBM 7094用の最初のコンパイラの実装は、1967年の春にリチャーズがMITのProject MACを訪問している間に書かれた。1969 Spring Joint Computer Conferenceの論文で言語は初めて解説された。
BCPLはクリーンでパワフルで移植性が高かった。そのため小さくて単純なコンパイラを記述することが可能であった。コンパイラが16KBのメモリで動作すると言われた。しかもリチャーズのコンパイラはそれ自身がBCPLで記述されており、非常に移植性が高かった。そのためBCPLはシステムのブート用として人気のある選択肢だった。
コンパイラの移植性についての主な理由はその構造にあった。コンパイラは2つのパーツに分けられていた。フロントエンドはソースをパースし、バーチャルマシンのO-codeを生成した。バックエンドはO-codeを受け取り、ターゲットマシンのコードに変換した。新しいマシンをサポートするためにはコンパイラのコードの1/5だけを書き直せばよく、通常は2~5人月の作業であった。その後まもなくこの構造は非常に一般的な習慣となった(Pascal及びJava参照)が、リチャーズのBCPLコンパイラはこの目的のためにバーチャルマシンを定義した第1号であった。
1種類のデータ型(1ワードは通常アーキテクチャのマシンワードのアラインの固定ビット長であり、またアドレスを示す適切なサイズのポインタ)だけしか持たないBCPLは普通ではない。アドレス可能なメモリの最小単位がワードではなくバイトであるマシンでBCPLを利用する際に、この選択は問題があったということが後に判明した。
全ての値の判断は値を処理するのに利用した演算子によって決定された。(例えば+は2つの値を両方とも整数として加算し、!は値から間接的に参照してポインタとして扱う効果があった。) この働きにより実装はタイプチェックを提供しなかった。ハンガリアン記法 (Hungarian Notation)はプログラマーが予期せぬタイプエラーを回避するために開発された。
ワード指向のBCPLとバイト指向のハードウェアのミスマッチについては様々な方法で解決を試みられた。その1つはバイト列の中にワードを出し入れする標準ライブラリルーチンの提供だった。ビットフィールドセクション演算子と、('%'文字で示す)バイト指定挿入演算子 (infix byte indirection operator)の2つの言語機能が後に付け加えられた。
BCPLはオリジナルのHello Worldプログラムが記述された言語であるといわれている。最初のMUDもまたBCPLによって記述された[1]。
いくつかのオペレーティングシステムではその一部または全体がBCPLで記述された(例えば、TRIPOSや、起動部 (Kickstart)を含むAmigaOSの重要パートおよびAmigaDOSの初期バージョン)。またBCPLは影響力の強いゼロックスのPARCアルト-最初の近代的なパーソナルコンピューターのプロジェクト-で最初に使われた言語であり、その他の数多くの有力なプロジェクトの間では、初期のBravoドキュメント調合システム (document preparation system)がBCPLで記述された。
1970年までには、ハネウェル635/645、IBM 360、TX-2、CDC 6400、Univac 1108、PDP-9、KDF 9、Atlas 2に実装されていた。1979年には少なくとも25のアーキテクチャで実装された。2001年現在ではほとんど使われないようだ。
BCPLの哲学は書籍「BCPL, the language and its compiler」からの引用によって端的に示される。
- BCPLの哲学は、最良を知ると皆が考える暴君がいるのではなく、何が許されて何が許されないのかという決まりが定められているのでもない。どちらかといえばBCPLは、たとえ明らかに馬鹿げた事態に直面したときでさえ、不平を言わずに自らの能力を最大限に活かしてサービスを提供せんとする召使いとして振舞う。彼が何をしていて、細かい制限に制約されないということを、プログラマーは常に理解しているものと考える。
BCPLの設計と哲学は後にC言語に影響を与えるB言語に多大な影響を与えた。C言語は現在システムプログラミング用言語の1つである。
[編集] プログラム例
n以下の素数を求めるプログラム。
// // n以下の[[素数]]を求める // GET "LIBHDR" LET START() BE $( LET I, J, N WRITEF("N=") N := READN() FOR I=2 TO N DO $( FOR J=2 TO I-1 DO $( IF I REM J = 0 DO BREAK $) IF I=J DO WRITEF("%N*N", I) $) $)