YAP Development release
This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
vsc 8dcee4415b library(system) plus several new support builtins
much improved garbage collector
improvements to compiler
yaptab compiles again


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@34 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2001-05-21 20:00:05 +00:00
C library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
CHR fixes to compilation of functor and ASP calculation for gc. 2001-05-08 20:39:01 +00:00
CLPQR This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
CVSROOT initial checkin 2001-04-03 22:10:44 +00:00
H library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
LGPL This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
Logtalk/examples initial version 2001-05-21 18:39:55 +00:00
OPTYap library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
VC This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
console This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
docs library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
include library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
library Initial version 2001-05-21 18:32:31 +00:00
m4 memory allocation patches for Apple's OS/X. 2001-05-03 17:13:18 +00:00
misc library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
pl library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
INSTALL This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
Makefile.in library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
README * testing cvs 2001-05-07 19:09:54 +00:00
README.nt This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
TO_DO library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
build-distr This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
changes.css library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
changes4.3.html library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
config.guess This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
config.h.in library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
config.sub This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
configure library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
configure.in library(system) plus several new support builtins 2001-05-21 20:00:05 +00:00
distribute This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00
install-sh This commit was generated by cvs2svn to compensate for changes in r4, 2001-04-09 19:54:03 +00:00

README



			README for Yap 4.3


This directory contains a release of the Yap 4.2 Prolog system,
originally developed at the Universidade do Porto by Luis Damas and
Vitor Santos Costa, with contributions from the Edinburgh Prolog
library, the C-Prolog manual authors, Ricardo Rocha, and many
others. You should read the rest of this file for information on what
Yap is and for instructions on how to build it.

YAP 4.2 is known to build with many versions of gcc (<= gcc-2.7.2, >=
gcc-2.8.1, >= egcs-1.0.1, gcc-2.95.*) and on a variety of Unix'es:
SunOS 4.1, Solaris 2.*, Irix 5.2, HP-UX 10, Dec Alpha Unix, Linux 1.2
and Linux 2.* (RedHat 4.0 through 5.2, Debian 2.*) in both the x86 and
alpha platforms. It has been built on Windows NT 4.0 using Cygwin from
Cygnus Solutions (see README.cygwin) and using Visual C++ 6.0.

The overall copyright and permission notice for Yap4.2 can be found in
the Artistic file in this directory. Yap follows the Perl Artistic
license, and it is thus non-copylefted freeware. The Yap distribution
contains copylefted free software under the LGPL from Universidade
Politecnica de Madrid, software from the Austrian Research Institute
for Artificial Intelligence (OFAI) under the OFAI license, and
software from Ludwig-Maximilians-Universitaet Muenchen (LMU) under the
LMU license. We would like to take the opportunity to thank the
developers of these packages for their kindness in allowing YAP to
distribute these packages.

If you have a question about this software, desire to add code, found
a bug, want to request a feature, or wonder how to get further
assistance, please send e-mail to yappers@ncc.up.pt.  To subscribe to
the mailing list, send a request to majordomo@ncc.up.pt with body
"subscribe yappers".

Online documentation is available for Yap at:

	http://www.ncc.up.pt/~vsc/Yap/

Recent versions of Yap, including both source and selected binaries,
can be found from this same URL.

1. What is YAP

The Yap Prolog System is a high-performance Prolog compiler developed
at LIACC, Universidade do Porto. Yap provides several important
features:

 o speed: Yap is widely considered one of the fastest available Prolog
systems.

 o functionality: it supports stream I/O, sockets, modules,
exceptions, Prolog debugger, C-interface, dynamic code, internal
database, DCGs, saved states, co-routining, arrays.

 o we explicitly allow both commercial and non-commercial use of Yap.

Yap is based on the David H. D. Warren's WAM (Warren Abstract
Machine), with several optimizations for better performance. Yap
follows the Edinburgh tradition, and was originally designed to be
largely compatible with DEC-10 Prolog, Quintus Prolog, and especially
with C-Prolog.

Yap implements most of the ISO-Prolog standard. We are striving at
full compatibility, and the manual describes what is still
missing. The manual also includes a (largely incomplete) comparison
with SICStus Prolog.
 
2. How to compile YAP

If you are compiling YAP under VisualC++ look at README.VC.

To compile YAP just do:

 (1) mkdir arch

 (2) cd arch

 (3) ../configure

 (4) check the Makefile for any extensions or changes you want to make.

 (5) make

 (6) If the compilation succeeds, try ./yap

 (7) Happy? make install

 (8) "make install-info" will create the info files in the standard info directory.

 (9) "make html" will create documentation in html format in the
current directory.

In most systems you will need to be superuser in order to do "make
install" and "make info" on the standard directories.

2.1 Where to install Yap

 YAP uses autoconf. Recent versions of Yap try to follow GNU
conventions on where to place software.

  o The main executable is placed at BINDIR. This executable is
actually a script that calls the Prolog engine, stored at YAPLIBDIR.

  o LIBDIR is the directory where libraries are stored. YAPLIBDIR is a
subsdirectory that contains the Prolog engine and a Prolog library.

  o INCLUDEDIR is used if you want to use Yap as a library.

  o INFODIR is where the info help files will be stored. Usually
/usr/local/info, /usr/info, or /usr/share/info.

2.2 Which Yap to compile

Compiling Yap with the standard options give you a plain vanilla
Prolog. You can tune Yap to use extra functionality by using the
following options to configure:

 o --enable-rational-trees=yes gives you support for infinite rational
trees.

 o --enable-coroutining=yes gives you support for coroutining,
including freezing of goals, attributed variables, and
constraints. This will also enable support for infinite rational
trees.

 o --enable-depth-limit=yes allows depth limited evaluation, say for
implementing iterative deepening.

 o --enable-low-level-tracer=yes allows support for tracing all calls,
retries, and backtracks in the system. This can help in debugging your
application, but results in performance loss.

 o --enable-wam-profile=yes allows profiling of abstract machine
instructions. This is useful when developing YAP, should not be so
useful for normal users.

 o --enable-parallelism={env-copy,sba,a-cow} allows or-parallelism
supported by one of these three forms. This is still highly experimental.

 o --enable-tabling={local,batched} allows one of the two forms of
tabling. This is still experimental.

2.3 Porting Yap

The system has been mainly tested with GCC, but we have been able to
compile versions of Yap under lcc in Linux, Sun's cc compiler, IBM's
xlc, SGI's cc, and Microsoft's Visual C++ 6.0. The HP-UX cc preprocessor
is known to choke under Yap.

2.3.1 Yap and GCC

Yap has been developed to take advantage of GCC (but not to depend on
it). The major advantage of GCC is threaded code and register
reservation. 

YAP is set by default to compile with the best compilation flags we
know. Even so, a few specific options can be used depending on the
architecture:

2.3.1.1 x86

The flag:

	YAP_EXTRAS= ... -DBP_FREE=1

tells us to use the %bp register (frame-pointer) as the emulator's
program counter. This seems to be stable and should become default
real soon now.

2.3.1.2 Sparc/Solaris2

Use:

	YAP_EXTRAS= ...   -mno-app-regs -DOPTIMISE_ALL_REGS_FOR_SPARC=1

and YAP will get two extra registers! This trick does not work on
SunOS 4 machines.

2.3.1.3 Tuning GCC/Yap for your machine model

Versions of GCC can be tweaked for different processors, eg, 486,
Pentium, PentiumPro, Ultrasparc, Supersparc. Unfortunately, some of
these tweaks do may make Yap run slower or not at all in other machines
with the same instruction set, so they cannot be made default.

The best options also depends on the version of GCC you are using, and
it is a good idea to consult the GCC manual under the menus "Invoking
GCC"/"Submodel Options". We next describe a few:

(a) GCC up to 2.7.*:

	o 486:

		YAP_EXTRAS= ... -m486 -DBP_FREE=1

	to take advantage of 486 specific optimisations in GCC 2.7.*.

	o Pentium:

		YAP_EXTRAS= ... -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2

	o PentiumPros are known not to require alignment.

	o Super and UltraSparcs:
		 YAP_EXTRAS= ... -msupersparc

(b) GCC 2.8.*, EGCS, GCC 2.95.*

	o Check -march=XXX for fun.