2004-10-25 12:13:58 +01:00
|
|
|
=================================================================
|
|
|
|
Logtalk - Object oriented extension to Prolog
|
2006-12-28 13:03:34 +00:00
|
|
|
Release 2.29.1
|
2004-10-25 12:13:58 +01:00
|
|
|
|
2006-02-10 17:44:05 +00:00
|
|
|
Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved.
|
2004-10-25 12:13:58 +01:00
|
|
|
=================================================================
|
|
|
|
|
|
|
|
|
2004-11-29 20:36:31 +00:00
|
|
|
To load this example and for sample queries, please see the SCRIPT file.
|
2004-10-25 12:13:58 +01:00
|
|
|
|
2005-04-23 00:57:45 +01:00
|
|
|
This folder provides simple benchmark tests for comparing Logtalk message
|
|
|
|
sending performance with direct predicates calls in plain Prolog.
|
|
|
|
These benchmarks may also be used for comparing Logtalk message sending
|
|
|
|
performance across Prolog compilers.
|
2004-10-25 12:13:58 +01:00
|
|
|
|
2005-04-23 00:57:45 +01:00
|
|
|
This example is made of five source files:
|
2004-10-25 12:13:58 +01:00
|
|
|
|
2005-04-23 00:57:45 +01:00
|
|
|
benchmark.lgt
|
2004-10-25 12:13:58 +01:00
|
|
|
contains the benchmark predicates
|
2005-04-23 00:57:45 +01:00
|
|
|
plain.lgt
|
2005-03-06 21:19:09 +00:00
|
|
|
contains a definition for a list length predicate and a predicate
|
|
|
|
for testing performance of the built-in predicates assertz/1 and
|
|
|
|
retract/1
|
2005-04-23 00:57:45 +01:00
|
|
|
module.pl (not loaded by default; see below)
|
2004-10-25 12:13:58 +01:00
|
|
|
contains the same definition of a list length predicate
|
|
|
|
encapsulated in a module
|
|
|
|
object.lgt
|
|
|
|
contains the same definition of a list length predicate
|
|
|
|
encapsulated in an object
|
2005-03-06 21:19:09 +00:00
|
|
|
database.lgt
|
|
|
|
contains predicates for testing the performance of the built-in
|
|
|
|
database methods assertz/1 and retract/1
|
|
|
|
|
2005-04-23 00:57:45 +01:00
|
|
|
You may have noticed above that the benchmark predicates and the predicates
|
|
|
|
for plain Prolog testing are both encapsulated in Logtalk source files. The
|
|
|
|
Logtalk compiler just copies the plain Prolog code to the generated Prolog
|
|
|
|
files. The reason for using the .lgt extension for these files is just to
|
|
|
|
make it possible to load all the example code using a single call to the
|
|
|
|
logtalk_load/1 predicate.
|
|
|
|
|
|
|
|
By default, the benchmark tests on the SCRIPT file use a list of 30 elements
|
|
|
|
as an argument to the list length predicates. Increasing the list length
|
|
|
|
leads to decreasing performance differences between plain Prolog and Logtalk
|
|
|
|
as the list length computation time far outweighs the overhead of the message
|
|
|
|
sending mechanism. Likewise, decreasing the list length leads to increasing
|
|
|
|
performance differences between plain Prolog and Logtalk (up to the point you
|
|
|
|
will be measuring the Logtalk message sending mechanism overhead compared to
|
|
|
|
plain Prolog predicate calls). In real-life applications, only testing can
|
|
|
|
give you a balanced view on the trade-offs between plain Prolog performance
|
|
|
|
and Logtalk programming features.
|
|
|
|
|
|
|
|
By default, the loader.lgt file used to load the example code does not load
|
|
|
|
the module.pl file. Edit this file if your Prolog compiler supports a module
|
|
|
|
system and you want to run some comparative performance tests between plain
|
|
|
|
Prolog, Prolog modules, and Logtalk objects. Note that you may need to edit
|
|
|
|
the code on the module.pl file to make any necessary compatibility changes
|
|
|
|
for your Prolog compiler module system. For most Prolog module systems, the
|
|
|
|
performance of module calls is close or even identical to the performance of
|
|
|
|
plain Prolog calls, specially when using imported predicates as opposed to
|
|
|
|
using explicit module qualification.
|