[ADP開発日誌]ADPはガベージコレクションがない

最近では、C++にも導入が検討されているガベージコレクションですが、
なんとADPには実装していません。で、
『どうやってメモリ管理しているのか?』
という疑問が沸くかと思いますが、普通にスタックを使用しています。

細かいことを言いますと、正確には述語の評価を行うクラス内で作成(new)したオブジェクトを記録し、そのクラスのデストラクタで解放(delete)しています。評価結果を伝達する場合はオブジェクトをコピーします。深いコピーを行うので配列等は結構時間がかかります。

ガベージコレクションを実装しない理由ですが、ADP(Prolog)の実行環境(インタプリタ)はスタックで実装できるのでガベージコレクションをする必要がないということが1つ。
もうひとつの理由はパフォーマンスで、どのような実装方法を用いても、今日の大容量メモリで動作する場合、一度ガベージコレクタが動くとどうしても動作が遅くなるだろうと思います。
64ビット時代でさらに大容量のメモリが搭載される場合、ちまちまガベージコレクションするよりも贅沢にメモリを使ったとしても許されるかな?というもくろみもあります。
2010-06-23 | コメント:0件



ADP開発者へのコメント

ADPの開発者へのコメントはこちらのコメント欄からお願いいたします。

コメントですが、リアルタイムで反映されます。ネチケットを守って頂くのと、ライセンスを無視した無理な注文は御控えください(場合によってはコメントを削除いたします)。
何分開発者がやっていますのでコメントの返信はタイムラグがあることをご了承ください。
2010-06-21 | コメント:0件



[ADP開発日誌]ADPはマルチパラダイム言語を目指す

ADPは、論理型の言語であるPrologをベースとしていますが、代入やnext述語など、通常の手続き型の考え方も積極的に取り入れています。また、まだマニュアルに書いていませんが、ADPでは、

$value.method

のようなメソッド呼び出しもサポートしています。のでオブジェクト指向プログラムの考え方も取り入れていると言えば取り入れています。もっともメソッド形式の呼び出しを採用した理由はその方がコードがシンプルになる場合があるからです。

ADPの開発目標の1つの目標ですが、マルチパラダイム言語を目指しています。
もう少し噛み砕いでいいますと、特定の考え方に縛られずに便利なものなら何でも取り入れましょう。というスタンスで開発しています。
ADP独特のプログラミングパラダイムというのもないので、そういう意味では、借り物ばかりですが、『エンジニアが開発した言語』らしいかと思います。
2010-06-21 | コメント:0件



[ADP開発日誌]Windows開発版のプレ公開

 先週からちまちまブログとドキュメントページを書いていたのですが、
本日みましたところアクセス数が地味に伸びていたので、今のうちにWindows版だけですが、開発版(Ver 0.4)をプレ公開します。

ドキュメントも充分でないですが、ドキュメントの一部に実行例を出しているので、ものがあればイメージがつかみやすいかと思います。

ADPのドキュメントページをADP(正確にはADPのWEBページ拡張)で構築しているのですが、やはりというかなんというか細かいバグおよび仕様変更を行っており、まだまだ改修をしています。
ので、このあたりはお含みおき頂ければと思います。
2010-06-21 | コメント:0件



[ADP開発日誌]ADPとPrologとの違い

ADPは、Prologからユニフィケーションとバックトラックを借りてきていますが、構文等については、皆様(というか私自身が)とっつきやすいように、普通の言語と同様にしています。

例えば、変数は$で始まるとか、文字列はクオート("や')で囲むとかはPrologとは違います。そのほかホーン節の定義も少し違うのですが、これは私が元としたPrologの方言から来ています。

また、何より決定的に違う面があるのですが、ADPには

・代入
・next述語によるバックトラック後に失敗せずに評価を続ける機能

があります。
代入は副作用を伴いますので、論理型言語であるPrologには代入がありません。しかし、プログラムを作成する上では代入は便利だと考え、ADPは代入をサポートしています。
また、Prologでは、バックトラックで全件を探索するにはfail述語を使い、最終的には失敗でプログラムが終了します。
これはこれでよいのかもしれませんが、ADPではnextという述語を用意し、失敗せずに全件探索を行うことができます。

Prologには、findall述語があり、この述語により全探索の結果をリスト化します。
ADPは代入とnext述語を用いて全探索結果のリスト化ができます。あくまでも私見ですが、代入とnext述語によりADPの方がより表現力が増しているかと思います。

next述語の説明


ADPですが、通常の言語をマスターした人にとって基本的にあまり難しいことを考えなくても良いように、Prologのエッセンス(よいところ)だけを引き出すようにデザインしています。
2010-06-18 | コメント:0件
Previous Page | Next Page