3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M-Prolog 開発計画

3
Last updated at Posted at 2026-06-15

はじめに

N-Prologの後継のM-Prologの開発をしています。N-Prologは1980年代のRUN/PROLOG互換として一応の完成をみました。しかし、実行速度に不満がありました。SWI-Prologに比較すると5倍から10倍は遅いのです。N-PrologはPAIPで解説されているProlog処理系のアイディアを元としておりSLDリゾルーションを素朴に実行するタイプです。このためWAMのSWI-Prologなどよりずっと遅いのでした。そこで、この度Prologコードの証明木をC言語で記述する方式を考案してM-Prologというプロジェクトを始めています。

素朴なベンチマーク

まだまだ開発途上ながら単純な次の非決定性述語が動作するところにまで至りました。実行速度について計測しました。失敗継続により10^5回のバックトラックを生じます。さらにこれをbetweenで1000回実行しているものです。

n(1). n(2). n(3). n(4). n(5).
n(6). n(7). n(8). n(9). n(10).

bench :-
    n(X),
    n(Y),
    n(Z),
    n(A),
    n(B),
    fail.
bench.

bandicam 2026-06-15 11-24-40-227.jpg

bandicam 2026-06-15 11-25-30-077.jpg

bandicam 2026-06-15 11-26-39-445.jpg

実行はインテルIcor7マシンのWSL2で行いました。

このようにWAMで動作するPrologの実行速度を超えることがわかりました。

C言語への変換

まだ開発途上ではありますが、次のようにするとコンパイル可能です。第2引数にcを与えるとC言語のソースを生成します。

?- use_module(compiler).

compile_file('./tests/bug',c).

C言語のgotoをつかってバックトラックを実現しています。ご興味ありましたらおためしください。

PLICには及ばない

GNU-PrologにはC言語に変換して高速実行するPLICというコンパイラが装備されています。これで実行すると上記のベンチマークを990ミリ秒程度で完了します。M-Prologの2倍くらい高速です。
さすがにこれには適いません

ようやくSWI-Prologなどの世界水準のProlog処理系並みの速度が出せつつあります。2026年の夏にver1.00を公表する予定です。
https://github.com/sasagawa888/mprolog

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?