世の中には、現在広く使われているものだけでも、C、C++、Java、C#、Perl、Python、Ruby、PHP、Lisp、JavaScript……等々、すでに多くのプログラミング言語が存在します。これほど多くの言語が乱立している中で、「 自分で独自の“ プログラミング言語” を作る」なんていうと、「 なんてマニアックな。言語を作るなんて難しいんじゃないの?」とか、「 そんなことして何の役に立つの?」とか思う人がいそうですが、それは誤解です。プログラミング言語を作ることは、いくつかの基礎知識さえ習得すれば、技術的には、実はそんなに難しいことではありません。そして、プログラミング言語を作ることには、次のような実際的なメリットがあります。
言語がどのように動くのか理解することができる
プログラミング言語は、プログラマが毎日使う道具です。その道具について深く知ることは、プログラマとしては重要なスキルとなります。
特定用途向けの言語(DSL)を作ることができる
たとえばUNIXの世界では、sedやawkといった、テキストファイルの処理に特化した言語が長らく使われてきました(これの発展系がPerlです) 。PHPはWebアプリケーションの開発に特化した言語でしょう。言語を作る技術を持っていれば、このような特定用途向けの言語(DSL:Domain Specific Language)を必要に応じて作ることができます。
言語をアプリケーションに組み込むことができる
「アプリケーション組み込み用言語」として、既存の言語を使うことももちろんできますが、アプリケーションを作るときには「上から下まで全部自分で作る」ようにすると、バージョン間の互換性の問題等が発生せず何かと安心です。
もしかすると――有名になれるかも
自分が作ったプログラミング言語が世界中で広く使われるようになったら最高ですね。たとえばRubyのまつもとゆきひろさんは世界的に有名人です。
言語を作るのは楽しい
言語を作る動機なんてのは結局のところ「楽しいから」に尽きるように思います。実際、言語を作るのは楽しいものです。「 プログラミングを突き詰めていったプログラマは、最後にはOSかプログラミング言語を作る」と言った人がいますが、プログラミングのもっともコアな部分に触れる楽しさがあります。
本書『プログラミング言語を作る』では、crowbarおよびDiksamというふたつのプログラミング言語を作成していきます。crowbarは解析木実行型の型なし言語、Diksamはバイトコード実行型の静的型付け言語です。どちらの言語も、四則演算や変数や条件分岐やループはもちろん、関数定義やガベージコレクタも装備していますし、最終的にはオブジェクト指向や例外処理機構も実装します。どちらの言語も、単なる入門書のサンプルプログラムではなく、そこそこ実用的な言語の域に達しています。
ソースコードをダウンロードして、本書の説明を読みつつ実際のソースに当たっていくことで、どのようにプログラミング言語を作っていくのか、そして実際にどのように実装されているかが理解できることでしょう。
現在、プログラミング言語といえば、Webアプリケーション開発用言語など業務でバリバリ使うようなものが主流です。しかしその昔のマイコン少年達(1980年頃。当時はパソコンをマイコンといっていた)にとって、標準で付いていたBASICという言語でUFOを打ち落とすようなシューティングゲームなどを作って遊ぶのがプログラミングを学ぶ最初の一歩でした。いま、そんなふうに遊べて学べる手軽なプログラミング言語としてふさわしいものが見当たりません。本書で作るDiksamは「初心者が簡単にゲーム等を作って遊べる言語」として使え、その方向に発展させていくこともできそうです(まだまだ進化中) 。
Diksamで作成したUFOゲームの画面
プログラミング言語を作るのは、理屈抜きで楽しいものです。実際、日本にも海外にも、自作の言語を作っている人は結構たくさんいます。こうしてプログラミング言語は日々増え続けているわけですが、本書が、この混迷するバベルの塔に、あなたがさらなる一言語を加えるきっかけになれば幸いです。
なにしろプログラミング言語を作るなんて、いかにもかっこ良さげじゃないですか!