みなさんこんにちは! tukinyanJP です。突然ですが私は、 BE-Lang という小さな Ruby と C を掛け合わせた微妙な(?)言語の作者です。1 言語を作るというのは楽しいですが、それなりの労力が必要ですし、モチベーションが続かないと作ることもできませんよね。で、結局私は何を言いたいか、正直いいますと、
モチベーションが続かない
はい。こういうことです。私は以前からただ単に 「便利な言語を完成させる」 という気持ちだけで開発してきましたが、さすがにそれではモチベーションが続きません。今回は、言語の実装について書くのではなく、私の言語作成記録(?) について書いていきます。
ある日
おととしの確か 12 月でした。私は Ruby という素晴らしいプログラミング言語を見つけました。私はその時 Python なども触っていましたが、やはり Ruby の構文は Python より 2倍、いや 3倍 以上覚えやすく、書きやすく、しかも 日本 の Matz こと まつもとゆきひろさんが作成した言語だったので、私はすっかり Rubyist になりました。 特に私が気に入った機能 は、 Mix-in でした。
module hoge
def hoge1
:hoge
end
end
class huga
include hoge
# hoge のメソッドが使える。
end
Mix-in の良さは、やはり多重継承の欠点をうまく回避することができることです。多重継承を持っている言語 ( Python , C++ ..etc) では、クラスの継承関係がややこしくなりやすく、メソッド探索も複雑です。ですが、 Ruby の Mix-in はどうでしょうか。 module はスーパークラスを持っていないことが保証されているので、そこまで継承・メソッド探索も複雑ではありません。 2
そこから、 Ruby で色々作ってるうち、私はこう考えました。 「あれ、プログラミング言語、作れるんじゃ?」 そうです。これが私の言語作成の道が始まりました。最初に作ったプロトタイプは今とは全く違い、演算子の優先順位もなく、速度も遅く、ひどい有様でした。3 しかし、再帰下降構文解析を wikipedia で見て、( C 版の場合は Yacc を)導入してからというもの、実用性と速度が上がりデバッグも簡単になりました。特に記述量が 3000 行から 600 行で、半分以上も少なくなりました。で、現在に至ります。
終わりに
めちゃくちゃ内容が薄い記事でしたね。これでも私は頑張って書いていますよ。私の言語が有名になったり転機があれば更新していきます。それではまた次回の記事で。さようなら!