Bugs Fixed in Version 3.8
absolute_file_name/2
: could crash under IRIX; nested compound terms allowed
call_cleanup/2
: efficiency
close/1
: efficiency; handling the standard streams
format/[2,3]
: ~N
didn't work as expected;
are now meta-predicates--needed by the ~@
format spec
load_files/[1,2]
: avoid changing directory; don't loop on duplicate exports
load_foreign_resource/1
: filenames containing periods under Windows NT
print_message/2
: in runtime systems
prolog_load_context/2
: value of term_position
reinitialise/0
: sequencing of events
save_program/[1,2]
: fastcode handling; file mode creation masks; in runtime systems
write_term/[1,2]
: the indented(true)
option and non-ground terms
library(db)
: efficiency of term deletion
library(heaps)
: delete_from_heap/4
library(objects)
: the new/2
method; cyclic dependencies
library(random)
: determinacy and efficiency
library(sockets)
: noisy startup under Windows; block buffering is now the default;
socket_buffering/4
added
library(system)
: sleep/1
admits floats as well as integers
library(terms)
: subsumes_chk/2
and variant/2
now don't unblock goals
- glue code generator: incorrect translation of
+chars
; syntax
error messages were suppressed
- all system messages go via the
print_message/2
interface
- input argument checking is generally stricter
- resources are unloaded in LIFO order but loaded in FIFO order at save/restore
- CLP(Q,R): answer constraint projection
- problems with bignums and big terms in
.ql
files
- detecting invalid goals in meta-calls, asserts,
load_files/[1,2]
- spurious redefinition warnings
- bignum quotient/remainder on 64-bit architectures
- compiler: complexity of compiling multiple clauses with same key,
code generation quality for inline goals
- memory manager: avoiding dangling pointers under Windows,
better reclamation of dead clauses and predicates,
using dynamic hashing and hashpjw for atoms,
keeping predicate tables as small as possible,
avoiding stack overflow if multiple goals get simultaneously unblocked,
better reuse of free memory blocks
- garbage collector: removing redundant trail entries for mutables,
improved scope and speed of generational garbage collection
- callbacks to Prolog while reading from the terminal
- printing atoms with character codes in 27...31
- reading atoms with
\c
- Floating point NaN (Not a Number). Now behaves consistently across
platforms. In particular, fixed Windows related bugs with arithmetic on
and printing of NaN.
- Arithmetic comparisons involving NaN now fails (except
=\=
). Note
that X is nan, X =:= X
fails.
- Term order for NaN is now defined and the same for all
platforms. There is a single NaN and it lies between (the float)
+inf
and the integers.