スターティング Go !!!
Goを始めた。
理由は今後GAEを使うなら、Javaではない何かで書きたかったから。
あとコマンドラインツールとかも気軽にかける言語を覚えたかったし、
手続き(型)的に書ける言語をもう一つ増やしておきたいという思いもあった。
新しい言語を覚える時って何か作るのがいいと思い、以前から作りたかったWhitespace言語のインタプリタを書いた。
難解プログラミング言語の実装は、新しい言語を覚えるのにまあまあ良い題材だと思う。if文やfor文はもちろん、スタック、リスト、マップ等の基本的な構造、ファイルの読み(書き?)を使う必要があり、簡単過ぎず、難し過ぎず、程よいボリューム感で、つくり終えるころには言語の文法や特徴くらいは頭に入るといったところ。
(もちろん個人的な差異はあるだろうが)
テストもちゃんと書いた。難解言語を書く必要があるので少し面倒くさいが苦にならない程度。既存のサンプルコードがあるので、それも使える。
苦労したのは、難解言語の仕様を数カ所勘違いしていた所か。
公式のチュートリアルページ(リンク切れ)を見て実装したが、例えばスタックの一番上の文字を出力のに文字はポップされることは書いていない(多分)。スタックマシンってそういうものなのかもしれない。
そのため公式のインタプリタ(Haskellのソース)を見たほうが仕様を理解しやすい。
ちなみにこれにはチュートリアルページの方に無いSlideコマンドがあるので注意されたい。
(examplesのloctest.wsはSlideが使われている!)
以下、ソース。