在玩 Logtalk 时,似乎我的程序用 Logtalk 对象执行比普通 Prolog 执行的时间更长。我做了一个基准测试,比较了普通 Prolog 中简单谓词的执行与下面等效的 logtalk 对象封装:
%%
% plain prolog predicate
plain_prolog_simple :-
fail.
%%
% object encapsulation
:- object(logtalk_obj).
:- public([simple/0]).
simple :-
fail.
:- end_object.
这是我得到的:
?- benchmark(plain_prolog_simple).
Number of repetitions: 500000
Total time calls: 0.33799099922180176 seconds
Average time per call: 6.759819984436035e-7 seconds
Number of calls per second: 1479329.3346604244
true.
?- benchmark(logtalk_obj::simple).
Number of repetitions: 500000
Total time calls: 2.950408935546875 seconds
Average time per call: 5.90081787109375e-6 seconds
Number of calls per second: 169468.0333888435
true.
我们可以看到logtalk_obj::simple call
比plain_prolog_simple
调用慢。我使用 SWI Prolog 作为后端,我尝试设置一些日志对话标志,但没有成功。
编辑:我们可以在https://github.com/koryonik/logtalk-experiments/tree/master/benchmarks找到基准代码示例
怎么了 ?为什么会有这种性能差异?如何优化 Logtalk 方法调用?