2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【目的無しの泥臭調査⑦】世に溢れる難解言語と呼ばれる「舞い上がり言語」を試して、脳内活性化

Posted at
  • ふと気になったことを、淡々と赴くままに調査していく、この上ない自己満足記事第七弾。
  • 生涯をささげても把握しきれない膨大な技術情報を、ひとまず表面だけ吸い取ってく生活。
  • 今回は、日々増殖を続けるプログラミング言語の中でも、思わず舞い上がってしまう「難解言語」と呼ばれるものに、触れていくことにしよう。

難解言語

  • 難解言語(Esolang)とは、「記述性・実用性・可読性」が難解になるように作られたプログラミング言語。
  • ユニーク性とビジュアル性にこだわったものが多くあり、エンジニアの趣味等で、日々たくさんの難解言語が作成されている。
  • 「記号のみ」「絵文字のみ」といったものもあるなど、種類は多岐にわたる。
  • 難解言語リスト

調査言語

  • 難解言語はありとあらゆる数があるが、今回は下記の言語を取り上げる。

    • Brainf*ck
    • whitespace
    • Emojicode
  • ※概要や特徴、サンプルプログラムのみとして、環境や各詳細な文法等は扱わない。

実行環境

  • 今回調査した難解言語は、下記のオンライン実行環境を利用。
    • Try It Online
      • 様々な種類の言語を試すことができる。

Brainf*ck

概要

  • 命令文が8種類のみで構成されたプログラミング言語。
  • コンパイル(変換)を最小限に抑えるように設計されている。
  • 難解でありながら、機能性と汎用性が高いことから、様々な派生言語が生まれている。
  • 下品な名称を隠すために、Brainf*ckと表記する場合が多い。

特徴

単純な値操作のみの処理

  • 最初に準備される初期化(0)されたセル(配列)に、追加や移動等といった操作をしていくことで、処理が可能。

命令文の少なさ

  • 下記の8種類の命令文で構成されているため、覚えることが少ない。
命令文 内容
+ セルの値を1増やす
- セルの値を1減らす
. セルの値を出力する
, セルの値へ標準入力を代入する
> セルを1つ左へ移動
< セルを1つ右へ移動
[ セルの値が0のときに、]の命令へいく。
] セルの値が0でないときに、[の命令へいく。

Atcoderで利用可能

  • 競技プログラミングサイトのAtCoderで利用可能である。

サンプルプログラム

  • 下記のサンプルプログラムで、簡単な文字列出力が可能。
/* 出力 : 「H」 */
+++++++++[>++++++++<-]>.
/* 出力 : 「e」 */
<+++++++++[>+++<-]>++.
/* 出力 : 「l」 */
+++++++.
/* 出力 : 「l」 */
.
/* 出力 : 「o」 */
+++.
/* 出力 : 「スペース」 */
<+++++++++[>--------<-]>-------.
/* 出力 : 「t」 */
<+++++++++[>+++++++++<-]>+++.
/* 出力 : 「_」 */
<+++++++++[>--<-]>---.
/* 出力 : 「o」 */
<+++++++++[>+<-]>+++++++.
/* 出力 : 「_」 */
<+++++++++[>-<-]>-------.
/* 出力 : 「d」 */
+++++.

/* 結果 : 「Hello t_o_d」 */

whitespace

概要

  • 「スペース・タブ・改行」のみで構成されたプログラミング言語。
  • エイプリルフールのネタとして、開発される。
  • コードを見るだけでは、真っ白で内容が理解できないため、隠蔽等に使われる場合もある。

特徴

真っ白

  • 「スペース・タブ・改行」のみのコードのため、可読性の前に、何も見えないため、内容がわからない。

他の文字はコメント扱い

  • 「スペース・タブ・改行」以外の文字は、無視されて全てコメント扱いになる。
  • そのため、好きな場所に、記号や日本語等でのコメントが可能。

二進数での文字表現

  • 表現したい文字を、ASCIIコード(2進数)のみの扱いとなる。

スタック形式の命令

  • スタック(データの後入先出法)と呼ばれる形式に基づいて、下記の基礎的な命令文によって、処理が可能。
  • また、ヒープ(動的な領域管理方式)と呼ばれる「自由な住所指定が可能な領域」という仕組みも存在。
命令文 内容
[space] スタック操作
[tab][space] 演算
[tab][tab] ヒープアクセス
[LF(改行)] フロー制御
[tab][LF(改行)] 入出力

サンプルプログラム

  • 下記のサンプルプログラムで、簡単な文字列出力が可能。空白であるが、それがwhitespace
  • 結果は、「Hello t_o_d」となる。
  • その下のテキストは、スペースとタブを表した記号(SとT)の対応文と出力内容で、コードではない。
   	  	   
	
     		  	 	
	
     		 		  
	
     		 		  
	
     		 				
	
     	     
	
     	     
	
     			 	  
	
     	 					
	
     		 				
	
     	 					
	
     		  	  
	
  
// 出力 : 「H」
SSSTSSTSSS
T
// 出力 : 「e」
SSSSSTTSSTST
T
// 出力 : 「l」
SSSSSTTSTTSS
T
// 出力 : 「l」
SSSSSTTSTTSS
T
// 出力 : 「o」
SSSSSTTSTTTT
T
// 出力 : 「スペース」
SSSSSTSSSSS
T
// 出力 : 「t」
SSSSSTTTSTSS
T
// 出力 : 「_」
SSSSSTSTTTTT
T
// 出力 : 「o」
SSSSSTTSTTTT
T
// 出力 : 「_」
SSSSSTSTTTTT
T
// 出力 : 「d」
SSSSSTTSSTSS
T
// 終了
SS

Emojicode

概要

  • オープンソースのオブジェクト指向型プログラミング言語。
  • 値や変数名以外は、すべて絵文字(Unicode)で記述。
  • カラフルな絵文字を扱うため、視覚的にも楽しい。
  • MacOS,Linuxで実行可能。
  • 公式サイト

特徴

絵文字

  • 「クラス定義・出力・条件処理」等の記述は、絵文字で記述。
  • 下記、基礎的な処理の絵文字一覧。
  • ※この他にもさまざまな処理を絵文字で記述できる。
絵文字 処理内容
😀 出力
🍇処理🍉 処理のまとまり。開始と終了で囲む。
🏁 開始場所
💭 コメント
💭🔜 複数行コメント 🔚💭 複数行コメント
🔤文字列🔤 文字列型として扱う。

オブジェクト指向

  • 「クラス・インスタンス・メソッド・コンストラクタ」等、オブジェクト指向の仕組みで構成されている。

シンタックスハイライト不要

  • 色での判別が、シンタックスハイライトなしでも、可能になる。

サンプルプログラム

  • 下記のサンプルプログラムで、簡単な文字列出力が可能。
🏁 🍇
    💭 結果 : 「Hello t_o_d」
    😀 🔤Hello t_o_d!🔤❗️
🍉

まとめ

  • 今回は、難解言語で遊びということで、世の賢人開発者達の高度な趣味に、振り回されながら記事を書く。
  • 「一つの舞い上がり言語をとことん極めるのはいいかも」という、類まれなる移り変わり精神を持つ私の、安易思考。
  • 次なる泥臭調査による未開開拓に、膨大な希望と他人依存心を持つことにしよう。

参考

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?