BCPL
[Wikipedia|▼Menu]

BCPLパラダイム手続き型命令型構造化
設計者マーティン・リチャーズ(コンピュータ・サイエンティスト)(英語版)
開発者ケンブリッジ大学
型付けなし
影響を受けた言語CPL
影響を与えた言語B言語C言語Go[1]
テンプレートを表示

BCPL (Basic Combined Programming Language、Basic-CPL)は、手続き型命令型構造化プログラミング言語である。BCPLは元々ほかの言語を開発するための言語[2]であり、90年代以降は利用されていない。しかしながらBCPLは、後発の言語であるB言語C言語に影響を与えており、特にC言語が広く普及したことから、BCPLの影響は現在のプログラミング言語にも色濃く残されている。BCPLは今日のモダンなプログラミング言語に見られる、カッコやデリミタなどの特徴を備えていた[3]1966年ケンブリッジ大学のマーティン・リチャーズ(英語版)が設計した。
仕様

BCPLは小さくて単純なコンパイラを記述できるように設計され、コンパイラが16KBのメモリで動作すると言われた。しかもリチャーズのコンパイラはそれ自身がBCPLで記述されており、非常に移植性が高かった。そのためBCPLは処理系のブート用として人気のある選択肢だった。コンパイラの移植性の高さにはその構造に理由があった。コンパイラは2つのパーツに分けられていた。フロントエンドはソースをパースし、仮想機械用の中間表現であるO-codeを生成した。バックエンドはO-codeを受け取り、ターゲットマシンのコードに変換した。新しいマシンをサポートするためにはコンパイラのコードの1/5だけを書き直せばよく、通常は2?5人月の作業であった。その後まもなくこの構造はごく一般的になった(Pascal及びJava参照)。

BCPLは1種類のデータ型だけしかない特殊な言語だった。1ワードは通常アーキテクチャが定めるマシンワードの固定ビット長で、当時のマシンが持つメモリ容量ではポインタとしても十分な範囲があった。当時は1ワードが8ビットではないコンピュータがほとんどであった。アドレス可能なメモリの最小単位がワードではなくバイトであるマシンや、より大きなメモリ空間を使用できるアドレス長が32bitまたは64bitのマシンでBCPLを利用する際に、この選択は問題があったということが後に判明した。

全ての値の判断は値を処理するのに利用した演算子によって決定された(例えば+は2つの値を両方とも整数として加算し、!は間接的に値を参照するポインタとして扱った)。この働きにより実装はタイプチェックを提供しなかった。ハンガリアン記法はプログラマーが予期せぬタイプエラーを回避するために開発された。

ワード指向のBCPLとバイト指向のハードウェアのミスマッチについては様々な方法で解決を試みられた。その1つはバイト列の中にワードを出し入れする標準ライブラリルーチンの提供だった。ビットフィールドセクション演算子と、('%'文字で示す)中置記法のバイト間接参照演算子の2つの言語機能が後に付け加えられた。

BCPLは独自の方法で翻訳単位を超えるシンボルのバインディングを扱う。BCPLはユーザー定義型のグローバル変数を持たない。その代わりにFORTRANの"blank common"に似たグローバルベクタがある。翻訳単位を超えて共有する全てのデータは、スカラーと、グローバルベクタに事前に配置したベクタへのポインタで構成される。ヘッダファイル(GET命令を使ってコンパイル時に読み込まれるファイル)は翻訳単位間でグローバルデータを同期させる重要な手段であり、GLOBAL命令を使用してシンボル名とワードアドレスの組み合わせたシンボル情報のリストをグローバルベクタに記述する。グローバルベクタは変数だけでなく外部関数へのバインディングにも使用する。これにより翻訳単位の動的なロードを容易に達成できる。基本ともいえるリンカに頼らないためBCPLではプログラマがリンクのプロセスを制御できる。

グローバルベクタはまた標準ライブラリの置き換えや引数の変更を容易に行えた。プログラムは元のルーチンのグローバルベクタを別のメモリに保存しておき、別バージョンへのポインタに置き換えることができた。この別バージョンは内部でオリジナルバージョンを呼び出せた。これはデバッグに役立った。

BCPLは世界初の弓カッコ『{}』を文法規則に利用した言語であるとされる。最初のBCPLのマニュアルには弓カッコについての記述はなく$(と$)が用いられているが、後にTX-2に移植されたBCPLでは弓カッコが使われており、そのことを記述したマニュアルはB言語の開発時期よりも古いものである[4][注釈 1]。さらに、このマニュアルは第2版であり、第1版時点で弓カッコが使われていれば、その起源はさらに古いことになる。なお、弓カッコはB言語やC言語から逆に影響されてBCPLに導入されたものであるとC言語の作者であるリッチーは示唆しているが[5]、上記の時間的前後関係からそのようなことはありえず、これはリッチーが参照しているBCPLのマニュアルがTX-2版よりもさらに古い最初のものであったことに基づく誤解である。弓カッコの採用において、BCPLとB言語の間に関連性があったかどうかは完全には判明していないが、B言語の開発時点で、開発者であるトンプソンやリッチーはTX-2版BCPLを知らなかった可能性が高く、当時使用されていたテレタイプ端末の制約によって偶然に一致した可能性がある[6][7]。C言語では採用されなかったBCPLの//による単一行のコメントはC++や後のC99で再び採用された。

BCPLの哲学は書籍「BCPL, the language and its compiler」からの引用によって端的に示される。BCPLの哲学は、最良を知ると皆が考える暴君がいるのではなく、何が許されて何が許されないのかという決まりが定められているのでもない。どちらかといえばBCPLは、たとえ明らかに馬鹿げた事態に直面したときでさえ、不平を言わずに自らの能力を最大限に活かしてサービスを提供せんとする召使いとして振舞う。彼が何をしていて、細かい制限に制約されないということを、プログラマーは常に理解しているものと考える。
歴史

BCPLは最初にケンブリッジ大学のマーティン・リチャーズが1967年に開発した。1960年代初頭に開発された複雑なCPLを簡略化しようとする試みだった。リチャーズは「コンパイルを難しくする特徴を仕様から削る」ことによりBCPLを開発した。CTSSで動作するIBM 7094用の最初のコンパイラの実装は、1967年の春にリチャーズがMITProject MACを訪問している間に書かれた。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:22 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef