ロジック プログラミング言語「デカルト言語」の開発者に聞く

SourceForge.JPでは、同サイトを利用するオープンソース・プロジェクトを毎月1つピックアップし、その開発者にインタビューする「今月のプロジェクト」というコーナーを設けています。今回は、ロジック プログラミング言語「デカルト言語」を開発しているhniwaさんにお話をうかがいました。

プロジェクトの概要

デカルト言語とはどんな言語ですか?

変な言語です。

狙っているのは、強力な論理的推論・探索機能があり、関数プログラミング機能を持つオブジェクト群が、人間に近い構文のI/Fによって動く知的なシステムです。

厳密ではないのですが、簡単に言うとデカルト言語のアイデアは、述語論理+関数+拡張バッカス記法+オブジェクト指向です。

●例1:デカルト言語の基本的な機能のプログラム例

まずは、prologのように、バックトラック機構を持った述語論理言語がベースになっています。例えば、prologのリスト処理プログラムは、構文を書き直すだけでそのまま動きます。

●例2:デカルト言語のプログラム:リストの操作

しかし、prologとは異なり、引数の中にさらに述語を書くことができる関数述語機能を持ちます。これは、述語の中の引数に述語を記述するとその第一引数を返り値と見做して実現しています。

また、拡張バッカスナウア記法のオア | , 省略可[], 繰り返し{}のような制御構造を拡張しています。そのため、文脈自由文法の生成規則をデカルト言語で記述すると、それが構文解析のパーサになります。

●例3:Tiny Rubyコンパイラの作成, 続Tiny Rubyコンパイラの作成(2)

さらに、オブジェクト指向プログラミングの機能を持ち、継承やポリモフィズムおよびカプセル化の機能をサポートします。

●例4:デカルト言語による論理的なA.I: 自然言語による論理, デカルト言語のプログラム:サルとバナナ

使い方のマニュアルは以下にあります。
http://sourceforge.jp/projects/descartes/wiki/Manual

デカルト言語は、誰でも簡単に使える言語は目指していません。この言語の利用者が深く理解し習熟し工夫を重ねることにより、素晴らしい結果が得られるような言語にしたいと考えています。

だから、ちょと分かり難いし、ちょっと書き難いかもしれませんが(笑)

今までのコンピュータサイエンスは、20世紀末に叫ばれたソフト開発者の不足に対応するために、開発言語や開発手法など、おまりに簡単で大勢に使えることばかりに注力してきたように思えます。しかし、現状を見ればわかるとおり、すでにコンピュータはコモディティな存在となり、そのような目的はもう達成されてしまったように感じます。人を集めてちょっと教育して大量投入すればなんとかなる仕事は現状でもう十分です。

今後のコンピュータサイエンスは、多少扱いが難しくても、より高度でより困難な問題が解決できるような方向に前進すべきではないでしょうか。

ちょっと変な喩えなのですが、大勢を載せた快適な大型旅客船ばかりではなく、キーンと甲高いジェット音を鳴り響かせ、操縦には高度なテクニックが必要ではありますが、高速で高機動な超音速戦闘機が必要なのではないかと考えています。のんびりとした船旅をしている間に、何者にも邪魔されずに地球の反対側まで超音速で到達できるのです。(デカルト言語では、まだその域には達していませんが。)

プロジェクトを始めた動機は? また、どうやって始めましたか?

最近のコンピュータの飛躍的な性能向上と容量拡大により、実現可能な状態になったと感じたからです。

デカルト言語は、とても重い言語になると予想できました。まさにHeavyweight Languageです。前からいろいろとアイデアは持っていたのですが、最近の高性能大容量PCで、ようやく多少の富豪プログラムでも平気で動く環境が整いました。これなら、いけると思ったのです。

影響を受けたプログラミング言語はありますか?

昔の第五世代コンピュータ計画で開発されたGHC(Guarded Horn ClausesでHaskellではない)言語の本を見つけて読んで衝撃を受けました。

デカルト言語とはずいぶん異なるのですが、30年も前の容量も少なく性能も低いコンピュータで目指す目標が壮大なのです。今からもう一度、第五世代コンピュータプロジェクトをやり直したら、今度は結果が異なるのではないでしょうか。

GHCと似た系統のガード節やユニフィケーション機能を持つ、HaskellやErlangが最近脚光を浴び始めているのも、やっと時代が追いついてきたということではないでしょうか。

このソフトウェアのターゲット・ユーザーは?

いろいろな人に使ってもらいたいです。

  • awk代わりに、入力ファイルを読み込んで、結果を出力するようなスクリプト言語を使いたいユーザー
  • 業務用のエンタープライズ処理を行いたいユーザー
  • オレオレ・プログラム言語のインタプリタやコンパイラを作りたいユーザー
  • 大規模な科学技術計算を行いたいユーザー
  • 自分のオリジナルの人工無脳を作りたいユーザー
  • 未来世界の支配を企むAIを実現したいユーザー :-)

特に、今までのコンピュータではできなかったようなことを、停滞することなく前向きに実現できる人に使ってもらいたいです。

プロジェクトがうまく行っていると感じるのはどんなときですか?

デカルト言語のアイデアがいろいろと次々と思い浮かぶときです。そんなときには、ごりごり書いたプログラムがコンパイルエラー無しで一発でコンパイルできます。

このプロジェクトをやっていて最も驚いた出来事は?

あまり驚くようなことは無かったように思えます。

毎日淡々と機能拡張していくことが楽しみです。

このプロジェクトで最も苦労している点は?

やはり、ドキュメント整備です。

私の頭の中にしかない仕様や機能をドキュメントにしなければならないので、誰かに頼むわけにもいきませんし。

できる範囲で順にドキュメントを書いてきました。

今後のプロジェクトの方向性は?

デカルト言語本体も拡張していくのですが、今後はドキュメントとアプリを増やしていきたいと考えています。

ソースコードは、割りとどんどんと書けるのですが、マニュアルや関連ドキュメントがなかなか整備しきれません。

また、アプリケーションを書いていきたいですね。言語を創っただけではあまりにも意味がないので、デカルト言語で動くアプリケーションを増やしていきたいと考えています。

それと、本体の拡張としては、コンパイラを作り性能を改善したいですね。また、加えてWWWアプリのサーバーサイドやクライアントサイドとしても使えるようにしたいとまだ漠然としてはいますが考えています。

また、マルチコアにも対応しないといけないですね。

このソフトウェアあるいはプロジェクトについて誇れるところは?

他のプログラミング言語とは異なる毛色になっているじゃないかと思えるところでしょうか。

このプロジェクトでどこかやり直せるとしたら、どこを変更したいですか?

デカルト言語という名前が英字では”descartes”と、長くて打ちにくくて覚えにくいので後悔することがあります。

しかし、デカルトには、心身2言論や普遍言語および機械論的世界観など、デカルト言語と無関係とは思えないような思想や哲学があるので、おそらく名前を変えたりすることは将来もないでしょう。

あなたの本業は何ですか?

IT系メーカーの開発者です。

あなたの開発環境は?

Windows Vista上のcygwin環境と、自分でカーネルとコマンドを入れ替えて元が何かわからなくなったLinuxです。VMware上でUbuntu Linuxも使っています。

バージョン・ヒストリー:

プロジェクト開始から4ヶ月ほどです。開発状況はαです。

  • 2009-04-29:descartes-0.10.0リリース
    – オブジェクト指向の機構の改善
  • 2009-04-08:descartes-0.9.0リリース
    – list、matrix、cursesモジュールの追加
  • 2009-03-15:descartes-0.8.0リリース
    – 述語関数の引数の評価範囲の拡大
  • 2009-02-24:descartes-0.7.0リリース
    – 複素数のサポート
  • 2009-02-15 descartes-0.6.0リリース
    – printf述語の追加
  • 2009-02-08:descartes-0.5.0リリース
    – 動的なオブジェクト指向の機構の追加
  • 2009-02-01:descartes-0.4.0リリース
    – 浮動小数点数の精度をlong doubleに変更
  • 2009-01-25:descartes-0.3.0リリース
    – 構文解析機能を強化
  • 2009-01-17:descartes-0.2.0リリース
    – 整数を32bitから64bitの精度に変更
  • 2009-01-10:descartes-0.1.0リリース
    – 最初のリリース
  • 2009-01-08:プロジェクト開始

このプロジェクトに貢献するには?

デカルト言語を使っていろいろなアプリケーションを書いて公開してください。

また、プロジェクトのwikiのページにあるドキュメントは、転用して知らない人に説明する資料として使ってください。

http://sourceforge.jp/projects/descartes/wiki/FrontPage

SourceForge.jpへの要望をお聞かせください

特にはないのですが、強いて言えば、具体的には言えなくて申し訳ないのですが、何かドキュメントを書きたくなるような動機付けがあると良いのではないかと思います。

他のプロジェクトの方の面白そうなプロジェクトがあっても、あまりドキュメントが整備されていなくて結局、内容がよくわからないことが多いような気がします。