自分でプログラム言語を作ってみる、という事を考える時に、あんまりプログラム言語が存在しない所で作る場合というのがあるよなぁ、 と思った。その違いなどについて書いてみる。

自分独自のプログラム言語を作ってみようと思うケースで一番良く見かけるのは、 なにかやってみたい事があってそれを試しに実現してみる、というものだろう。 そういう場合、作ったプログラム言語にはそのアイデアがあって、それがその言語の特徴となる。

こうして作る場合、普通のUnix的な環境のコマンドライン上の言語になりがちに思う。 そしてそこにはすごくたくさんの素晴らしい言語がすでにある。 だから新しい言語の存在意義というのは分かりにくい。 アイデアを試した、面白かった、自分には勉強になった、というあたりで終わってしまいがちに思う。 それは悪い事では無いが。

一方で、KotlinとかSwiftなどは、その環境で動く言語が他にあまり無い所で、 ある程度モダンなプログラム言語を提供するというものだったと理解している。 なにかのアイデアを試してみるための言語というよりは、 そこで動く代替言語があまり無い所で、動く言語が欲しいというモチベーション。 実際に使う目的で今無いのが困っているという感じのものであって、 アイデア自体に新規性は無くても良かった。

これらの言語は、実用的であるためのバーがUnixのコマンドライン上で動く普通のプログラム言語より低いと思う。 例えばKotlinがPythonよりよい言語である必要は、本質的には無い。Javaより良い言語でありさえすれば良い。 もっと言えばJavaより良い言語でなくても、Javaと分担出来るような違った良さがあれば良い。SwiftもObjective-Cと同じような関係に思う。 一方でUnixのコマンドライン上の言語を作るなら、JSとRubyとPythonとRustとgolangがある所に新しい言語を追加して存在価値をもたせる必要がある。 これは不可能では無いにせよ、なかなか難しい。

自分が今仕事で作っている独自言語は、 KotlinとかSwiftともまただいぶ状況が違うので、同じようなものという気はしない。 だが、目的を達成する言語があまり無い所に言語を作っているとは言える気もする。 アイデアを試すというのとはだいぶ違うのだよなぁ。 いろいろな制約から普通の言語は作れない所なので、アイデアはいろいろ生み出す必要はあるのだけれど。

他の言語があまり無いけれどプログラム言語が必要とされている分野って結構あると思う。 これまでも、友人のプログラマの話を聞いていて「そんなの新しい言語自分で作ったらいいじゃないの」と思う事はちょくちょくあった。 だが、あんまりそういう所にはプログラム言語を作ってみたいという人は居ない気もする。

まぁだいたいそういう所に行くには言語処理系の知識以外の専門性が必要となるので、 そのフィルタリングの結果プログラム言語作りたい人が減るのはそんなに不思議な事でも無いか。