Help us understand the problem. What is going on with this article?

Rustを使ってWhitespaceを動かしてみた

はじめに

こちらは SLP KBIT Advent Calendar 5日目の記事です。
ぜひご覧ください。

SLP KBIT Advent Calendar

この記事では題名に書いてある通り、Rustを使ってwhitespace言語を動かしてみました。
ぜひみなさんのネタにしてください。

Whitespaceとは?

Whitespaceは、難解プログラミング言語の1つです。どのように難解なのか、実際にプログラムを見てみましょう。
以下のプログラムは、「Hello World」と出力されるものになっています。

hello.ws
   	  	   
	
     		  	 	
	
     		 		  
	
     		 		  
	
     		 				
	
     	     
	
     	 	 			
	
     		 				
	
     			  	 
	
     		 		  
	
     		  	  
	
        	 	 
	
  

とてもきれいなコードですね()
もちろん手抜きではありません。このWhitespace言語は「半角スペース」「タブ」「改行」の三つのみでプログラムが書けるんです。

環境構築

今回、Whitespaceのインタプリタをこちらからお借りしました。
https://tech.hellorusk.net/entry/2018/11/23/221127

また、私はRustを入れていなかったので、こちらのサイトにしたがって進めました。
https://acn.blue/install-rust-language-windows-10/

Rustのインストールはとても簡単です。ぜひ入れちゃってください。

実行

ファイルがあるディレクトリまで移動し、以下のように実行してください。

$ rustc src/whitespace_interpreter.rs
$ whitespace_interpreter.exe [実行したい.wsのファイル]

このようにすると実行できます。

書き方

以下のサイトを参考にしながら書いていきました。
https://magazine.rubyist.net/articles/0022/0022-Legwork.html#fn:1

何も見えなくて難しそうではありますが、割と単純です。多分。
かなりアセンブリに近いものになっています。
また、打ち込んでる途中に思考が途切れてしまうと、最初から見ないと書けない、みたいな問題が起きちゃいます。

なんとなく作ったプログラム

 以下のプログラムは「1+1」の計算をしています。私自身できたときはとても感動したのですが、何も見えないため何もわかりません・・・

wa.ws
   	
   	
	   	
 	

そこで以下のように、スペースを「S」、タブを「T」として書いてみました。

SSST
SSST
TSSST
ST

1行目は「SS」でスタックに数値をプッシュしますよ~、という意味になります。その後、Sを0、Tを1として2進数で数字を表しています。ただし、先頭の数字は正負を表します。そのため「ST」は「1」となります。その後の改行は終端記号を表しています。
2行目も同様です。
3行目は「TSSS」でスタックの上から二つを足し算しますよ~、という意味になります。その後、「T\nST」でスタックの先頭の数字を数値として出力しますよ~、という意味になります。

大雑把に説明するとこんな感じです。 

おわりに

正直言って何の役にも立たないプログラミング言語の紹介をしました。とはいえ侮れないもので、WhitespaceでAtCoderを解いた方もおられます。
https://qiita.com/rsk0315_h4x/items/a0a81c3d636029288fa6

また、今回お借りしたインタプリタは未完成であるため、時間があるときに完成させたいなと思っています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした