Changes in YAP4.2
Yap4.2.0:
- NEW: YAP4.2.0 is out
- REMOVED: file RELEASE.NOTES
Changes in YAP4.1
Yap4.1.19:
- FIXED: phrase/3 had bad call to $t_body.
- FIXED: warnings on alpha.
- FIXED: make YAP compile on SGI's cc.
- ISO-YAP: accept 0o notation for octal integers.
- FIXED: rcdifnot would try to unify with NULL return pointer.
- FIXED: when/3 did not link Done variables.
- FIXED: bad copying of arguments in co-routining.
- NEW: first cut at SBA or-parallel execution.
- FIXED: YAP version is now in Makefile.
- NEW: alarm/3 (see manual).
- FIXED: errno handling is in io.h.
Yap4.1.18:
- FIXED: debugger would not work after change to call.
- FIXED: do not trace !G within debugger.
Yap4.1.17:
- FIXED: error handler for floats was too enthusiastic in format/3.
- FIXED: accept list of dynamic predicates.
- NEW: merge new version of Ricardo Rocha's OPTYAP
including support for tabulation.
- NEW: improve performance of call.
- FIXED: trail overflow in heap gc (store_ref_in_dbtable).
- FIXED: close fd if mmap fails.
- FIXED: IsPrimitiveTerm would succeed on suspended variables.
- FIXED: small bug in socket_select.
- FIXED: garbage collector would follow old values of
multi-assignment variables even if they were not heap
pointers.
- FIXED: garbage collector was following list of suspended
goals as if a variable.
- FIXED: call/1 was not importing modules correctly.
- NEW: A library. Right now it just consists of
several files copied from the Edinburg Prolog library, with
little or no change. To use it, you must do "make install" or
have LIBDIR in the Makefile set to the YAP source directory.
- FIXED: garbage in debugger.
- FIXED: fix writing \+ (a,b) properly.
- NEW: get rid of addresses for the unify() routines. Unify
now receives values, as it should, instead of addresses.
- NEW: get rid of the representant stuff for
coroutining. Instead of trying to find out if we bound an
external variable, from now on we must guarantee that we
pass a non-dereferenced external variable (e.g. argument) to
the unification routine, otherwise delayed variables may not
wake up.
- FIXED: get rid of bind_variable.
- FIXED: exit_yap was not working (halt).
- FIXED: write version number when booting from a saved
state.
Yap4.1.16:
- FIXED: don't crash if you're not booting from the
standard file (SavedInfo should not assume LookupAtom works).
- FIXED: prompt (again).
- FIXED: debugging dynamic or source mode procedures would
ignore depth limits.
- FIXED: -DBP_FREE could lose program counter, if changed
by ErCl or ErDBE.
- FIXED: global registers could be smashed by the compiler
within error handlers (SGI).
- FIXED: fix a bug on and thus enable garbage collection of
code space.
- FIXED: bug in cut_by_y.
- FIXED: be less optimistic about when to expand the trail
after a sigsegv.
Yap4.1.15:
- FIXED: disable garbage collection of code space.
- FIXED: growstack did not know OldH.
- FIXED: be conservative about new variables in branches (active_branch).
- NEW: change code to artistic license.
- FIXED: include errno.h in socket code.
- FIXED: strcpy of NULL pointers in sysbits.c.
- FIXED: writing \+ (a,b) would not output middle space,
confusing the parser.
- NEW: initial support for the SBA model (parallelism).
- FIXED: make the system more robust when it can't get more
memory.
- FIXED: recorded with unbounded key was crashing.
- CLEANUP: use derefa when we know the possible address for
a variable. This avoids reading a memory cell twice.
- CLEANUP: make sockets a special stream, make actual
reading and writing on sockets work, unify all close
operations on sockets, update iopreds to take special care of
sockets. Still not working: ungetc on sockets, eof has not
been tested.
- CLEANUP: conditions on c-interface.
- FIXED: growheap could be called with wrong local stack pointer.
- NEW: always_prompt_user/0, for those who hide behind pipes
and sockets.
- FIXED: bug in frozen/2 and friends.
- CLEANUP: use Prolog terms in coroutining, avoid NULL pointers.
- FIXED: save/restore was breaking corouting.
- FIXED: readline does not work under parallel execution.
- CLEANUP: cleanup some constructs so that YAP will compile
under lcc again.
- CLEANUP: follow choicepoint ordering whenever possible.
- FIXED: incorrect detection of overflows in index.c.
Yap4.1.14:
- FIXED: texi2dvi failed on the manual because of incorrect
placement of @*.
- FIXED: RECOVER_MACHINE_REGS for MIPS in Regs.h had
somehow lost an E!
- FIXED: expand stacks if effectiveness of garbage
collection is below 20%.
- FIXED: YAP was not checking for excessive number of
labels while assembling.
- FIXED: get rid of no in sequential init.
- FIXED: bug in checking modules for abolish and friends.
- FIXED: with readline, prompt even if stderr is not a
tty. Also make sure prompt goes to stderr, not to stdout.
- NEW: SICStus Prolog compatible socket interface (see
manual, still experimental).
Yap4.1.13:
- FIXED: Cygnus/getrusage does not work under WIN95.
- FIXED: extraneous push in compiling bvmap for either.
- FIXED: long printf in heapgc.c
- FIXED: extraneous printf in dbase.c
- NEW: sync until leftmost in YAPOR.
- NEW: sequential predicates in YAPOR.
- FIXED: YAPOR in OPTYap now runs queens.
Yap4.1.12:
- FIXED: make sure that when you backtrack to an erased
clause you don't get caught by dangling pointers.
- FIXED: check args to arithmetic comparisons are not free.
- FIXED: make sure you only mark an env var as initialised
if the instruction refers it for the first time.
- FIXED: Error handler depended on pointer to freed code.
- FIXED: always fully gc clean the last environment.
- FIXED: new dbref gc cleaner could mess with dbqueues.
- FIXED: test if YAP can allocate more memory.
- FIXED: YAP now makes procedures dynamic after first assert.
- FIXED: because of disjunctions, variables in clauses do not
always grow linearly. Change compiler to informe gc of actual
live variables in an environment at any point, not including
variables outside the current branch (even if at ancestor's
branches). Take special care with optimised if-then-elses.
- NEW: speedup compact_heap.
- FIXED: CheckDBOverflow in MkDBTerm would not reset
variables, as it should.
- FIXED: recover HB in gc.
- NEW: Integer macros for integers that may overflow.
- NEW: jump across unmarked cells in downward pass.
- NEW: simplify marking longints and doubles.
- NEW: small performance improvement in meta-call.
- FIXED: make toggle preds robust to meta-calls.
- FIXED: bad error handling in evaluable predicates.
- NEW: upgrade YAPOR to most recent OPTYAP.
- CLEANUP: use the RESET_VARIABLE macro to reset a variable.
- FIXED: ITERATIVE_DEEPENING option is now called DEPTH_LIMIT
- NEW: simplified autoconf script and Makefile.
- FIXED: YAPOR now compiles again and reaches top-level.
- CLEANUP: make assembly built-ins accessible as standard
predicates. This makes meta-calls somewhat less bulky.
- FIXED: YAP could crash while reading in binary files. The
problem was that the hash function could return an offset <
0.
- NEW: in GC check if db terms are in use, and if not reset
counters. Further reclaim immediately space for terms erased
and not in use (current implementation uses an inefficient
unbalanced binary tree).
- NEW: in GC untrail unmarked bindings and reset the pointers.
Yap4.1.11:
- NEW: after several requests, added assert_static and friends.
- FIXED: bug in adding spaces while writing X is $VAR(2)+...
- NEW: stream aliases.
- FIXED: ^C-a now works on PUSH_REGS (eg, X86).
- FIXED: catch could remove other valid catches.
- FIXED: several cases of non-compatible ISO error handling.
- FIXED: current_input and current_output would fail for
instantiated arguments.
- FIXED: writing $VAR(X) terms could core dump miserably.
- FIXED: initialisation was not protected by a catch/3.
- FIXED: system would exit after trying to compile Numeric
or DBRef goal.
- NEW: improve performance of arithmetic comparisons by
inserting them as ops in abstract machine.
- FIXED: meta-call would get lost in call((X,Y)). Callable
checking is now ISO (almost).
- FIXED: recursive compare was not catching term_exts on
second argument to comparison.
- FIXED: compilation warning on printing Int in alpha.
- FIXED: gc would mark terms accessible only from the
trail. Change so that these pointers are only relocated, and
remove dangling pointers from the trail.
Yap4.1.10:
- FIXED: get rid of ExecuteProlog as used by print/1,
execute_goal can do the same.
- FIXED: execute_goal should survive garbage collection and/or
stack shifting.
- FIXED: $undefined succeeded for predicates written in
assembly.
- FIXED: provide 16 registers (ARG1 to ARG16).
- FIXED: some changes to make YAP work without ALIGN_LONGS.
- FIXED: old timing bug.
- FIXED: bug in generating cut.
- FIXED: don't crash if have several errors on the same expression.
- FIXED: use strerror instead of sys_errlist.
- FIXED: make system more resilient to small ints.
- FIXED: system should be more resilient when allocating
large chunks of memory.
- FIXED: X is cputime should have no rounding problems.
- FIXED: silently fail on wrong array accesses.
- FIXED: true was not seen as built-in.
- FIXED: DEPTH was not always saved correctly in execute_prolog.
Yap4.1.9:
- FIXED: bug in scanner.
- FIXED: bug in allocating large chunks of memory under NT,
and change to allow YAP to at least run under WIN95/98
(memory allocation and timing are not working yet for WIN98).
Yap4.1.8:
- FIXED: random would only work in Linux.
- FIXED: better names for array_element/3 and update_array/3.
- FIXED: array access now does boundary checking, and fails
if you try to access an undefined reference.
- NEW: profiling now counts calls to non-profiled
predicates, included system built-ins.
- FIXED: profiling now does not need to disable indexing.
- FIXED: predicate_property was returning just the name for
unbound calls.
- NEW: putenv/2. If you want to start shell scripts.
- NEW: YAP now supports 8 bits char sets. The default is iso-latin.
- NEW: call_residue/2 now available.
- FIXED: serious bug in can_unify: HB was not set to
H. Should be no problem with B.
- FIXED: trim_trail is not compatible with Multi-Assignment
variables.
- FIXED: under a few cases code could have problems if some
was using a dynamic clause and retracted it.
- NEW: improve absmi for coroutining.
- FIXED: bug in statistics(runtime,T).
- NEW: statics(walltime,T) and internal walltime() function
- FIXED: changed code that assumed dir_separator could only
be a single character. Some MS-DOS systems accept both slash
and backslash.
- FIXED: for compatibility with other Prologs, YAP now
changes directory to the directory
containing the file it is consulting. Don't need to create an
init.yap any longer.
- NEW: getcwd/1.
- FIXED: disallow integer as argument to cd/1 and friends.
- FIXED: rand should depend on MAX_RAND; document srandom.
- NEW: environ now allows access to a process' environment.
Yap4.1.7:
- FIXED: bug in read_term/singletons. I incorrectly assumed
variables were being allocated in order.
- FIXED: too much space was being allocated for 64 bit
architectures.
- FIXED: error handling in data base could collapse.
- FIXED: ASP for growheap could be wrong.
- FIXED: growheap and growstack forgot about dangling
pointers in the trail.
- FIXED: increase margins as garbage collections happens.
- FIXED: make recorded and friends restartable for the
case there is no space left to copy the new term.
- FIXED: make memory allocation routine more generic, try
to use temporary files when /dev/zero is not available,
control whether we are fetching the right addresses, and
close open mmaped stream.
- FIXED: make sure we always have an error handler in the
debugger.
- FIXED: GC should now work with named dynamic arrays and
array extensions. Access to named dynamic arrays now goes
through the trail.
- FIXED: make arg/3 silently fail on negative or 0 first
arguments. Breaks the ISO standard, but seems to be compatible
with other Prologs.
- FIXED: dequeue could leave dangling pointers to the data-base.
- FIXED: bad error handling in arithmetic built-ins.
- FIXED: absolute_file_name/2 was buggy.
- NEW: extend C-interface to allow calling back Prolog.
- FIXED: moved to version 98.
- FIXED: variable ppc was causing trouble with Rhapsody.
- FIXED: GC should now work with coroutining.
- FIXED: coroutining had bug with reference chains.
- FIXED: error handler called unexisting procedure $close/2.
- FIXED: small bug in unknown/2.
- CLEANUP: improve meta-call performance by avoiding
unnecessary choice-points.
- FIXED: assert and source mode are now aware that modules
call meta-calls.
- FIXED: libraries should be checked for existence before
checking for the files themselves.
- NEW: dynamic loader now works in Linux/Alpha and in
Digital Unix/Alpha! Fixed bugs where YAP would corrupt global
variables allocated by external functions.
- FIXED: BP_FREE didn't do callee save for PREG, possibly
corrupting the caller. Core dumped print/1 on X86.
- CLEANUP: separate error handling into separate files.
- FIXED: RATIONAL_TREES should now work in all built-ins.
- FIXED: make sure the GC does not follow invalid trail
entries.
Yap4.1.6:
- NEW: execute_goal(Goal) function allows calling
Prolog from C. Still under testing, and not yet officially in
the interface. Note that execute_goal will destroy all X
arguments, and that it only keeps the first solution (it
performs an implicit cut).
- FIXED: complaints while compiling YAP in WIN/NT platform.
- FIXED: debugger got confused when quasi-skipping through
inline builtins
- FIXED: DEPTH_BOUND_CALL was not restoring depth for retry_c.
- NEW: compilation flag LOW_LEVEL_TRACER, if this flag is
defined, enables detailing execution. Use
start_low_level_trace and stop_level_trace, or T from
interrupt to access this functionality.
- CLEANUP: overflows are now processed within the
emulator, not back in the caller.
- FIXED: memory allocation during boot could crash returning NULL
pointer, system would then crash.
- ISO-YAP: many new predicates, major rewrite of manual.
- FIXED: debugger should now understand better immediate
update semantics (eg, dynamic predicates).
- ISO-YAP: all error handling is now ISO style.
- FIXED: could not write MIN_INT
- ISO-YAP: add Z is float_integer_part(X).
- ISO-YAP: add Z is float_fractional_part(X).
- ISO-YAP: arg/3 now generates errors.
- ISO-YAP: abolish/1 now does errors the YAP way, and
only abolishes dynamic procedures. Use abolish/2 to clear
static procedures.
- break boot.yap file into smaller files.
- YAP now compiles well under Linux/Alpha.
- X now is called XREGS to avoid problems with Linux/Alpha
includes.
- Abort now jumps to before the absmi emulator and then
does a long cut. This should simplify YapOr, and allow for
restricting toplevels.
Yap4.1.5:
- FIXED: MAX_INT on Tags_LowTag was wrong.
- NEW: first cut of profiling. Right now, Currently, for
static predicates, profiling disables indexing. That should be
fixed in the next version.
- NEW: source mode debugging is active. Compile with ":-
source" and debug/step through all your builtins!
- FIXED: major bug in cut_by, since early 4.1 :-(. Affects
debugging.
- NEW: fetch first op from pred before jumping.
- NEW: use SREG to cache A1 for switches and tries.
- FIXED: warning messages for SGI CC.
- FIXED: warning messages for alphas.
- NEW: optimise switch_on_list for the list case.
- NEW: WAM registers optimised for MIPS.
- FIXED: shadow CP and HB on sparcs. They need every bit of
performance we can get them.
- FIXED: famous curprio bug in parser, from now on parser
backtracks cleanly.
- NEW: Got rid of SREG for call-type instructions.
- NEW: CPREG in absmi for Suns.
- CLEANUP: got rid of obsolete absmi regs.
- FIXED: small bug in the Prolog code for unknown/2.
- NEW: Small speed improvements for complex absmi
instructions.
Yap4.1.4:
- NEW: read_term/3 and new syntax_error option to yap_flag.
- FIXED: got rid of fast predicates from compiler.
- NEW: Makefile now generates a bootable save state as YAP
default.
- NEW: started working on manual for 4.1. Fixed info format
so that it will generate info files. Add several missing
built-ins to manual.
- NEW: bootable saved states with arguments, accessible
though unix(argv(L))).
- NEW: optimised code for tests (var/1 and friends) and
arithmetic (is/2).
- NEW: much faster code for /\, \/, >> and <<.
- FIXED: debugger does not go into recorded/3 and friends.
Yap4.1.3:
- NEW: unix(argv(X)).
- FIXED: abs complains if int != Int.
Yap4.1.2:
- NEW: saved states now search for $BINDIR/yap.exe to boot.
- FIXED: bugs with handling errors.
- FIXED: got rid of $recorded/3 for now.
- NEW: generate specialised code for OR, AND, SHIFT LEFT
and SHIFT RIGHT.
- FIXED: statistics(runtime,_) now does not count GC time,
as in other Prologs. statistics(cputime,_) counts everything.
- FIXED: time is returned as an integer, not as a float.
Yap4.1.1:
- CLEANUP: get rid of warnings under Cygnus GCC.
- FIXED: Use Windows memory allocation routine, now YAP can
recover from saved states for smaller stacks.
- CLEANUP: don't use the UNIX define. Use instead configure
to say exactly which UNIX feature you need.
- FIXED: compiler would not handle correctly unsafe
variable from disjunctions.
- FIXED: force indexing to ask for more stack if stack runs
out. This should help if you have really many clauses.
- CLEANUP: clean all error code from C to use the new
Error() routine.
- NEW: use throw/1 to send system errors.
- NEW: catch/3 and throw/1
- NEW: load_foreign_file/3 for SunOS4 (tested) and AIX
(compiles).
Yap4.1.0:
- NEW: memory mapped arrays.
- NEW: make garbage collector expand stack quickly to avoid
excessive number of GCs.
- NEW: do the same for heap overflow detector.
- CLEANUP: cleanup readline code for not using strcpy, strlen and
friends. Current code was broken for very large input strings.
- NEW: sort and friends implemented in C.
- NEW: Removed 256B limitation on atom size while parsing.
- CLEANUP: Change AllocCodeSpace to return NULL on code failure,
make cclause() call growstack on stack failure.
- NEW: Static Arrays!
- Split previous support for arrays and co-routines. We now have
TERM_EXTENSIONS to control extensions to unification. Tried
to redesign the extensions so that they would be modular,
the file TermExt.h.m4 shows how to implement an extension.
- Got rid of lock_pred and friends. Usage of static predicates is
now detected when compilation starts, or when assert
is used.
- Got rid of hash table in optimise_ce, it wasn't working.
- Current predicate access:
add new argument to call, so that call can recognise which
predicate it is working on.
add extra argument to try and frieds, so that they can
directly access a predicate.
- Internal cleanup
Change cdmgr.c and friends so that we now move in a clause
through the Clause structure. Get rid of ptrs, except for
save.c.
- Changes to immediate update semantics implementation:
- Entries are now removed from the chain immediately,
instead of only when they are physically deleted.
- Each entry has an age (positive if entry is from recordz,
negative if from recorda).
- When we backtrack to deleted entries, we search the property
list for entries with younger ages.
- When we erase a clause, we don't place a fail in
the clause. Instead, we remove the clause from the
chain immediately.
- NEW:
MIPS architecture support in Regs.h and absmi.c.
- X86 Speedups:
- Force opcode prefetching for simple instructions in X86
- Cache Y for control instructions in X86
- Optimise Bind() for X86 by jumping only if we need to
trail for cases close to the end of the instruction. This
does not seem to improve performance for X86 machines.
- Cache SREG usage.
- Cleanup:
Move AuxSp and AuxTop to REGS
Use Aux for emulator PDL
- Cleanup: compiler.h
Use enum for compiler ops.
- NEW: Indexing
- simplify GC and ORP: instructions do not store
intermediate values in global;
- unnecessary instructions purged;
- new try_tail like trail_head, but jumps to atomic code
- switch on types insts after backtracking now look
like retry and have correct clause information for ORP;
- switch_on_type talks to switch_on_func through S, and to
switch on cons through A[0]. I_R disappeared.