- Documentation
- Reference manual
- Overview
- Getting started quickly
- The user's initialisation file
- Initialisation files and goals
- Command line options
- UI Themes
- GNU Emacs Interface
- Online Help
- Command line history
- Reuse of top-level bindings
- Overview of the Debugger
- Compilation
- Environment Control (Prolog flags)
- An overview of hook predicates
- Automatic loading of libraries
- Packs: community add-ons
- The SWI-Prolog syntax
- Rational trees (cyclic terms)
- Just-in-time clause indexing
- Wide character support
- System limits
- SWI-Prolog and 64-bit machines
- Binary compatibility
- Overview
- Packages
- Reference manual
2.22 Binary compatibility
SWI-Prolog first of all attempts to maintain source code compatibility between versions. Data and programs can often be represented in binary form. This touches a number of interfaces with varying degrees of compatibility. The relevant version numbers and signatures are made available by PL_version_info(), the --abi-version and the Prolog flag abi_version.
- Foreign extensions
- Dynamically loadable foreign extensions have the usual dependencies on
the architecture, ABI model of the (C) compiler, dynamic link library
format, etc. They also depend on the backward compatibility of the PL_*
API functions provided lib
libswipl
.A compatible API allows distribution of foreign extensions in binary form, notably for platforms on which compilation is complicated (e.g., Windows). This compatibility is therefore high on the priority list, but must infrequently be compromised.
PL_version_info():
PL_VERSION_FLI
, abi_version key:foreign_interface
- Binary terms
- Terms may be represented in binary format using PL_record_external()
and
fast_write/2.
As these formats are used for storing binary terms in databases or
communicate terms between Prolog processes in binary form, great care is
taken to maintain compatibility.
PL_version_info():
PL_VERSION_REC
, abi_version key:record
- QLF files
- QLF files (see qcompile/1)
are binary representation of Prolog file or module. They represent
clauses as sequences of virtual machine (VM) instructions.
Their compatibility relies on the QLF file format and the ABI of the VM.
Some care is taken to maintain compatibility.
PL_version_info():
PL_VERSION_QLF
,PL_VERSION_QLF_LOAD
andPL_VERSION_VM
, abi_version key:qlf
,qlf_min_load
,vmi
- Saved states
- Saved states (see -c and qsave_program/2)
is a zip file that contains the entire Prolog database using the same
representation as QLF files. A saved state may contain additional
resources, such as foreign extensions, data files, etc. In addition to
the dependency concerns of QLF files, built-in and core library
predicates may call
internal foreign predicates. The interface between the public
built-ins and internal foreign predicates changes frequently. Patch
level releases in the stable branch will as much as possible
maintain compatibility.
The relevant ABI version keys are the same as for QLF files with one addition: PL_version_info():
PL_VERSION_BUILT_IN
, abi_version key:built_in