メルマガバックナンバー 第10回
もくじ
変態プログラミング言語の世界
世の中には色々なプログラミング言語があります。
C言語やJavaといったメジャーなものから、極一部でのみ使われるマイナーなものまで。
そしてその中には、正気を疑うような狂気じみた言語も存在します。
今回はそんな変態プログラミング言語の世界を紹介します。
Brainfuck ブレインファック
名前からしてヤバい、変態言語の代表格。よくBrain*uckと伏せ字にされます。
この言語、わずか8種の文字 ><+-.,[] しか使いません。
hello, worldをBrainf*ckで書くと、こんな風になります。
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.————.<++++++++.——–.+++.——.——–.>+.
一見すると文字化けにしか見えませんが、論理的に正しい記述です。
なお、これを見て「頭おかしい」と思った方は正常です。
Brainfu*kは「最も単純な言語仕様とは何か?」を実現したもので、プログラミングの最も原始的(原子的?)な姿と言えます。
だからギリギリまで無駄を削って、やり過ぎなくらい単純化を極めた結果です。
その尖った極端さから非常に人気があり、多くの派生言語も生まれています。
派生といっても、前述した8種の文字を「別のワード」に置き換えれば良いだけです。
これだけでシュールなソースコードが出来ます。
例えば8文字をジョジョの台詞に置き換えたジョジョ言語なんてのがあります。
ソースはこんな風になります。
オラオラオラオラオラオラオラオラオラあ・・・ありのまま今起こったことを話すぜ!スターフィンガー!オラオラオラオラオラオラオラオラスターフィンガー!オラオラオラオラオラオラオラオラオラオラオラスター フィンガー!(以下略
他にも、けものフレンズのサーバルちゃんバージョン「Kemono」や、名前だけで想像が付く「Gochiusa」など
把握しきれないほど大量の派生言語があります。
コンパイラ(インタープリタ)のソースは多数公開されてるので、あなたもお一ついかがでしょうか?
Whitespace ホワイトスペース
Brainfuc*とは別方面に振り切れた言語です。
こちらはスペース、タブ、改行しか使いません。
つまりソースコード、必ず真っ白になります。ざ、斬新だ。
(だからWhitespaceって名前です)
「hello, world」をWhitespaceで書くと、こんな風になり……見えないので止めときます。
見えないソースコードが見たいという酔狂な方は、適当に検索してみて下さい。
もしかしたら脳がトリップして世界の真理が見えるかもしれません。
HQ9+ エッチキューナインプラス
いきなりですが、プログラミング言語HQ9+で「hello, world」を書くとこうなります。
H
わずか一文字。すばらしい。
*rainfuckやWhitespaceにも見習って欲しいレベルです。
また「最も簡単にインタープリタが作れる」言語としても有名で、命令は4つしかありません。
H : “Hello, world!”を出力する
Q : プログラムのソースコードを出力する
9 :「99 Bottles of Beer」の歌詞を出力する(英語の数え歌 ビールが99本から徐々に減っていく)
+ : アキュムレータを1増やす(何の意味もない)
ご覧の通り、四則演算も分岐もない豪快な仕様が特徴です。
「+」命令はありますが結果を参照する方法がないので、せいぜい指の運動にしかなりません。
この言語も妙な人気があり、世界中で色んな処理系が存在します。
面白い点として(+以外の)命令は、よくある演習問題の解答になっています。
Hは基本の「hello, world」、9は初歩的なループ処理です。
そして、Q命令の「自分自身のソースと同じ文字列を出力する」のは、クワインといって(他の言語では)非常に難しい問題です。
しかし、それがHQ9+なら一文字で解けます。
すご…いのだろうか?
つまり言語仕様自体が、プログラミングへの皮肉になっているわけですね。
もし私が拡張するなら、数あてゲームを実行する「K」命令を追加します。
まだまだあるよ変態言語
この3つ以外にも、まだまだ多くの正気を疑う(褒め言葉)プログラミング言語があります。
言語仕様が暗号化されていて、書くこと自体が地獄なMalbolge(マルボルジェ)
シュワルツネッガーの台詞で構成されたArnoldc(アーノルドシー?)
画像がソースコードのPiet(ピエト)
ソースが芝居の台本になる「Shakespeare(シェークスピア)」などなど
まさに人間の創造力は留まることを知りません。
開発者の発想とユーモアへ敬意を評しつつ、どっこい私も負けたくないなーと強く思いました。
変態言語とチューリング完全
さて今回は変なプログラミング言語を3つ紹介しました。
いかがでしたか?
なんというか、世界には面白い事を考える人がいるものですね。
しかし馬鹿にしちゃいけません。
驚くべき事にB*ainfuckとWhitespaceの計算能力は、C言語やJava等と論理的に互角です。
言い換えると、理論上CやJavaで可能な処理は、100%確実にBr*infuck・Whitespaceでも可能です。
なぜならBra*nfuckもWhitespaceも、世の中にあるすべてのアルゴリズムを実行できる事が証明されているからです。
(もちろんCやJavaも)
つまり数学的には、Brai*fuck・WhitespaceでもドラクエやFFやモンハンが作れます。
誰もやらんでしょうが。
これをチューリング完全と言い、プログラミングの本質を知る上でたいへん面白い話題です。
そんな面白い話なんですが…
長くなるので、詳しい話は次回にて。乞うご期待。
名言はじめました
今こそ その眼で、しかと見よ
サイトに新機能を搭載しました。プログラマの名言を表示します。
今もこのページの上に出てますよね。
偉人やハッカーの言葉、そこら辺のプログラマの叫び、が画面から溢れ出ます。
名言は全135個、君は全ての名言に出会えるか?
ツイート機能付きなので
「なるほど」or「ふざけるな」と思ったらツイートお願いします!
ちなみに私のお気に入りは、この3つ。
ある人の定数は、別の人の変数である
by スーザン・ガーハート(コンピュータ科学者)私は変態だが、ビジネスマナーのおかげで本性を隠し生きて行ける
by 変態で凄腕プログラマの友デバッグという作業がバグを取り除くことなら、プログラミングとはバグを注入する作業に違いない
by エドガー・ダイクストラ
さて完成を記念して、ツイート企画をやります。
・プログラミング書籍の館をフォローする
・そして、気に入った名言をツイートボタンから呟いて下さい
ツイートして下さった方が10人を超える毎に、私の黒歴史をサイトにアップします。
は?何いってんだこいつ??と思ったでしょう。
いやその、ただ何となく面白い事したかっただけです…
本当に面白いかどうかはさておき、ご参加お待ちしてます。
※募集は終了しました(ゼロ人でした…)
前回クイズの答え
前回のクイズは↓こんな問題でした。
かつて私は某ソース(C言語)の関数冒頭で、こんな記述に遭遇しました。
// この配列は一度も使ってないけど、消すとクラッシュするので
// 絶対にコメントアウトしない事!
char aaaaa[256];↑をみた時、思わず失禁…はしなかったですが、恐怖で体が震えました。
さて、何故これが恐ろしいのか?その理由をお答えください。
正解は領域破壊を起こしてる可能性が高いからです。
クラッシュの原因は、どこかで間違えて範囲外へアクセスし、スタックにある変数やアドレスを滅茶苦茶にしたからでしょう。
そして配列があると一見動くのは、配列がスタックの「壁」になってるからです。
つまり配列の中は滅茶苦茶になりますが、スタックは守られるわけです。
もし256が128だったら、壁の厚さが足りずクラッシュしてたかもしれませんね。
とはいえ、こんな小細工は所詮その場しのぎ。
領域破壊している事実は変わらないので、いずれ洒落にならない不具合が発生しそうです。
だから保守する人は、いつ来るとも分からぬ災厄に怯え続ける事でしょう。
今回は5名の応募があり、1人だけ正解者が出ました!パチパチパチ。
正解した方のメールアドレスへAmazonギフト券を送信致します。
ファファファこれで家でも買うと良い。
今回はここまでです。読んでいただきありがとうございました。
プログラミング書籍の館 江畑