プログラム言語の「作ってみた」

習作としてプログラム言語を作る(創る)というのは、いい勉強になる。

これについては「大いにやるべし」と思う。私が講義を持っている時には、「俺言語を定義して処理系を作れ」という課題を与えていた。たまに(年に1人くらい)「その手があったか」と感嘆させられるような実装があって、こっちも勉強になった。

とは言え、プログラム言語を「実用」として作るのは、そう簡単なものじゃない。プログラム言語のように、星の数ほど凄い実装がいっぱいある世界で、「俺言語」を「実用」にするには強いモチベーションを持ち続ける必要がある。だって、たいていどんな言語でも、作るよりは習熟する方が楽だし、言語なんてのは「実用になれば何だっていい」な面が多いから、作るモチベーションを維持するのは難しいのだ。

私も1年以上かけて作った処理系をあっさり捨ててしまった。だってまず「おー使える」というレベルに持って行くだけでも容易じゃない。「動く動く」と喜ぶのは簡単なんだが、「あー作って良かったなぁ」なレベル、つまり自己満足するのでさえも容易じゃないのだ。そういった経験があるから、10年以上Rubyをいじり続けているMatzは凄いなと思う。

だから、「次世代言語を目指します」みたいなデカい口を叩いて、SourceForgeあたりにプロジェクトを起こすのは、個人的には「やめとけ」とか思う。「習作」は大いにするべきだと思うけど、「それ以上」を目指そうかと思うなら、よほど強い意思がないとダメだし、それにさける時間も必要だ。

もちろん何らか「理論の実証」とかのためにやることは、いいと思うのだけど、「実用」なんてことを考えたら、そういった「理論の実証」よりも他のことにエネルギーをさくことになってしまう。むしろその「理論の実証」のために作ってしまったら、とっとと他人の手に渡してしまった方が良いかも知れない。何しろ「言語書き」で楽しい部分は、実装にかかるエネルギーのほんのわずかで、ほとんどは単調な作業なのだ。私は、

システム開発の9割は土方作業

だと思っているのだけど、これは「実用プログラミング言語」でも例外じゃない。「新しい理論とコンセプトで格好良く楽しく」な部分は、そんなに割合として多くない。「実用」とついてしまうと何でもそうなのだ。OSならドライバ、言語ならライブラリ… だいたい「土方作業」だ。

最近「俺言語」を作るのが流行っていて、そういった「俺プロジェクト」が増えるのは、いい傾向だなと思う。だけど、誰もがみんなMatzになれるわけじゃない。同じエネルギーをかけるんだったら、もっと「未開の沃野」に向いた方がいいんじゃないか? もちろんMatzのようにやり続けられる人がやるのは止めないけど、Rubyが日の目を見るのに一体どれくらいかかったか。逆に「それ以外」であるSylpheed(MUA)はそこまでかかってない。「もっと楽なことやれよ」というつもりもないけど、それなりに優秀なプログラマが「オナニー以上」を目指すにはあまりに道は危しいし、実る確率も低い。なんとなく、

優秀なプログラマの無駄使い

に見えてしまう。

勉強にはなるし、そういったものが出来て行くのは面白いから、「やめっちまえ!」とまでは言い切れないんだけど、「これから先、少なくとも5年は他に夢中になるものが出来ない」と思える人だけがチャレンジする資格を持っている世界じゃないかなぁ。