公開するにあたって一番の悩みどころが
ソースコードをオープンにするかどうか?
というジレンマがあります。
本来ならオープンにすべきだと思うのですが以下の点からしばらくはソースコードは非公開しようかと思ってます。
- ソースが汚いので書き直す可能性が高い
- 一度公開すると非公開にできない。(逆は出来る)
- 言語仕様を出来るだけ文書化して開発したい。のでソースを公開することでお茶を濁したくない。
とまぁこんなところです。
ソースを公開しない欠点ですが、Linuxの対応になります。バイナリ配布すると各ディストリビューションの数だけそろえることになり、それは現実問題不可能なので当面は2,3のディストリビューションのみのリリースになります。
2010/08/03 追記
と言いつつ、
GPLで公開しました。
先日プレ公開した開発版ですが、さっそくバグが見つかりましたので
アップデート版(Ver 0.4.0129)をプレ公開します。
ドキュメントを作成し、サンプルプログラムを動かしている訳ですが、each述語でバグが見つかりました。
ADPのドキュメントページをADP(正確にはADPのWEBページ拡張)で構築しているのですが、やはりというかなんというか細かいバグおよび仕様変更を行っており、まだまだ改修をしています。
ので、このあたりはお含みおき頂ければと思います。
最近では、C++にも導入が検討されているガベージコレクションですが、
なんとADPには実装していません。で、
『どうやってメモリ管理しているのか?』
という疑問が沸くかと思いますが、普通にスタックを使用しています。
細かいことを言いますと、正確には述語の評価を行うクラス内で作成(new)したオブジェクトを記録し、そのクラスのデストラクタで解放(delete)しています。評価結果を伝達する場合はオブジェクトをコピーします。深いコピーを行うので配列等は結構時間がかかります。
ガベージコレクションを実装しない理由ですが、ADP(Prolog)の実行環境(インタプリタ)はスタックで実装できるのでガベージコレクションをする必要がないということが1つ。
もうひとつの理由はパフォーマンスで、どのような実装方法を用いても、今日の大容量メモリで動作する場合、一度ガベージコレクタが動くとどうしても動作が遅くなるだろうと思います。
64ビット時代でさらに大容量のメモリが搭載される場合、ちまちまガベージコレクションするよりも贅沢にメモリを使ったとしても許されるかな?というもくろみもあります。
ADPの開発者へのコメントはこちらのコメント欄からお願いいたします。
コメントですが、リアルタイムで反映されます。ネチケットを守って頂くのと、ライセンスを無視した無理な注文は御控えください(場合によってはコメントを削除いたします)。
何分開発者がやっていますのでコメントの返信はタイムラグがあることをご了承ください。
ADPは、論理型の言語であるPrologをベースとしていますが、代入やnext述語など、通常の手続き型の考え方も積極的に取り入れています。また、まだマニュアルに書いていませんが、ADPでは、
$value.method
のようなメソッド呼び出しもサポートしています。のでオブジェクト指向プログラムの考え方も取り入れていると言えば取り入れています。もっともメソッド形式の呼び出しを採用した理由はその方がコードがシンプルになる場合があるからです。
ADPの開発目標の1つの目標ですが、マルチパラダイム言語を目指しています。
もう少し噛み砕いでいいますと、特定の考え方に縛られずに便利なものなら何でも取り入れましょう。というスタンスで開発しています。
ADP独特のプログラミングパラダイムというのもないので、そういう意味では、借り物ばかりですが、『エンジニアが開発した言語』らしいかと思います。