B言語

出典: フリ?百科事典『ウィキペディア(Wikipedia)』
B言語
パラダイム 手?き型
設計者 ケン?トンプソン
開?者 ベル?究所
型付け なし
影響を受けた言語 BCPL
影響を?えた言語 C言語
テンプレ?トを表示

B言語 ビ?げんご )は、 AT&Tベル?究所 ケン?トンプソン (Ken Thompson) によって開?された プログラミング言語 である。ケン?トンプソンが デニス?リッチ? (Dennis Ritchie)監修の元で設計し、1969年頃に登場した [1]

特? [ 編集 ]

B言語 は再?に??し、非?値型に??し、特定の機種に依存しない言語であり、OSや他の言語などを開?するための言語として設計された [2] 。デ?タ型を持たない言語で、ハ?ドのCPUレジスタに??した ワ?ド 型1種類に依存し、どのようなビット長のCPUにも??できた。文脈によりワ?ドは 整? または アドレス として扱われた。 ASCII コ?ドが一般的になり、?時ベル?究所にも DEC PDP-11 が導入され、文字デ?タ型のサポ?トが重要になった。B言語のような型がない言語の仕?は欠点とみなされるようになり、トンプソンとリッチ?は言語を?張して?部型とユ?ザ?定義型をサポ?トし、その言語は C言語 となった。

B言語で記述された プログラム は、 コンパイラ によって 中間コ?ド に?換され、?行には インタプリタ を必要とした。?行時に インタプリタ によって逐次?理されるため、?行速度は極めて?かった。ただし PDP-7 版は 機械語 を出力できるように改良された。

?史 [ 編集 ]

トンプソンは、 DEC社 製コンピュ?タ PDP-7 上で UNIX の開?を行っていたが、?時、 UNIX 上では プログラム アセンブリ言語 で記述することしかできなかった。そこでトンプソンは UNIX 上で動作する 高級言語 の開?を始めた。トンプソンは UNIX の開?以前、 Multics の開?に携わっており、B言語は、 Multics 上で動作していた BCPL を元に開?された [note 1]

B言語は本質的には、トンプソンがその時代の ミニコン メモリ容量 に?めるために、不要と感じたコンポ?ネントを除去したBCPLシステムである。またトンプソンの好みに沿うような?更も行われた(たいていは、一般的なプログラムで空白以外の文字?を削減できるという方向であった [3] )。BCPLにあった ALGOL 由?の記法は大幅に改められた。代入演算子は、 ALGOL 58 英語版 で採用された := から、ALGOL開?メンバ?の1人である ハインツ?ルティスハウザ? がかつてSuperplanで採用していた = に?され、また比較演算子は = から == へ置き換えられた。

トンプソンは加減算代入演算子を?明し、 x =+ y の形で??した(C言語では順序が逆?して += となった)。またB言語ではインクリメント、デクリメント演算子( ++ and -- )が導入された。演算子を前につけるか後ろにつけるかで、?更前と?更後のどちらの値が式の結果に適用されるのかを選?できた。これらの新機能は最初のバ?ジョンのB言語には見られなかった。デニス?リッチ?によれば、多くの人はDEC PDP-11で導入された自動インクリメント?自動デクリメント?アドレッシングモ?ドのために開?されたと思う人が多いが、Bが開?されたときにはPDP-11は存在しておらず?史的に見てありえないとしている [3]

BCPL Forth と同じくB言語はマシンのワ?ド長である1つのデ?タ型のみを持っていた。多くの 演算子 (例えば + - * / )ではこれを整?として扱い、それ以外は ポインタ として扱った。それ以外の部分についてはC言語の初期バ?ジョンとよく似ていた。C言語の 標準入出力ライブラリ を彷彿とさせる ライブラリ がわずかながら存在していた [2]

初期の頃は、初期の UNIX を使用した DEC社 PDP-7 用と PDP-11 用の??があり、また GCOS というOSが動作する ハネウェル の36 ビット メインフレ?ム の??もあった。最初にPDP-7用の スレッデッドコ?ド を出力する??が開?され、次にリッチ?がマシン語を出力するコンパイラを TMG 英語版 で??した [4] [5] [6] 。1970年にPDP-11が開?現場に導入され、スレッデッドコ?ド版がPDP-11に移植された。アセンブラのdcとB言語自身はB言語で記述された。最初の yacc がこのPDP-11用に開?された。リッチ?はこの時期にメンテナンスを引き受けていた [3] [6]

B言語の型のない設計はハネウェルやPDP-7などの多くの古いコンピュ?タでは意味のあることであったが、PDP-11以降のほぼ全てのコンピュ?タがサポ?トしている8ビットの キャラクタ デ?タ型にエレガントにアクセスすることが難しいことが問題になった。リッチ?は1971年に言語の?更を開始し、コンパイラがマシン語を出力するように?換すると同時に、最も?著な?張としてデ?タ型を??に追加した。1971年から1972年にかけてB言語はNew B言語へ進化し、そしてアラン?スナイダ?(Alan Snyder)の?い要求によって プリプロセッサ が加えられ、1972年から1973年の初期にC言語となった [3]

1973年の夏の間にPDP-11用のUNIXがC言語で書き直され、一連の努力が成し遂げられた。1972~73年の間にハネウェル635とIBM 360 /370に移植する必要があり、マイク?レスク(Mike Lesk)は後にC言語の標準入出力ライブラリとなる「汎用的なI/Oパッケ?ジ」を書いた。

B言語は C言語 にほぼ置き換わった [7] 。B言語はハネウェルのメインフレ?ムGCOSで1990年代頃まで利用され?けていた [8] 。また、小型システムの限定されたハ?ドウェアを利用するためであったり、大規模なライブラリやツ?ルやライセンスの問題、また?純に業務に必要十分であるからなどのような??な理由により、一部の 組み?みシステム でも利用されていた [7] 。非常に大きな影響力のあった AberMUD はB言語で記述されていた。

コ?ドの例 [ 編集 ]

ケン?トンプソンによる Users' Reference to B より [2]

/* 以下の??は負でない整?nをb進?の形で出力する(ただし2<=b<=10)。

   このル?チンはASCIIキャラクタのコ?ドの値が

   0から9まで連?しているということを利用している。*/


printn
(
n
,
 b
)
 {

        extrn
 putchar
;

        auto
 a
;

        /* Wikipedia による注?: この auto キ?ワ?ドは自動??(??スコ?プの??)

           を宣言している。C++11 の型推論の auto とは別もの。 */


        if
 (
a
 =
 n
 /
 b
)
        /* 代入文であり、比較演算子ではない*/

                printn
(
a
,
 b
);
 /* 再? */

        putchar
(
n
 %
 b
 +
 '0'
);

}

/* 次のプログラムはネイピア?の小?点以下の部分を4000桁まで計算し、

   1行5文字のグル?プに分けて50文字を出力する。

   この手法は以下を?純に?張した物であり、

     1/2! + 1/3! + ... = .111....

   それぞれ2桁、3桁、4桁…に??する。 */


main
()
 {

	extrn
 putchar
,
 n
,
 v
;

	auto
 i
,
 c
,
 col
,
 a
;


	i
 =
 col
 =
 0
;

	while
(
i
<
n
)

		v
[
i
++
]
 =
 1
;

	while
(
col
<
2
*
n
)
 {

		a
 =
 n
+
1
 ;

		c
 =
 i
 =
 0
;

		while
 (
i
<
n
)
 {

			c
 =+
 v
[
i
]
 *
10
;

			v
[
i
++
]
  =
 c
%
a
;

			c
 =/
 a
--
;

		}


		putchar
(
c
+
'0'
);

		if
(
!
(
++
col
%
5
))

			putchar
(
col
%
50
?
' '
:
 '
*
n
'
);

	}

	putchar
(
'
*
n
*
n
'
);

}

v
[
2000
];

n
 2000
;

脚注 [ 編集 ]

  1. ^ 名?はBCPLの短縮形であるとされているが、トンプソンがMulticsを使用していた時代に開?した別の言語Bonが由?であるとする?もある[Thompson 69]。Bonはトンプソンの妻であるBonnieから?ている(マニュアルの記載より)、 秘密の呪文を?く宗?の ボン? から?ているなどの?もある。 [3]

?考文? [ 編集 ]

  1. ^ B - computer programming language ”. 2019年11月29日 ??。
  2. ^ a b c Thompson, Ken (1972年1月7日). “ Users' Reference to B ”. Bell Laboratories. 2015年6月11日時点の オリジナル よりア?カイブ。 2014年3月21日 ??。
  3. ^ a b c d e Ritchie, Dennis M. (March 1993). “The Development of the C Language” . ACM SIGPLAN Notices 28 (3): 201?208. doi : 10.1145/155360.155580 . http://www.bell-labs.com/usr/dmr/www/chist.html .  
  4. ^ TMG ”. multicians.org. 2019年11月29日 ??。
  5. ^ Ritchie, Dennis M. . “ The Development of the C Language ”. Bell Labs/Lucent Technologies. 2015年6月11日時点の オリジナル よりア?カイブ。 2019年11月29日 ??。
  6. ^ a b McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971?1986 (PDF) (Technical report). CSTR. Bell Labs. 139。
  7. ^ a b Johnson and Kernighan . “ THE PROGRAMMING LANGUAGE B ”. Bell Laboratories. 2015年6月11日時点の オリジナル よりア?カイブ。 2014年3月21日 ??。
  8. ^ Thinkage UW Tools Package ”. Thinkage, Ltd.. 2014年3月26日 ??。

外部リンク [ 編集 ]