私は、職業プログラマですが、プログラミング言語を仕事で作る機会はありませんでした。趣味ではちょこちょこやっていた程度です。今回ADPを作るにあったって以下の2点で、C++の仮想関数を使いました。
・パーサー
・ユニフィケーション
ADPの文法ですが、パーサーが書きやすいように作成しています。つまり、変数は$で始まるとか文字列は"や'で始まるとか最初の一文字を読んだ時点で言語要素が判るようにしています。そのタイミングで対応するオブジェクトを作成し、そのオブジェクトでコンパイルを実行するということをやっています。ユニフィケーションも同様にオブジェクト間のマッチングを仮想関数(マルチメソッド)で行っています。
あと、STLを使っているのですが、vectorとかstringを普通に使用していますので、大変楽に開発ができています。
C++を選んだ欠点ですが、他言語インタフェースでCを呼び出す時、オブジェクトの変換が必要になることです。これはオーバーヘッドになりますので、悩ましいところです。もっともC++を呼び出すようにすればオーバーヘッドはなくなりますがC++しかダメってのもな・・・。
WEB-DB用の言語としてベースにPrologを選んだわけですが、(注)あくまでもベースであって基本的に別ものになっています。
なぜ、Prologを選んだかと言いますと、
PrologはRDBとの相性が良い
ということに尽きるかと思います。PrologとRDBの類似性自体はPrologを知る多くの人が感じていることだと思います。
Prologの教科書を読むと必ずと言っていい程、家系図の例題が出ますが、家系図自体がデータベースそのものでしょう。
一方で、インピーダンスミスマッチと言わるぐらい、他の言語(主にオブジェクト指向言語)とRDBはあまり相性がよくないです。O/Rマッパーのようなものを誰しも一度は作ると思いますが、私も実際にJavaでO/Rマッパーを作ってみましたが、どうも今一つでありました。もっとも3年程前に、Ruby On Rails(RoR)を触ってみましたが、RoRにはものすごい力を感じました。一時はADPの開発を止めようかと思いましたが、Ruby実行速度がいまいち(特にWindows版)なのとRuby自体は比較的難解な言語なので続けることにしました。
私はPrologには精通していません。学生自体にちょっとかじった程度です。ですので、Prologの文法や規格をきちんと把握していません。その中でPrologの動作についていまひとつ理解できない部分がありましたので、であればということでADPの文法はオリジナルのものとなっています。
プログラム本体は公開までこぎつけたのですが、
とりあえず、以下の作業が終わったら開発版を公開します。
・ドキュメント
簡単な説明
マニュアル
リファレンス
・ライセンス
・サンプル
CSVファイルの出力
ファイルハッシュの作成
Yahooの株価情報の取得
CMSのサンプル
以下のURLで公開します(ドキュメント作成途中ですが、まぁその方が完成までのモチベーションが上がるので・・・)。
http://www.adp.la/
私は趣味と実益を兼ねて、ADPというプログラミング言語を開発していたのですが、この度、そろそろ開発版を公開できそうなくらいになってきました。
といっても、まだまだやることがありますので、このブログではADPの開発記録ということで、色々書いていきたいと思います。
先ずは、軽く今までの開発の経緯についてまとめます。
・2006年12月 ADPの開発スタート
WEB-DB用の開発言語として、プログラミング言語の開発をスタートする。元になる言語はPrologで、C++を使って開発を始める。
パーサーは比較的簡単にできたが、Prologのバックトラックとユニフィケーションの部分で開発が難航した、実に1年以上の時間を費やした。
・2008年2月 ブログをスタート
将来の公開に向けて、ブログをスタートした。この頃にはPrologの基本機能が実装できた。ADPの公開用のドメインも取得する。
・2008年3月 DBアクセス機能の作成
DBアクセス機能の実装を開始する。この頃から自社業務の一部でADPを使用するようになる。
・2008年10月 未踏ソフトに応募
IPAの未踏ソフト(正式名称 未踏IT人材発掘・育成事業)に応募するも未採択となる。
・2009年
WEB関係の機能の実装を開始。
ぼちぼちと開発を進める。
途中ソースを何回も書き直す。
仕様変更を繰り返す。
・2010年6月
そろそろ公開してもよさそうなところまで開発が進む。
もろもろの業務がひと段落したので、しばらくADPに開発に本腰を入れることができるようになる。
公開準備を迅速に行う為、敢えてブログで公開する。