4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

B言語でHello World!を書いてみる

Last updated at Posted at 2025-12-01

以下のソースコードがB言語のHelloWorld!です。

main( ) {
    extrn a, b, c;
    putchar(a); putchar(b); putchar(c); putchar('!*n');
}
 
a 'hell';
b 'o, w';
c 'orld';

Hello Worldというと、K&R Cのものが一番有名ですが、実は最初に発表されたHello Worldは1972年にカーニハンが「A Tutorial Introduction to the Language B」という書籍の中で外部変数(C言語でいうところのextern宣言された変数)の説明のために用いたコードのようです。

C言語はB言語を元にして生まれたと言われているだけあり、C言語に似ている雰囲気がありますが、やや異なった見た目もしています。
とりあえず、外部変数を使っていると話がややこしくなるので、外部変数なしのHello Worldもお見せします。

main( ) {
    printf("hello, world*n");
}

このようにしてみると、ほぼC言語と変わらないことが分かります。
改行を表すためのエスケープシーケンスの書き方が \n ではなく、 *n になっていることが主な相違点です。

次に外部変数を使ったHello Worldに戻ります。
外部変数の代入に = 記号がないのが独特な雰囲気を出していますが、 "hello, world" という文字列を3つの変数に分割していることも独特です。
前者は単なるSyntaxの好みの問題に近しいですが、後者はB言語の仕様にも関わってきますので、解説します。

まずB言語には型がありません。これは、RubyやPythonには型がないけどGoやJavaには型があるという文脈での「型がない」という、動的型 vs 静的型の議論とは異なります。
B言語には36ビットの整数型という1つの型しかないです。
そのため、全ての変数の型はコンパイル時に定まるため、ある意味では静的型があるとも言えます1

36ビットという現代人からすると中途半端なビット数は、B言語が動いていたメインフレームであるGE-645のビット数が由来になっていると考えられます。

変数に文字列を格納するためには、この36ビットの変数の中に「右寄せ・ゼロ埋め」の形式でASCIIコードを詰めていました。ASCIIコードは8ビットなので、1つの変数に格納できる文字数は最大で4文字です。
そのため、外部変数をつかったバージョンのHello Worldは4文字づつに分割されています。

  1. ここはネタなので、マサカリ投げないで下さい

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?