nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

Rubyでyo!langのインタプリタ作成(世界初かも)。

 YO!

yo!langとは

 yo!langはいわゆる「難解プログラミング言語」(esolang)のひとつです。yo YO Yo! Yo? YO! yo? yo! YO?の8つの命令しかないにもかかわらず、チューリング完全で、あらゆるプログラミング言語と同程度のことが可能になっています――と書くと勘のよい方はお気づきでしょう。つまりこのyo!langですが、いわゆる「Brainfuck方言」になります。事実それぞれの命令はBrainfuckとうりふたつというかまったく同じです。

 元ネタは「Yo.」というこれまたネタアプリ。

 いわゆる「メッセージアプリ」の一種で、特徴は"Yo"という言葉しか送れない点にあります。たとえば朝仲の良い友達に"Yo"といったとしましょう。その際発せられた"Yo"は「おはよう」の意味を持つことは明らかです。このように人間の会話は状況や文脈に強く規定されており、すべてのコミュニケーションを"Yo"1語で済ませてしまう「Yo.」は究極のハイコンテクスト・アプリといえそうです。

 ――とここまであたかも自分で調べたかのように書いていますが、実は「CodeIQ」内の企画の受け売り。

 「CodeIQ」に関しては2度ほど記事にしています(出題者は違いますが)ので、そちらを参照していただけると幸いです。

インタプリタ(Ruby)

 ということで本題。

 

 前にも書いたように基本は「Brainfuck」と同じなので、あとはリファレンスマニュアルを見ながら、その通りに実装していくだけです。わりとすんなり出来上がりました。

 問題点があるとすれば「デバッグがやりづらい」ところ。入力に対し適切な出力がなされるかどうかを試したいのですが……そもそも「入力」がなかなか作れない。たとえば"YO"をひいひいいいながらならべてそれらしい「入力」を作っても、なぜか「期待する出力」があらわれない。「すわインタプリタのバグか」の思いきや、実は"YO"の並べ方が間違っており、そちらのデバッグが必要になったり……(´・ω・`)

 自分の確認できる範囲でデバッグは行ったつもりですが、バグがあったらすみません(´・ω・`)

 ちなみにわたしが調べた範囲では、公開されたRuby製のyo!langインタプリタはこれがおそらく世界初。

 ……喜んでよいのかしら(´・ω・`)