B: The Beginning | Official Trailer | Netflix
アニメ『B: The Beginning』
警察と犯罪者とそれを違法に成敗するB。Bの方は人間とは思えない能力でとてつもなく強いです。それに現場にBのメッセージを残します。このBが意味深。警察側に切れ者がいますが、Bを追い詰めていくのでしょう。しかし、Bは身近にいる、と。そしてまた別の組織の登場。面白い要素は詰まってるので、ブルーレイとかで発売されたらまとめてみる予定です。
Bということで今回はB言語です。B言語は、C言語の元になったプログラミング言語です。今はどこにもB言語で動いているシステムはないとは思うのですが、B言語のマニュアルを元に作られたコンパイラを見つけました。あくまでもB言語の雰囲気を楽しむ(this is a toyと説明されています)コンパイラですが、こちらで配布されています。
https://github.com/Leushenko/ybc
linux用アーカイブがあるのでダウンロードします。
takk@deb9:~$ wget https://github.com/Leushenko/ybc/releases/download/v0.5-linux/ybc.zip
展開して内容を確認してみましょう。
takk@deb9:~$ unzip ybc.zip takk@deb9:~$ cd ybc takk@deb9:~/ybc$ ls LICENSE b-lib-linux.s tests ybc.bmx ybparser.bmx README.md b-lib.s ybassembler.bmx ybcodegen.bmx TMeta.bmx examples ybc ybexpressions.bmx takk@deb9:~/ybc$
ybcというファイルがB言語のコンパイラのようです。
takk@deb9:~/ybc$ file ybc ybc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=45302d179228ab9ddb0ce4510c26acc305f8c7d9, stripped takk@deb9:~/ybc$
32bitの実行ファイルなので、64bit環境で試す場合は、下準備が必要です。
takk@deb9:~$ sudo apt-get install lib32z1 takk@deb9:~$ sudo apt-cache search libc6-dev-i386
これで、32bitのELFも動くようになります。
さて、ybcディレクトリに格納されているB言語のサンプルプログラムを見てみましょう。
takk@deb9:~/ybc$ ls examples/ example1.b example2.b example3.b takk@deb9:~/ybc$ cat !$example1.b cat examples/example1.b /* The following function will print a non-negative number, n, to the base b, where 2<=b<=10, This routine uses the fact that in the ANSCII character set, the digits O to 9 have sequential code values. */ printn(n,b) { extrn putchar; auto a; if(a=n/b) /* assignment, not test for equality */ printn(a, b); /* recursive */ putchar(n%b + '0'); } newline() putchar('*n'); main() { printn(12343, 10); newline(); printn(12343, 8); newline(); printn(12343, 16); newline(); } takk@deb9:~/ybc$
C言語の元になったB言語ですが、なんだか今風のスクリプトっぽいですね。
このサンプルをB言語コンパイラでビルドしてみましょう。
takk@deb9:~/ybc$ ./ybc !$ ./ybc examples/example1.b done. takk@deb9:~/ybc$
takk@deb9:~/ybc$ ./a.out 12343 30067 3037 takk@deb9:~/ybc$
見事実行できました。
計算が合ってるか一応確認。
takk@deb9:~/ybc$ printf "%o %x\n" 12343 12343 30067 3037 takk@deb9:~/ybc$
コメント