[Up] [Contents] [Index] [Summary]
Version 2.0 is first of all a freeze of
all the features added to the various 1.9.x releases. Version 2.0.6 for
PC has moved from the WATCOM C 32-bit windows extender to Windows NT
and runs under Windows 3.1 using the Win32s NT emulator.
New features offered:
- 32-bit Virtual Machine
Removes various limits and improves performance.
- Inline foreign functions
`Simple' foreign predicates no longer build a Prolog stack-frame, but
are directly called from the VM. Notably provides a speedup for the test
predicates such as var/1,
etc.
- Various compatibility improvements
- Stream based I/O library
All SWI-Prolog's I/O is now handled by the stream-package defined in the
foreign include file SWI-Stream.h
. Physical I/O of Prolog
streams may be redefined through the foreign language interface,
facilitating much simpler integration in window environments.
Version 2.0.6 offers a few incompatibilities:
- retractall/1
In previous releases, the definition of retractall/1
was:
retractall(Term) :-
retract(Term),
fail.
retractall(_).
As from version 2.0.6, retractall/1
is implemented as a deterministic foreign predicate compatible with
Quintus Prolog. It behaves as:
retractall(Head) :-
retract(Head),
fail.
retractall(Head) :-
retract((Head :- _)),
fail.
retractall(_).
I.e. the definition behaves the same when handling predicates
consisting of facts. Clauses with a non-true body will be retracted if
their head matches.
- Foreign interface types
All foreign interface types now have names ending in _t
to
lessen the chance for conflicts. term
, atomic
, functor
and
module
have #define
's for backward
compatibility.
- PL_register_foreign()
The attributes is now a bitwise or of the attribute flags rather than a
0 terminated list. This has no consequences for predicates that have no
attributes (99% of them), while predicates with just one attribute will
generate a compiler warning, but work properly otherwise. Predicates
with more than one attributes must be changed.
PL_dispatch_events
This pointer is replaced by PL_dispatch_hook(). A function was necessary
for the Win32 .DLL
interface.