難解言語

プログラミング言語は、よく、より人間に理解しやすい上級言語と、機械にとって理解しやすい低級言語に分類されることがしばしばあります。
沙耶です。

BASICなんかは上級言語の部類ですし、Cもかなり上級でしょう。
逆にアセンブリ言語や機械語そのものなんてのはかなり低級な部類に入ります。

正規表現も大概に非人間的だとは思いますがwwwwwwwwwwwwwwwww
しかし、それとはまったく異なる頭のわるい言語が存在することも忘れてはなりません。


世の中、より簡単に、そしてよりわかりやすくプログラムを書こうという無駄な努力で満ちています。

そのような無駄を一切排したとき、プログラムはどこまでシンプルに、そして美しくなれるのでしょうか。


難解言語。BrainfuckやWhitespace。そのソースコードたるやもはや何をやってるのかさっぱりチンプンカンプンですが。っていうか初見で何やってるのかわかったらキチガイかなんかだとしか思いません。

では、よろしければソースコードをご覧いただきましょうか。
こちらはWhitespaceによる”Hello,World”のソースコードです。

Sayが命令文でHelloが出力文字列だろ、何が変なの??って思っちゃったそこのキミ。
それ、コメントです。Whitespaceはその名の通り、すべての空白以外の文字を無視します。すなわち、スペースやTabやLFでソースコードは記述されます。

コメントを取り除く、すなわちSay Helloの文字列を除去してもこのプログラムは”当たり前のように”動作します。

さっきのソースコードのとこでCtrl+Aしてみてください。大量の空白の存在が明らかになります。
それがプログラム本体です。可読性? 何のこと?wwwwwwwwwwwww
ソースコードのプリントアウトによる持ちだしの危険性? できるもんならやってみてください。
プリントアウトされたWhitespaceのソースコードなんて、コード製作者にすら解読できません。

そして、お次はBrainfuck。

たった八つの命令だけで構成されたステートメントは、非常にシンプル。かつ、美しい。

曰く。

> ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。
< ポインタをデクリメントする。C言語の「ptr--;」に相当。
+ ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。
– ポインタが指す値をデクリメントする。C言語の「(*ptr)–;」に相当。
. ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。
, 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。
[ ポインタが指す値が0なら、対応する ] の直後までジャンプする。C言語の「while(*ptr){」に相当。
] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

何を言ってるのかさっぱりですね。さっぱりですが、論理上、こんだけあればぶっちゃけCなんかと同等レベルの表現力を持っています。
なんせ、ちょっとアセンブリ言語なんかをかじったことがあれば、これが極めてアレのレジスタ操作と基本分岐にほぼ対応する言語であると理解できるはずです。
Brainfuckは難解であると同時に、チューリング完全な最少セットとしての実装のもっともシンプルかつ単純なものでもあるのです。そういう意味では実用に置き換えることも(理論上は)不可能ではありません。

レジスタをポインタの指し示すメモリ上の位置、と置き換えれば、アレに入出力のライブラリが命令セットでくっついてる言語じゃないですか、って話ですよね。

BrainfuckによるHello,World。

++++++++[>+++++++++<-]>.<+++++[>++++++<-]>-.+++++++..+++.<
++++++++[>>++++<<-]>>.<<++++[>——<-]>.<++++[>++++++<-]>
.+++.——.——–.>+.

もう何? おまえふざけてんの?
って言われそうですね。解説するのもめんどくさいからイヤです。自分で分解してみてください。それこそがBrainfuckの醍醐味ですし。
さて、このBrainfuckの命令文ステートメントは別にほかの言葉でも構わないのです。

なぜこの文字が選ばれたかというと、可読性に配慮したそうですどこがだよ死ねよボケ。

というわけで、このBrainfuckの文字を別の文字列に置き換えたインタプリタを作ることは容易なわけです。

こんなふうに。すべてがA一文字で記述されるとどうなるかというもの。プログラミング言語、A。
Hello,Worldは「Aが8進数で22222222260222222220222222222220222221113704022422222224422240343333333333334122222222433333333422243333334333333334024個続く」と簡易表記することが許されるらしい。
なぜ8進数で記述するのかは知ったことではないが、とても非常識的であるw

ていうか書いた方も書いた方だw
ブラウザ上でBrainfuckからの変換も用意されていますが、デフォルトは簡易表記です。正式な表記に切り替えるリンクもありますが、下手に押すと用意にブラウザがメモリの大量喰いを始めるので、ハングっても泣かない覚悟で押しましょう。

ちなみに沙耶はなんの気もなしにおして痛い目をみました。

という前提条件を知った上で

1レス内に全命令のリファレンスが入る素敵な言語。

始めて笑えるわけです。めんどくさいレス紹介するんじゃねぇ!!!wwww
そうかんがえるとみさくらなんこつやルイズコピペももしかしたら何かのプログラムなのかも知れません。私たちが全く知らないだけで、ねw

しかし真に恐ろしいのはBrainfuckはそのシンプルさゆえにインタプリタのソースコードが異常に短い、という現実wwwwwwwwwwwwwwwwwwwwwww
コンパイルされたBrainfuckはWindows版でわずか24kバイトのプログラム。
小さいですねぇwwwwwwwwwwwwwwwwwwwwwwwww

ちなみにこちらには様々なHello,Worldがあります。OokやWhitespace、Brainfuckなんかもありますし、なぜかTeXまであります。お前プログラミング言語じゃないだろwwwwwwwww

たまに知らない世界のものを眺めてみるのも面白いですよね。
しかしこう並べてみると、やはりMalbolgeの凶悪さは抜きんでていますね。興味があったらお調べください。人の手で作られた言語でありながら、プログラムをヒトの手で生成するのが極めて困難な言語です。


ついでにこんな話題がスラドで出ていたので。

Cはユダヤですかー。K&R原理主義者とかいるからイスラムっぽいけどw
最近ブードゥー教の経典ばっか書いてる沙耶でした。

0 thoughts on “難解言語

  1. デモンズソウルを誤って、ただのソウルにしてしまいヘコむ。
    >最初からやり直してみますた。
    結晶トカゲも結構逃がしてたし。
    ボーレタリア王城1-1を速攻終わらせて、嵐の祭祀場も全エリア終わらせる。
    >ソウル稼ぎ、白の弓、聖者アルベイン救出して反魔法領域ゲト
    強化して、腐れ谷1-1をクリア。
    >毒の雲ゲト
    反魔法領域で、蛸看守を蛸殴りにして塔のラトリア1-1クリア。
    >賢者フレーキ救出
    ボーレタリア王城1-2の通路の赤ドラゴンを毒の雲で毒殺して、塔の騎士も倒す。
    >完全なる防御ゲト
    後は、適当に進める。
    わかってはいても、結構凡ミスで死にましたがwで、今SLv100です。
    後、やっぱり肉体取り戻したらすぐ黒ファントムに侵入されてぬっ殺される罠w
    対人準備してないからきついw
    ソウル体生活も長くなった・・・

  2. なんか、オンラインプレイのバグにはまったー
    黒ファントムで戻ってきたら、1周目なのに敵の強さが2周目くらいに強くなってる件。。。

  3. それ逆のパターンは小技として紹介されとるが、2週目の強さに化けることもあるのかwww
    取ってて良かった完全な防護。ってとこですねぇw

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です