2019プログラミング言語を趣味で自作している話このところ、趣味でプログラミング言語を作っています。どんな言語を作っているか静的な型付けの関数型プログラミング言語で、見ためはこんな感じです。120型について理解したいという気持ちがあったので、型検査や多相型など、型に関する機能を少しづつ取り入れて作っています。Mudhttp://mud.tiny-app.net/なぜ作っているか純粋に楽しみとしてです。世の中にまともな言語がたくさんあるのに、今さらおもちゃみたいなものを新しく作る意味ないよねとも思いますが、どんな分野でも自分だけのちょっとしたものを自作するのはやっぱり楽しいものです。あと既存の言語についての勉強にもなります。ひっくり返せばオブジェクト指向っぽく見えるんじゃないか」という思いつきでした。関数型の言語では、以下のような式を書くことになるケースがあると思います。いうリストをソートして、重複を取り除いて、逆順にするということになります。ふつうに左からコードを読むと、「ひっくり返す。重複を取り除いたものを。なにから?・・」となって読みづらいことになります。演算子があって、関数呼び出しの引数と関数名の位置をひっくり返すことができます。sortと書くことができる。これを繰り返すと元の式はこうなります。いうリストをソートして、重複を取り除いて、ひっくり返す」という素直な語順どおりになりました。普通にオブジェクト指向っぽい見た目になるじゃんと。動きそうな見た目になりました(実際動きます)。こんなふうに、関数型の言語なのに見ためはオブジェクト指向っぽく書ける言語を作ってみようと思ったのがきっかけでした。(あとから知りましたが、そういうアイデアの言語はすでにいっぱいあるようです。いう人たちと同じアイデアを思いつけたのは嬉しいです。関数定義の構文がとてもシンプルで、好きです。匿名関数の構文もまたシンプルでかっこいいと思います。(n-1)endなので、両方を合わせたこんな感じの関数定義の構文が使えるようにしました。120と、引数をカッコでくくらずに並べます。多重ディスパッチと自由な演算子オーバーロードもうひとつ欲しかったのが、自由な演算子オーバーロードでした。ような演算子をいろいろな意味で気軽に定義したい。そこで、多重ディスパッチという仕組みを取り入れました。同じ関数名(演算子名)でも、引数の型が一つでも違えば違う関数として定義することができるというものです。'three'上は、作っている言語での実際に動作するサンプルです。同じ関数名でも引数の型によって動作がちゃんと違っています。この言語では、演算子も関数として定義されるようにしています。多重ディスパッチの仕組みを使うことによって、同じ演算子を次のようにいろんな意味に使い分けることができます。