第7回 言語の重要性その2まつもとゆきひろのハッカーズライフ(2/2 ページ)

» 2007年09月26日 02時00分 公開
[Yukihiro “Matz” Matsumoto,ITmedia]
前のページへ 1|2       

自分言語を作るのは難しくない!?

 正直なところ、世の中にこれだけたくさんの言語があって、それぞれに特徴を持っているのに、さらにまた新しい言語を作ろうと思いつく時点で、すでに相当INSANEでしょう。常識的な人間であれば「これだけいろんな言語があるのだから、この中から自分の目的に合うものを探そう」という発想をするはずです。そこを「自分の言語を作ろう」と思っちゃうんですから、INSANEといわれても仕方がありません。しかも、言語を作ってそれを成功させようと思ったら、ただ単に言語をデザインするだけでなく、

  • 処理系を実装(誰も代わりに「自分言語」の処理系を書いてくれない)
  • ドキュメントを書き(誰も代わりに「自分言語」のドキュメントを書いてくれない)
  • Webサイトを用意(誰も代わりに……以下省略)

などする必要があります。なかなか厳しい茨の道ですよね。

 じゃあ、「自分の言語」を作るのは本当に非現実的なことなのでしょうか。まつもとがRubyを作ったのは、本当にわたしが「正気じゃない」からでしょうか。そうでないとは言いきれないのが悲しいところですが、わたしも最初からほかの人と違ったことをしたいからRubyを作ったわけではないのです。「成功しよう」とか「完ぺきなものを作ろう」とか最初から気負うから大変なのですが、実際には「作りたい」という思いがあったから作った、そして言語の設計や実装はそれほど難しいことではないから実現できたわけです。

 冷静に考えてみると、システムをデザインするということは、ある意味、言語に語彙を加えていくことにほかなりません。「どのような語彙(ごい)をそろえているか」は言語の性質を決定しますから、自分の言語をデザインしていることでもあります。その辺をもうちょっと突き詰めて、語彙(ごい)を越えて文法の領域にまで手を入れたくなると、アラ不思議、自分言語の出来上がり、となります。

 ここ数十年のコンピュータサイエンスの進歩により、言語処理系の開発は本当に簡単になりました。特別に変な文法でなければ、BNF*に似たような記法で文法を定義するだけで、コンパイラコンパイラと呼ばれるツールを使ってあっという間に構文解析器を自動生成できます。今や性能のことを第一に考えなければ、簡単な言語を作ることなんて数日あればできることです。

 しかし、自分言語を作ることで何かメリットがあるのでしょうか? ええ、あるんです。

 1つ目のメリットは、言語処理系というものがプログラミングの中でしばしば登場するテクニックの集合体であることです。例えば、設定ファイルを読み込むルーチンなどは、言語処理系の字句解析、構文解析そのものです。また、言語処理系はコンピュータサイエンスの総合芸術ですから、処理系を実装するために用いたテクニックはあらゆるプログラミングに応用できます。

 また、良い言語をデザインしようという行為は、人間の気持ちをより深く考えることでもあります。つまり、インタフェースのあるべき姿について、より深い考察を行うことでもあるわけです。自分言語を作る2つ目のメリットとしては、言語レベルでの使い勝手を考えることで、プログラムの使い勝手に関するより深い経験と知識を身に着けられることがありそうです。

一段高いプログラマーへの道

 最後に、言語デザインはとにかく面白いです。プログラミングの世界は、結局すべてのものが言語によって表現されるので、言語を変化させることはあらゆるもののありかたを変化させることでもあります。つまり、言語のデザインは、究極の自由だといえるでしょう。このような自由を享受する機会は、それほど多くはないはずです。

 自分言語をデザインするという作業は、より一段高いプログラマーへの道に通じているのかもしれません。例え結果的に、その言語がほかの人にまったく使われなかったとしても……。そう思って、2004年から新しい言語の作成をテーマにしたlangsmithメーリングリスト*を運営しています。言語好きな人たちが集まって、自分の新言語を発表したり、議論したりしています。この中から未来を担う言語が登場したり、時代をリードするプログラマーが誕生したりするといいなと思っているのです。

このページで出てきた専門用語

BNF

Backus Naur Formの略。BNF記法は、ALGOL 60の文法定義を形式的に行うために考案されたものである。「右辺::= 左辺」という形式で文法要素を決定するルールを並べていくことで、全体の文法を定義する。yacc(yet another compiler com

piler)のようなツールは、BNF(に似た)記法を受け入れて構文解析を行うソースコードを出力する。

langsmithメーリングリスト

アドレスは<langsmith@quickml.atdot.net>。参加するには、まつもとのアドレス<matz@ruby-lang.org>にCCしながら上のアドレスに参加希望のメールを出すこと。


本記事は、オープンソースマガジン2005年10月号「まつもとゆきひろのハッカーズライフ」を再構成したものです。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ