PR

命令型プログラミングはどこに行くのか

2008年11月12日(水)
若槻 俊宏

ドメイン特化言語(DSL)

 DSLは、いきなり汎用言語でプログラムを書くのではなく、まずは汎用言語で専用言語を構築し、その専用言語でプログラムを書くという、ボトムアップな開発方法論です。

 Lispというプログラミング言語は、LISt Processingという名前が示す通り、リストでプログラムを記述するため、プログラム自体を簡単なリスト操作で変換できるという特徴があります。そのためLispのコミュニティでは、プログラムを直接書くのではなく、実行したいプログラムを生成するプログラムを書く、メタプログラミングという技法が多用されてきました。Lispはマクロという言語機能により、記法を自由に拡張することができるため、プログラム可能なプログラミング言語と呼ばれることもあります。

 例えば、Lispのマクロを使って、次回以降に触れるPrologというプログラミング言語の処理系をDSLとして実装すれば、Lispプログラムの中にProlog(のような Lisp)プログラムを直接記述することができますし、そのProlog的な記述の中ではLispの機能がすべて使えるのです。

 しかし、DSLも完全な解決策ではありません。Lispの高度なメタプログラミング技法についての優れた解説書である「on Lisp」において、著者のPaul Graham氏も図3のように言及しています。

 ここで一度原点に返ってみると、私たちが欲しいものは優れたプログラミング言語(機能)やプログラミングテクニックではなくて、コンピュータで問題解決するための一般的な方法論であることに気がつきます。

 DSLは、システム開発初期のプロトタイピングには最適かもしれませんが、そこから実運用に耐えるようなシステムの生成までをシームレスにつなげる枠組みに欠けています。例えばLispなどで書かれたプロトタイプは、最終的な製品となるまでには、C++やJavaなどの言語で書き直される場合が多いと考えられます。

 ここまでに紹介してきたプログラミングパラダイムは、すべて直接問題解決の方法(How To Solve)を人間が記述するというパラダイムでした。DSLも、より強力なHowをボトムアップで構築するための方法論と考えることができます。

より知的なプログラミングを目指して

 発想を転換しましょう。問題の解き方を人間がすべて記述するのではなく、代わりにコンピュータに考えてもらうことはできないのでしょうか。そんな魔法のようなことが可能なのでしょうか。もちろん、コンピュータが1からすべてを考えて解決してくれることは、本物の人工知能が完成しない限り不可能でしょうし、それはわれわれが今考えている数十年のスパンでは、おそらく不可能でしょう。

 そうではなく、必要最小限の記述から、自動的に問題解決のための方法をコンピュータが推論してくれるような枠組みです。その際に記述するものは、問題の解き方ではなく、問題の性質や満たすべき制約などの定義(What To Solve)です。これは、DSLや専用言語のように、ボトムアップで強力なHowを提供するための枠組みの対極です。トップダウンに与えたWhatからHowを演繹(えんえき)するのです。

 次回は、もうひとつの流れ、数理論理学的な理論に根ざして発展してきた宣言型プログラミングについて考えていきます。このパラダイムでは、後の等価変換型プログラミングにつながる、重要な概念が多数研究されました。

 なお、本稿の執筆にあたって、以下を参考にしました。

Paul Graham(著)野田 開(訳)『On Lisp―Advanced Techniques for Common Lisp』オーム社(発行年:2007)

北海道大学大学院
北海道大学大学院 情報科学研究科 博士後期課程(D1)。当初はAI研究に興味を持っていたのだが、現在のプログラミング技術の水準では不十分だと考え、いつの間にかプログラミングの基礎理論を研究する道に。大学院時代は、等価変換に基づく問題解決、特にルール型プログラムから命令型プログラムを合成するための理論について研究。2008年11月21日付けで、京都マイクロコンピュータ株式会社に入社予定。今後はデバッガ技術に基づきソフトウエアとハードウエアの本質を突き詰めて行くつもりである。http://alohakun.blog7.fc2.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています