キーワード

奥深きプログラミングへの探求!難解プログラミング言語の世界をのぞいてみよう –おつまみとしてのソースコード第9皿

ユニークで面白い、意外なアイディアが詰め込まれているソースコードの世界をおつまみ感覚で紹介するのが、情シスのじかんの「おつまみとしてのソースコード」です!週末も近づき、ちょっと一息つきたくなる木曜日の夕方にお届けしていきます。

ソースコードといえば、読みやすく、理解しやすいのが正義である、という感覚をみなさんはお持ちですよね。しかし、「これはソースコードなの?」と思わずつぶやいてしまうような、読みやすさを一切無視したプログラミング言語もこの世には存在します。

プログラミングの常識を覆す「難解プログラミング言語」と呼ばれるその世界は、エンジニアたちによる、プログラミング言語へのあくなき探求の産物であるといえます。

おつまみとしてのソースコードの第九回は「難解プログラミング言語」。可読性や効率性を重視するプログラミング言語とはかけ離れた、未知なるソースコードの世界をのぞいてみましょう!

エンジニア仲間とのアイスブレイクや、一人でまったりする時間のお供に、ぜひご覧ください!

         

難解プログラミング言語とは?

難解プログラミング言語とは、ひとことで言うと、意図的に難読化されたプログラミング言語のことです。難読化だけではなく、特異な設計がされたプログラミング言語であることが多く、それが理解を難しくしているケースもあります。

通常のプログラミング言語が、人間にとって理解しやすい、効率的なソースコ―ドによって記述されることを目指すのに対し、難解プログラミング言語は、その全く逆の発想で作られた言語であるといえるでしょう。

基本的には実用性は考慮されておらず、プログラミング言語の概念を探求したり、制約の限界に挑戦したりする、高度なプログラミングの知見を用いた遊びの一種です。しかし、その発想の奇抜さは一見の価値ありですので、ぜひ難解プログラミング言語の世界に触れていきましょう!

代表的な難解プログラミング言語を3つ紹介!

では、早速難解プログラミング言語はどのようなものなのか、具体例をみていきましょう。

ここでは、難解プログラミング言語の代表格「Brainfxxk」、発想の奇抜さでは群を抜いている「Whitespace」、言語のコンセプトがユニークすぎる「Shakespeare」の3つを紹介していきます。

Brainfxxk|“記号8つ“で世界が動く!ミニマリスト心をくすぐる極限プログラミング

Brainfxxkは、1993年に開発された難解プログラミング言語です。この言語の最大の特徴は、わずか8つの記号のみでプログラムを記述できるという極端なミニマルさにあります。言語仕様とソースコード例を見てみましょう。

・言語仕様

以下の8つの記号を記述することによって、処理を実現します。

>:ポインタをインクリメントする
<:ポインタをデクリメントする
+:ポインタが指す値をインクリメントする
-:ポインタが指す値をデクリメントする
.:ポインタが指す値をASCII文字として出力する
,:1文字を読み込み、ポインタが指す値に格納する
[:ポインタが指す値が0ならば、対応する]の直後にジャンプする

・ソースコード例

Hello World!を出力するBrainfxxkコード

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

Brainfxxkは、コンパイラのサイズを極限まで小さくすることを目的として開発されました。実際に、初期のコンパイラのサイズは非常に小さく、コンパイラのサイズはわずか123バイト、インタプリタは98バイトでした。

言語仕様としては、メモリ操作とポインタ移動のみであらゆる処理を行う言語ですが、命令のバリエーションが少ないため、複雑な処理を行うソースコードは膨大で難解になります。

しかし、このようにミニマルな言語であるにも関わらず、チューリング完全(理論上どんな計算でもできる能力を持つ)であるのが面白いところです。

言語仕様が簡潔であるため、記号を異なる文字に置き換えたり、命令の数を増減させたりする派生言語が数多く生み出されているのも、特徴のひとつであるといえるでしょう。

Whitespace|“見えないソースコード“の衝撃!空白文字で動く謎すぎる言語

Whitespaceは、2003年4月1日にリリースされた難解プログラミング言語です。その最大の特徴は、ソースコードがスペース、タブ、改行といった「空白文字」のみで構成されている点にあります。

想像いただけたでしょうか?つまり、通常のテキストエディタでは、ソースコードが「見えない」プログラミング言語なのです。具体的にどのような言語なのか、言語仕様とソースコード例について説明していきます。

・言語仕様

・使用する文字は[スペース] [タブ] [改行]の3つのみ
・上記の3つの文字を組み合わせて命令を表現する
例)
[スペース]:数値をスタックに組む
[改行][スペース]:スタックの一番上を複製する
[スペース][スペース]:足し算 など

・ソースコード例

Hello World!を出力するWhitespaceコードの一部
※実際のコードはスペース、タブ、改行のみで構成されるため、ここでは視覚的にわかりやすいように、スペースをS、タブをT、改行をLで表現しています。

S S S T S S T S S S L
T L S S S S S S S T L
T L S S S S T S T T L
T L S S S S T S S T L
T L S S S S T T T T L

上記の例では、1行目の「S S S T S S T S S S L」が1文字目の「H」をスタックする部分です。

嘘のような言語だと感じた方もいるでしょう。実は、Whitespaceは、エイプリルフールにジョークとして開発された言語なのです。しかし、Whitespaceは、ジョークのような仕様であるものの、Brainfxxk同様チューリング完全な言語であるということも驚くべきポイントです。

実用性を完全に無視した言語ですが、プログラミングの世界で、ひときわ異彩を放っている言語であるといえるでしょう。

Shakespeare|文学好きは必見!シェイクスピア劇で綴るプログラミング言語

3つ目に紹介する「Shakespeare」というプログラミング言語は、ここまでに紹介した2つのプログラミング言語とはまた趣向の異なる言語です。正式名称はShakespeare Programming Languageという名前で、略してSPLと呼ばれることもあります。

Shakespeareは、ソースコードがシェイクスピアの戯曲のような形式で記述される点が特徴です。言語仕様とソースコード例について説明していきます。

・言語仕様

以下のような内容について定義しながら、登場人物の台詞によって処理を実行していくのが基本的な記述スタイルとなっています。

言語仕様はすべて解説すると長くなるため、ポイントのみピックアップしています。

タイトル:プログラムのタイトル
登場人物の紹介:変数宣言に相当
幕(Act)、場面(Scene):ジャンプ、ループなどの制御構造
台詞:命令文に相当し、変数の操作や入出力を行う

・ソースコード例

Hello World!を出力するShakespeareコードの一部

The Infamous Hello World Program.

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.

                    Act I: Hamlet’s insults and flattery.

                    Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
 You lying stupid fatherless big smelly half-witted coward!
 You are as stupid as the difference between a handsome rich brave
 hero and thyself! Speak your mind!

 You are as brave as the sum of your fat little stuffed misused dusty
 old rotten codpiece and a beautiful fair warm peaceful sunny summer’s
 day. You are as healthy as the difference between the sum of the
 sweetest reddest rose and my father and yourself! Speak your mind!

 You are as cowardly as the sum of yourself and the difference
 between a big mighty proud kingdom and a horse. Speak your mind.

 Speak your mind!

[Exit Romeo] 

上記の例では、Hamletの台詞が1文字目の「H」の文字を出力するプログラムになっています。台詞部分がどのような命令を実行しているかについて、簡単に触れておきましょう。

台詞の中のすべての名詞は1か-1に変換されるようになっており、名詞の前に形容詞がつくたびに、その数値がべき乗されます。また、特定の文法を用いると四則演算がされる仕様となっており、文章の内容によって数値が計算されていきます。最後に、「Speak your mind」という定型文を用いることで、変数の値に相当する文字コードの文字を出力する、という仕組みです。

例からもわかるように、Shakespeareは非常に冗長でわかりにくい言語です。しかし、まるで演劇の台本のような流れで、登場人物の会話を通して処理を実行していくという、文学とプログラミングの融合を図るかのような斬新な言語なのです。

その他の面白い難解プログラミング言語

ここまで紹介してきたプログラミング言語以外にも、難解プログラミング言語は数多く存在します。

例えば、画像をソースコードとする「Piet」、実行するたびにコードが変化する超難解言語「Malbolge」、ファイル名もコードとして解釈する「Pxem」など、その発想もバリエーションに富んでいます。

以前、当シリーズ「おつまみとしてのソースコード」で紹介した日本酒「ソースコード」のラベルに書かれていたソースコードも、実は難解プログラミング言語の「JSFxxk」で記述されたものです。こちらもぜひお読みください!

ラベルに隠された謎が最高のおつまみになる。日本酒「ソースコード」の解読にチャレンジしてみました! –おつまみとしてのソースコード第4皿 | 情報システム部門を刺激するメディア 情シスのじかん

ラベルに隠された謎が最高のおつまみになる。日本酒「ソースコード」の解読にチャレンジしてみました! –おつまみとしてのソースコード第4皿 | 情報システム部門を刺激するメディア 情シスのじかん

続きを読む 》

まとめ

難解プログラミング言語の世界はいかがでしたか?難解プログラミング言語は、実用性は皆無であるものの、知的好奇心や創造性を刺激する奥深い世界です。難解プログラミング言語に触れることによって、常識にとらわれない発想で、プログラミング言語の概念や仕組みを新たな角度から理解することが可能となります。

あなたも難解プログラミング言語の世界に足を踏み入れ、ソースコードの奥深さを体験してみませんか?

著者:羽守ゆき
大学を卒業後、大手IT企業に就職。システム開発、営業を経て、企業のデータ活用を支援するITコンサルタントとして10年超のキャリアを積む。官公庁、金融、メディア、メーカー、小売など携わったプロジェクトは多岐にわたる。現在もITコンサルタントに従事するかたわら、ライターとして活動中。
 
 

特集|仕事で疲れた脳みそをリフレッシュ♬
おつまみとしてのソースコード

木曜日の夕方に仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。

まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。

コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。

業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。

さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?

本特集はこちら
 

関連記事Related article

       

情シスのじかん公式InstagramInstagram

       

情シスのじかん公式Instagram

30秒で理解!フォローして『1日1記事』インプットしよう!

close close