先週、『自作プログラミング言語の集い』という勉強会に参加してみた。
そこで紹介されてた『Rubyで作る奇妙なプログラミング言語 ヘンな言語のつくりかた』という本が面白そうだったので、買って読んでみた。
概要
内容はタイトルの通りで、Rubyを使って変わった仕様のプログラミング言語の処理系を作ってみようというもの。
言語処理系の本って、字句解析や構文解析の話から始まり、けっこう頑張って読む必要があるイメージが強い。
けど、この本はそういうのはすっ飛ばして、「こういうヘンな言語があるよ」という紹介から始まり、とりあえず動く処理系を作る感じになってた。 なので、すごく気楽にスラスラと読めた。
とはいっても、ちゃんとインタプリタ、コンパイラ(トランスレータ)、中間言語+VMをそれぞれ扱ってて、最後はちゃんと構文木も作っている。 なので、子供騙しというわけではなくて、ちゃんとした内容になっていた。 『RubyでつくるRuby』ですごくガッカリしたのとは正反対な感じ。
扱ってる言語
ちなみに、扱ってる言語は以下:
- HQ9+
- Brainf*ck
- Whitespace
HQ9+はオモチャ言語なのでいいとして、Brainf*ckはインタプリタとトランスレータ(Rubyプログラムに変換する)、Whitespaceは中間言語方式の処理系を作る。
Brainf*ckやWhitespace、名前は有名だけど仕様を全然知らなかったので、その詳細を知れてよかった。
意外だったのがBrainf*ckで、とんでもなく分かりにくい言語なのかと思ってたら、全然そんなことなかった。 (手順を踏めば)好きなアドレスにアクセスできるメモリがあって、ちゃんと構造化もされてるとは。 見た目で驚かされるけど、アセンブラに比べたら全然高級な仕様だと思う。 Rubyへのトランスレータが簡単に作れるのも納得。
一方、Whitespaceはもっとアセンブラに近い感じ。 中間言語に変換してたけど、ほぼアセンブラなので簡単。 VMもスタックマシーンで実装簡単だし。
本のオリジナル言語
本ではさらにオリジナル言語を考案して実装するというのをやってる。
- Starry
- Bolic
Starryは見た目がAAの星空みたいに書ける言語。 アイディアの段階から実際にそんなふうに書けるのかを確かめながら実装を進めていく様子が楽しめた。
そしてBolicはユニコードの記号で書く言語。 これは構文解析して構文木を作るのまでやるので、少し本格的な感じだった。
その他
さらにオマケとしていくつかの言語が紹介されてる。
凄かったのはGrass。
これも言語としては知ってたけど、どういうふうになってるのかまでざっくりと説明されてた。 書きやすいかどうかは別として、関数型言語は奥が深い・・・
そんな感じで、とても面白い本だった。 商業誌だけど、ノリは同人誌っぽくて、読んでてとても楽しい本だった。
こういう本読むと、やっぱりプログラミング言語作りたいなぁってなるよね。 (Lucidから目を背けつつ・・・リソースが足りない)
今日はここまで!