SWI-Prolog ChangeLog ==================== * FIXED: saving numbers like 0x00ff0000 to saved-state (numbers with more than 22 bits, all whose bytes are either 00 or ff). Found by Stefan Mueller. * PORT: Fixes to configure to deal with alloca() and dlopen() on SCO-Unix, both for gcc and native SCO cc. Thanks to Tamas Laufer. * ADDED: user:prolog_file_type/2 hook. This can be used to define the meaning of filename extensions to Prolog. All extension handling is based on this predicate. * MODIFIED: absolute_file_name/3 default for file_errors option is now `error'. Used to be fail. file_errors(error) now throws an existence_error exception. This behaviour is compatible to Quintus and SICStus. * FIXED: absolute_file_name/3 using solutions(all) option. * FIXED: PL_handle_signels(): avoid a loop and remove dispatched signels. This fixes Control-C handling in the Windows version. Thanks to Bob Wielinga. * FIXED: Quote program-name when registering the Prolog Source type under Windows. * FIXED: proper timing for blocking signals (Unix version), so they are delayed during garbage collection. * FIXED: Various issues in the GUI tracer, most related to the new xpce-5 class-compiler. * MODIFIED: Deleted please/3 and added the functionality to feature/2. * FIXED: Some compiler warning in plld.c and pl-stream.c. Might have caused problems when using characters >= 128, but quite unlikely. Reported by Peter Ludeman. * FIXED: 8-bit transparency of console window. VERSION 3.2.6 ============= * FIXED: definition of last/2 to be both logical and determinitic if applicable. Based on implementation published on comp.lang.prolog a while ago. * FIXED/PORTABILITY: Modified implementation of stack-allocation based in mmap() (Many Unix systems). This makes the configuration work on the Linux 2.2 kernels, but most likely fixes problems on many other systems. It also avoids potentional conflicts in the stack management with foreign code using mmap(). * FIXED: retract((p:-true)) is equivalent to retract(p). Reported by Juan Cires Martinez. * DOCUMENTATION: Thanks to Xavier Noria, a large number of spelling and consistency problems have been removed from chapters 1 and 2 of the manual. Keep up the good work! * FIXED: Avoid reentrence of the GNU readline library, as this upsets the readline signal handling. * ISO: load_files/2 now throws an exception rather then printing a message if a target file does not exist. * FIXED: Initiate hash-based indexing for integers > max_tagged_integer. Very important if your code uses large integers and relies on indexing! * FIXED: recognise -p option in pl -o state -c file.pl. Reported by Lukas Faulstich. Thanks. VERSION 3.2.4 ============= * FIXED: protocolling the input-stream on the Windows version. * ADDED: 'm' command in tracer to examine details of the currently pending exception. * ADDED: Support for EWOULDBLOCK on input streams required by new socket package. * FIXED: wait_for_input/3 correct reporting of anonymous streams. * ADDED: Port of wait_for_input/3 to Windows. Only works for streams referring to sockets! * FIXED: Get MAXPATHLEN ok for some more platforms (SCO_SV 3.2), reported by Clive Cox. Thanks. * FIXED: Win32: plld.exe to deal properly with the implicitely added .exe extension of qsave_program/[1,2]. Thanks to Lutz Wohlrab. * FIXED: Some patches to the Windows MSVC project-configuration for building SWI-Prolog from the source-code by Lutz Wohlrab. VERSION 3.2.3 ============= * ADDED: Win32: Some project settings and debug-options to plld contributed by Lutz Wohlrab. * ADDED: RPM Packages for swi-prolog, xpce and the GUI tracer. See the new home-page. * FIXED: Recursion problem in calling prolog_event_hook/1, causing crashes in the graphical debugger. * FIXED: Crash after set_feature(history, on). Thanks to Anjo Anjewierden. VERSION 3.2.2 ============= * FIXED: Memory problem at startup. This caused startup-crashes in Windows 95/98. Normally harmless under NT and Unix, but can cause problems here too if the size of a saved state is an exact multiple of the machine's page-size. * MODIFIED: Win32: qsave_program/[1,2] now adds .exe extension if no extension was specified. VERSION 3.2.1 ============= * FIXED: qsave_program/[1,2] for Windows 98 and possibly other platforms. Thanks to Uwe Lesta. VERSION 3.2.0 ============= * WIN32: moved to MSVC 5.0 platform. Added win32 specific source (console, uxnt libraries) to the main source-tree. Added MSVC workspace to manage the whole building process. Good news is that MSVC 5.0 produces considerably faster code. The Windows and Linux versions now perform about equally on the same hardware (SuSE 5.3 linux using egcc 1.03 vs. NT 4.0/SP4 using MSVC 5.0). With thanks to Lutz Wohlrab. * WIN32: Console version of SWI-Prolog (plcon.exe) no longer shows a message-box on errors, completion of the boot-compilation, etc. * FIXED: Win32 console (plwin.exe), various patches: a startup threat-synchronisation problem which might explain why SWI-Prolog crashes immediately at startup sometimes on windows 95/98 (NT appears more robust for invalid API calls), two memory management problems in the window-resize code and some small glitches. * ADDED: Win32 version: exported _PL_get_arg() (non-checking PL_get_arg()). * FIXED: more patches to PL_Q_PASS_EXCEPTION handling of PL_open_query() and PL_call_predicate(). * FIXED: avoid a debugger trap of an exception if the exception is catched in an outer-context and passed over the intermediate foreign-call using PL_Q_PASS_EXCEPTION. Required for XPCE-5. * FIXED: PL_cons_*() to make references in the proper direction. Notably caused problems when constructing a term holding variables for PL_throw(). * ADDED: PL_record(), PL_recorded(), PL_erase() * ADDED: edit(Name) now also finds system-predicates. * FIXED: toplevel spy, listing, etc. no longer trigger the tracer if the predicate doesn't exists. * ADDED: pl.spec, RPM specification-file. Contributed by Tony Nugent. Thanks! * INSTALL: use mkdir -p if available (detected by configure). * FIXED: meta_predicate/1 emulation in library(quintus) to deal with :- meta_predicate Module:Head. * ADDED: goal_expansion/2 and expand_goal/2 to deal with expansion of individual goals. * MODIFIED: _PL_get_xpce_reference() dropped object-qualifier argument, which was needed for Alpha XPCE 5.0.0, but not for subsequent XPCE versions. VERSION 3.1.2 ============= * FIXED: SIO_MAGIC declaration of SWI-Prolog standard streams. * ADDED: Indicate debugger status in prompt. * FIXED: Windows: correctly maintains stream character-count when writing newlines to a text-stream. Reported by Pete Yule. MODIFIED: Calling interface for S__updatefilepos(), making binary foreign code using Sgetc() or Sgetchar() incompatible. Code is compatible at the source-level. This includes XPCE 5.0.0! Using old binary packages raises a [FATAL ERROR message]. * FIXED/MODIFIED: PL_get_chars to convert floats using the feature float_format. Hinted by Pete Yule. * FIXED: Increased tmp buffer-size in PL_get_chars() to deal with printing very large floating point numbers. * FIXED: handling of PL_Q_CATCH_EXCEPTION/PL_Q_PASS_EXCEPTION * FIXED: PL_open_resource() now passes exceptions, instead of catching (and printing) them. Also fixed setting errno to ENOENT. * ADDED: feature(iso, Bool) to select ISO conformance in weird places, such as the ISO standard order of terms which dictates all floats precede all integers. Default is false. * MODIFIED: compare/3 affecting sort, msort, keysort and @= 128. Reported by Lukas Faulstich. * ADDED: convert_time(+TimeStamp, -String) as an interface to the POSIX ctime() function. * MODIFIED: edit/[0,1], ed/[0,1] are replaced by a new extensible dynamic-load library(edit), providing only edit/1. This predicate can be extended to locate any type of `object' and call any editor. See manual for details. * ADDED: module support for DCG expansion, correctly translating : --> as well as --> :. * ADDED: guarding and printing of exceptions during initialisation, making debugging a little easier. * FIXED: PL_register_foreign() to lock up predicates as system predicates when called in `system' mode. * FIXED: passing frame references for the tracer-interception. * MODIFIED: renamed module explain (from library(explain)) into prolog_explain to avoid conflicts with user module names. * FIXED: catch/3 using pointer to non-static local variable. Could cause a crash by jumping into hyper-space. * ADDED: manpage for plrc(1) * DELETED: chpl and its manpage. This command is replaced by plrc(1), manipulating the SWI-Prolog 3.x resource database. * FIXED: Reset gced_size of stacks after an abort to make the garbage collector work properly afterwards. Also fixed detection of trail-garbage for specific (deterministic) callbacks from C. This could result in situations where no trail-garbage at all was detected, leading to trail-stack overflows. * FIXED: Added configure test for sigprocmask. This fixes repeated signals on many Unix platforms (Control-C). * FIXED: Determinism of maplist/checklist predicates. * FIXED: free_variables/2 typo in 3.1.0, causing it to report variables more than once. Thanks to Luc Van Oostenryck. VERSION 3.1.1 ============= * FIXED: catch(Goal, template(Vars), handle(Vars)), i.e. catching exceptions based on patterns and using the variable-bindings in the pattern. * FIXED: Problem in SopenRC()/rc_close() communication, spotted by Tamas Laufer. Could result in "ERROR: Failed to save system resources" message, depending on compiler/and or hardware. * FIXED: online help truncated output. * FIXED: wrong value of lTop returned by PL_next_solution() on deterministic predicates. Can cause a crash. * FIXED: Errorneous ``NOTE: system definition has been overruled ...'' from listing/[0,1]. * FIXED: saving operators using qsave_program/[1,2]. Spotted by Robert van Engelen. * FIXED: added format predicate and arithmetic function status to saved-states. Thanks to Tobias Thelen. * ADDED: current_format_predicate/3 VERSION 3.1.0 ============= * ADDED: PL_put_string_nchars() to register strings using length/ptr * FIXED: bug in the stack-shifter, introduced in 3.0.0 * FIXED: configure option --disable-mapped-stacks * ADDED: configure option --disable-segv-handling * ADDED: Mapping signals (software interrupts) onto Prolog predicates or exceptions. See on_signal/3. * MODIFIED: signal-handling using PL_signal(): the handler can now safely call Prolog. * MODIFIED: PL_throw() now performs a longjmp(), instead of returning failure. PL_raise_exception() replaces the old PL_throw() * FIXED: FreeBSD testing for rlim_t type (configure). Thanks to Colin E. Johnson. * PERFORMANCE: Added indexing for non-tagged numbers (> 16M) * FIXED: current_stream/3 for streams having an alias name. Fix also affects other stream-related predicates returning an aliased stream. * FIXED: added space in write(a+ -1). VERSION 3.0.0 ============= * FIXED: Actually test for GCC-2 feature to handle label-addresses. Should fix compilation on Rapsody, where cc says it is gcc-2, but the gcc extensions are not enabled (by default). * FIXED: Detection of topOfHeap() on m68k linux (and other linux brands), using a patch contributed by Roman Hodek. * FIXED: Garbage collection error, resulting in a false `early reset' in a specific combination on call-back from C to Prolog and choicepoints. With thanks to Lourens van der Meij for reporting and localising the problem. * ADDED: PL_cons_functor_v() to create a functor from a vector of term-references. * FIXED: discontiguous and multifile cause the predicate to be considered `defined'. Thanks to Paulo Moura. * ADDED: prolog_list_goal/1 hook to intercept the 'L' command from the debugger. * FIXED: configure detection of type rlim_t on some platforms. Thanks to Volker Stolz. * MODIFIED: : :- is now compiled differently from :( :- ). The clause is added to :, but is executed in the context of the definition module. This behaviour is compliant with Quintus and SICStus Prolog, and required to deal with the XPCE 5.0 class-compiler. In most cases, this just allows to remove now redundant module specifiers. In the rare cases the old behaviour is required, just but enclose the close in braces. * FIXED: abolish/[1,2] on an imported predicate. * ADDED: Putting `resources' into a saved state. Especially for dealing with XPCE (graphics) resources. See resource/3, qsave_program/[1,2], open_resource/[3,4], plrc(1), PL_open_resource(). * FIXED: Sfread() and Sfwrite() to return proper value on short read/write. * FIXED: Copy-problem in Which() (pl-os.c). Made the problem below appearant. * FIXED: Symbols() to deal with x-only executables (Unix). Thanks to Gernot Salzer (caused a crash). * FIXED: Docs for PL_cons_list(). Thanks to Ivan Karski. * ADDED: PL_cons_functor() the first argument may now also appear in the argument list. * FIXED: putNum()/getNum() format to deal with any value that can be represented in a long. Fixes an assertion failure while booting on some platforms. * FIXED: Quoted write in feature(character_escape, true) is effective to write the atoms such that they can be read back. Spotted by Bernd Werner. * ADDED: Seek/4, Quintus compatible implementation for seeking to an indicated position in a stream. * FIXED: Various traceports to make Prolog exit on reading end-of-file, rather then entering an endless loop. * FIXED: put/[1,2] to raise an exception on IO errors. Patched SIGPIPE handling to clear the buffer of the offending stream, so a subsequent close() on the stream will not cause another SIGPIPE. * MODIFIED: file_directory_name/2 output never contains a trailing /. If no directory is present, the result is '.'. * DELETED: -B command-line switch * DELETED: old save/restore facilities. VERSION 2.9.10 ============== * ADDED: dup_stream/2 to copy stream handles. * ADDED: Allow for specifying stream alias-name to PL_open_stream(), also used by open_null_stream/1, so open_null_stream(null) will make `null' an aliased null-stream. * UPDATED: Some parts of the documentation. * FIXED: Control-C handling on some platforms (notably Solaris 2.5). * ADDED: options close_on_abort and buffer to open/4. * FIXED: write(not (a,b)) ommited the space and wrote not(a,b). Thanks to Stefan Mueller. VERSION 2.9.9 ============= * FIXED: Portability problems for Solaris 2.6. * FIXED: throwing Prolog exceptions on `Broken Pipe' in flush/0 and flush_output/1. * FIXED: detection of limit on datasize on SGI platform. Thanks to Marcello Balduccini. * FIXED: Possibility of a crash in Symbols(), notably affecting embedded systems (at startup). Thanks to Anton Eliens. The 4 bugs below were reported by Luc Van Oostenryck. Thanks. * FIXED: concat_atom/3 if the separator is not an atom. * FIXED: arg(0, Term, Arg) to fail * FIXED: atom_char(abc, X) to raise an instantiation fault if the length of the atom is not 1. Also, return integers in the range [1..255] instead of [-128..127]. * FIXED: -0xff is now read as -255. Not sure if -(255) would not be a better idea!? VERSION 2.9.8 ============= * WIN32: Replaced various C runtime functions by their native Win32 versions. * FIXED: Calling module transparent predicates from the outer foreign context using context module NULL to call in module "user", rather than in the definition module of the predicate. Found by Stephane Berhault. * FIXED: Early switch off the tracer after an abort to avoid tracing the hooks. * ADDED: explain/1 reporting references to undefined predicates (i.e. which clauses reference the undefined predicate). Also explain/1 reporting references to XPCE methods. * FIXED: explain/1 reporting non-existing references to compound terms. VERSION 2.9.7 ============= * FIXED: avoid some warnings to get clean compilation on GCC 2.8.0. * FIXED: detection of discontiguous predicates (avoids false alarm). * ADDED: Predicate definition for (*->)/2, mainly to allow for testing for its existence and avoid redefinition. * ADDED: Options to qsave_program/2 may be specified as Name(Value) or Name = Value. * FIXED: `map' option of qsave_program/2. * FIXED: handling of dynamic predicates import/export by qsave_program/[1,2]. found by Lourens van der Meij. * PORT: fixed pl-load.c for systems supporting the ELF dynamic load functions, but not RTLD_LAZY (FreeBSD?) Lost the name of the guy pointing me to this problem. Thanks anyway! * FIXED: handling of a functor as key for recorded and frieds, found by Lourens van der Meij. * FIXED: current_stream/3 if a current stream refers to a pipe. Found by Robert van Engelen. * FIXED: dereferencing symbolic link of argv[0] to find the `real' symbol file. Reported by Milan Zamazal, where this problem caused a crash when running SWI-Prolog using M-x run-prolog under Emacs. VERSION 2.9.6 ============= * MODIFIED: list_to_set/2 retains the first, rather then the last occurrence of duplicate members to the set. * FIXED: flag/3 using floating-point numbers for machines that cannot address doubles on 4-byte alignment (most RISC processors). * FIXED: foreign-reference handling of exception terms, causing garbage collection problems. Reported by Robert van Engelen. * PORT: improved detection and placement of mmap()-ed stacks (Unix sparse stack-management) with help of Marcello Balduccini. * FIXED: clause/3 to add/remove predicate reference-count while holding a choicepoint to the predicate. Reported by Marcello Balduccini. * ADDED: -c flag to plld to turn it into `plcc', just compiling .c or .cc files. Thanks to Marcello Balduccini. * MODIFIED: write/1 and friends now only insert spaces before and after operators if these are required to be a valid term for read/1. The only exception is ,/2, which is written using a space after the symbol. NOTE: foreign packages including need to be recompiled!!! * FIXED: current_predicate/2 not consider abolished predicates that still exist as `current', so current_predicate(_, Goal), Goal is guaranteed not to raise an exception on Goal. Should fix recent reconsult problems in XPCE. * ADDED: user:message_hook/3 hook for print_message/2 (provisional). * MODIFIED: Hooks installed by PL_initialise_hook() are called *before* the saved-state is loaded, but after the heap is initialised. This implies only foreign predicates may be called from this hook now. * FIXED: testing of write-permissions for the library index for make/0. * MODIFIED: Toplevel queries are now read from user_input, rather than from the current input stream. * ADDED: feature(history, Depth). If 0, no history and no history-prompt are provided. This is the default if feature(readline, true) succeeds. * FIXED: set_feature(Name, Integer) * FIXED: chdir/absolute_file_name problem, reported by Machiel Jansen. Thanks. * FIXED: erase/1 on records referenced by recorded/3 choicepoints. Thanks to Robert van Engelen. * FIXED: Reference direction in recorded/3 (also used by findall/3 and friends). * FIXED: Removed various warnings for SunSoft cc compiler. Fixed one error reported by this compiler. * FIXED: Cite references in online documentation. Modified/Cleaned man/plindex.pl for this. Fixed a few typos. VERSION 2.9.5 ============= * FIXED: dwim_predicate to deal properly with default modules. * FIXED online manual not to use overstrike by default. See manual for details. XPCE requires patched prolog/lib/swi_help.pl to work properly with this version. * FIXED: plld for handling -l correctly in the Unix version, and automatically deleting temporary .exp files in Win32. * FIXED important fix returning address of local variable, found by Jean Daniel Fekete. Thanks. VERSION 2.9.4 ============= * FIXED: Various references to the variable stacks for systems requiring the stack-shifter. Thanks to Michirou Yabuki for reporting. * FIXED: recorded database (and findall/3, bagof/3, setof/3 store) handling of strings. After retrieval, the string's indirect header was incorrect, making unification and equivalence fail. Thanks to Andrew Dadakow for providing me with a simple program illustrating the problem. VERSION 2.9.3 ============= * ADDED: (Simple) support for exceptions in the GUI-tracer. * MODIFIED: PL_extensions array now needs to be explicitely registered using PL_register_extensions() for compatibility with Win32. Documented PL_register_extensions(). * FIXED: print/1 to include the `quoted' option as it used to before 2.9.0. Thanks to Sam Waugh for noting. * NEW: plld is now written in C, and adapted for usage on Windows-NT and Windows '95. The latter is incomplete, but useful for creating embedded Win32 console applications. The old plld is available as plld.sh in the source distribution. * FIXED: PL_register_foreign() now declares the function-pointer as a void * for C++ code, so it may be used with C++. * MODIFIED: tmp_file/2 now returns the canonical filename on Windows platforms (i.e. c:/temp/base, rather then C:\TEMP\base). use prolog_to_os_filename/2 to convert between the two formats. * FIXED: catch/3 for proper continuation if the recovery goal succeeds. * FIXED: definition of ulong on some platforms for the new pl-global.h module. VERSION 2.9.2 ============= * CLEANUP: Removed various unreachable statements reported by the SGI native compiler. * FIXED: Unresolved message for S__fupdatefilepos() using native SGI compiler, which does not emit code for inline functions. * FIXED: diagnosis of `discontiguous' and `redefined' predicates while the predicate is reconsulted while it is running. * FIXED: Posibility of calling alloca(0) in pl-rec.c, spotted by Tamas Laufer. Should fix SCO Unix version. * FIXED: absolute_file_name/3, generation of multiple solutions: avoid regenerating the same solution. Caused make/0 to slow down more and more. * IMPLEMENTATION: Partial preparation for multi-threading. Removed lots of unnecessary global variables and moved most of the remaining ones into three structures defined in the new file pl-global.h. Read-only global data is now declared `const', putting it into shared memory on good machines/compilers. As a result, SWI-Prolog is a little smaller and faster. Still need to get rid of the remaining global variables and need to embrace all heap-operations to prepare them for the use with mutexes. * FIXED: trace-interception calling on fail-port, causing the GUI tracer to crash on some ocasions. * DELETED: Source file pl-dump.c, implementing save/1, restore/1 and save_program/1. These predicates only worked on a few platforms anyway. qsave_program is now the only (and portable) saved-state mechanism. * IMPROVED: Removed limit on number of user-defined arithmetic functions. * IMPROVED: Format ~s accepts both a list of ASCII chars or a string (see string/1) object. Thanks to Peter Ludeman. VERSION 2.9.1 ============= * FIXED: auto-detection of -export-dynamic in favour of -rdynamic (GNU-ld based systems using ELF binary format not supporting -rdynamic, e.g. Solaris using gcc with GNU-ld). Thanks to Volker Weber. * FIXED: mmap configuration issues, with thanks to Daniel Pun. * FIXED: some changes to the Makefile(.in) and configure for portability, by Joel Faedi. * FIXED: wouldBindProcedure(), used by $xr_member, used by the explain facility. Could crash. VERSION 2.9.0 ============= * ADDED/MODIFIED: The interface to PL_open_query() has changed. The debug argument is replaced by a bitwise or'ed flags argument. The values FALSE and TRUE have their familiar meaning, making old code using these constants compatible. Non-zero values other than TRUE (1) will be interpreted different. * DELETED: display/[1,2] and displayq/[1,2]. Added emulation into library(backcomp). * ADDED: ISO/Quintus compliant write_canonical/[1,2]. * FIXED: recorded database bug for very large terms. * ADDED: Lots of exception codes. Roughly, file i/o, external program invocation and arithmetic now use exceptions. * IMPROVED: write/1 and friends now check the return code of the low-level I/O functions and fail with exception on read/write errors. * REMOVED: $print/2. Doesn't appear to be used anywhere. * ADDED: write_term/[2,3], ISO compliant * ADDED: ISO compliant exception handling using catch/3 and throw/1, including a C-interface for these (PL_throw() and PL_exception()) Added exception port to the tracer. * ADDED: abolish/1, ISO compliant. * FIXED: A is "a" (list as abbreviation for a character). VERSION 2.8.7 ============= * FIXED: require/1 to be silent on already defined system predicates. * FIXED: passing ldflags in plld script. * CONFIG: Removed checking for -lelf if the system is not asked to configure old save/1. * CONFIG: Modified test/mmap.c to find out whether we should allocate from the top or base of the heap. Added TOPOFHEAP to config.h. Should fix Irix problems. VERSION 2.8.6 ============= * Included src/pl.1.in (new file, forgotten in the 2.8.5 release) * INSTALL: slightly more careful installation of the manpages and small problem in configure fixed. VERSION 2.8.5 ============= * MAN: Updated manual sources for a couple of recent changes, added support for generation of the help/1 database using new tools for nroff like generation of plain text from a LaTeX document. Generated all three formats of the manual: HTML, PostScript and plain text. * FIXED: Installation of the manual page for correct description of the pl -dump-runtime-variables. * ADDED: For machines using memory-mapped stacks (Linux, SunOs, Solaris, OSF/1 for example), added heap-size switch: -H. Default is 256Mbytes. Size switch now take optional 'm' (Mega), 'k' (Kilo, default) or 'b' (bytes): -L32m specifies 32 Mbytes local stack. * FIXED: print error message if heap allocation above prefect fit schema (>1024 bytes) fails (malloc() returns NULL). All allocation failures now call outOfCore(). VERSION 2.8.4 ============= * FIXED: PL_{get,put,unify}_pointer() mapping of pointer to integer, to ensure all possible pointer values are restored properly. * CLEANUP: Removed various internal unused functions, changed functions to be local that were only called locally. * MODIFIED: Redesign of various parts of the system to get rid of terms living in the permanent heap. This modification allows the permanent heap (where malloc() operates) to grow unlimited (used to be 64 MB). + Records (recorda/3, recorded/3, erase/1) are no longer stored as copies of the global-terms, but instead as a form of compiled code, optimised for copying the object back to the runtime stacks. Records are also used by findall/3, setof/3 and bagof/3, and these predicates have thus been modified too. The interface between the C and Prolog part has changed, making old saved-states worthless. Old QLF files work properly. + Records are also used by the /f goal option of the tracer. The implementation of this has been changed drastically. The result is a lot faster while searching and a bug has been fixed. + loadXRc() in pl-wic.c has been modified not to store longs, doubles and string onto the heap. This is the desired behaviour anyway. + Feature storage changed to use a union type, rather then integers on the heap. + Variable analysis in the compiler now used TAG_ATOM|STG_GLOBAL, like records, to flag the analysed variables. + Temporary variable management in read/1 using the same trick. + Atoms are indexed over a global, resizable, array. GOOD THINGS + makeRef() now simply is makeRefLG(). + Trail() is simplified a lot. + makePtr() (pl-gc.c) no longer deals with heap pointers VERSION 2.8.3 ============= * FIXED: Changed manual to talk about PL_atom_chars(), rather then PL_string_from_atom(). * FIXED: oset_addel/3, thanks to Robert van Engelen for both the report and the patch. * FIXED: string_to_list(X, []). * FIXED: Order and unlinking shared objects. Now, all files are closed before unlinking any shared libraries. Shared libraries are unlinked explicitely only on non-Unix systems. VERSION 2.8.2 ============= * FIXED: GC/tracer for clauses holding string objects at particular places. Reported by Andrew Dadakow. * FIXED: Deleted old pl.mak, and added plwin.mak and plcon.mak for rebuilding the sources on Windows. * FIXED: Typo in the $write_on_* predicates, underlying sformat and swritef, causing a crash on > 1024 characters output. Thanks to Shane P. McCarron. VERSION 2.8.1 ============= * FIXED: DEC Alpha (64-bit): reading integers > 2**31-1. Configuration of mmap based sparse stack allocation to deal with the Alpha. Various warnings removed. Fixed test.pl to be aware of the Alpha where necessary (float-3 test). * FIXED: Garbage collection problem, occurring with a specific combination of call-back from C and choicepoint organisation in the callback environment. * FIXED: Tracer `retry ' (guitracer only) to take care of garbage collected choicepoints. * FIXED: initialisation of style_check defaults to specify singletons, long atoms and discontiguous clauses. NOTE: THIS MAY CAUSE WARNINGS ON OLD CODE. * ADDED: Several predicates for math in library(quintus). * FIXED: abolish/2 on active (running) predicates, not to remove the NEEDSCLAUSE_GC flag, so the clauses are actually removed if the predicates is finished. Thanks to Paulo Moura, author of LogTalk. * FIXED: PL_get_arg() when using -L0 -G0 (maximized stacks). Probably only breaks tracing code under these circumstances. VERSION 2.8.0 ============= * FIXED: `$qlf_info'/3 (always failed). Used by the development environment under construction. * RUNTIME SYSTEM: Made various of the debugger options conditional on whether or not the system is compiled as runtime system. * ADDED: more options to user:prolog_event_hook/1 for better interaction with the GUI tracer: possibility to `watch' a stack-frames end-of-lifetime. * FIXED: writeq('%') to write '%' rather then just %. * FIXED/MODIFIED: subterm_positions option of read to return the positions of possible surrounding braces for a term. Thus, reading (hello) now yields 0-6 rather then 1-5. This notably fixes the 'f' (finish) option in the GUI tracer to properly indicate the succeeded clause. * PORT: Configure detected tcgetattr()/tcsetattr() usage rather then ioctl(), fixing terminal interaction on OSF/1. * PORT: Fix in Makefile to make it work with some broken shells. * PORT: renamed I_POP virtual machine instruction to I_POPF, to avoid a conflict with system headers on some machines. * PORT: Added support for the 64-bit DEC Alpha processor (or, more in general made the code 64-bit clean). Tested on a DEC Alpha using OSF/1 4.0 and the native C-compiler. Should also work on GCC, but the local GCC installation appeared broken. With thanks to Bryan Sorrows for providing me with access to their machine. Exactly while I was working on the port, Martin Ostermann mailed me patches for running on the Alpha under Linux. Thanks for the couple of problems I missed! Remaining problems: can sparse memory management work on OSF/1? Currently, saved states are portable, but the limits on the Alpha are much larger. This should be fixed. Prolog machine words are 64 bits on the Alpha, doubling the stack-sizes and virtually removing all limits. In theory, it would also be possible to use ints (32-bit) for this. I have not checked this. It is not unlikely there are variables defined `int', where they should have been `long', truncating large numbers. * FIXED: globalAlloc() for allocations larger than a page on machines with sparse memory management, not handling stack-overflows as exceptions (Win32). Fixes handling of long string objects on these platforms. * FIXED: (GUI Tracer) Stopped `cut-port' from activating when in `leap' mode. VERSION 2.7.20 ============== * ADDED: Documentation for expand_query/4 and expand_answer/2. * ADDED: call_with_depth_limit/3, to aid theorem provers. * ADDED: features 'unix' and 'windows' for these operating systems. Version 2.7.19 ============== * FIXED: functor(X, name, -1), reported by Robert van Engelen. Thanks. * FIXED: :- format_predicate/2 handling of arguments. * ADDED: external "C" declaractions for SWI-Stream.h, so you can use this in C++ programs now. * FIXED: the function sign/1 for floating point numbers. Version 2.7.18 ============== * ADDED: Directory html for a SWI-Prolog based latex2html translator. Very extensive example of using foreign code. * REMOVED: Lots of unused files from the source-distribution * WIN32: Removed the uxnt.dll library. This library is now a static library linked into libpl.lib, the SWI-Prolog kernel. * FIXED: Handling of -p alias=path:...: order of the arguments doesn't matter anymore and parsing of the path has been fixed. * MODIFIED: load_files/2, `silent' option inherits to loads triggerred from this one. * FIXED: Garbage collector error, causing a crash if the local and global stack together exceed 64 MB. Now, they can each be 64 MB and be allocated at arbitrary positions. * CHANGED: Default editor command is now "", using double instead of single quotes. This fixes problems on Windows platforms. * ADDED: clause_property(+Ref, ?erased), to support the debugger reporting about running modified clauses. * FIXED: current_functor(+Name, +Arity). Reported by Stefan Wimmel. Thanks. Version 2.7.17 ============== * MODIFIED: the `debug' argument to PL_open_query() now really stops the debugger operating inside the called goal, also if an error arrises. * PORT: Sgi/Irix headers configuration and detection of alignment restrictions on doubles. * FIXED: Better operator priority checking, making a :- b :- c illegal syntax, as it should be. Also improved the warning issued. * FIXED: Removes MAX_TERM_NESTING from read.pl, previously limiting the complexity of terms that could be read. The new version of read requires significantly less (C-) stack and can handle much more deeply nested terms. * FIXED: term_to_atom(+Term, -Atom) on machines with dynamic stacks, but no exception based expansion (PC version). * FIXED: Sopenmen() stream functions (was not used before). This is now used by tellString() and toldString(), who now have a different interface. These functions are used by term_to_atom/2, and format/[1-3]. Version 2.7.16 ============== * FIXED: Various minor issues in the Makefiles and configure for generating a runtime version. Error message if the runtime system cannot find its state. * FIXED: Heuristics for making hash-index. Version 2.7.15 ============== * FIXED: Embedding: the kernel now not longer gives up if it cannot find the Prolog home directory. feature(home, Home) will fail if the home could not be located. * FIXED: Configure problems related to -l[n]curses, etc. * FIXED: retractall(Module:Head(+Arg, ...)) (i.e. explicit module and instantiated first argument). * ADDED: atom_prefix(+Atom, +Prefix): test of Prefix is a prefix of Atom. * FIXED: Bug in Unify between non-tagged and tagged integer. * FIXED: Bugs in configure, both improper test of double alignment and improper testing for the cursus libraries. Thanks to Masafumi Nakane. * IMPROVED: Moved source_file/2 to foreign language to exploit the kernel-maintained database for enumerating the predicates loaded from a sourcefile. * MODIFIED: prolog_trace_interception/3 now has 4 arguments. * ADDED: Support for tracing the cut in the source-level debugger. * ADDED: Support for `break-points' to the debugger. * FIXED: Protocol to include the prompt in the protocol. * ADDED: clause_property(ClauseRef, fact). Used by source-level tracer. * ADDED: Various options to prolog_frame_attribute/3 for the source-level tracer. * FIXED: allow for tracing the unify-port of a fact. * ADDED: prolog_frame_attribute(Frame, argument(N), Arg) to read bindings from a stack-frame. * ADDED: Various options to plld, the standalone executable linker. * IMPROVED: (if->then;else) to generate tail-recursion code for the `then' part. * ADDED: $clause_position/3 and prolog_frame_attribute(Frame, pc, PC). First steps for a source-code debugger. * IMPROVED: Clause-representation to delete subclauses member, which proved obsolete using the current system. Added UNIT_CLAUSE flag to the clause's flags to achieve the same support for the decompiler. * FIXED: handling of the stream user_error by other predicates than format/[1-3]. Also, using output from write/2, etc. to unbuffered streams like user_error is now buffered in 256 byte-blocks, but guaranteed to be flushed after the write operation completes, resulting in fewer calls to write() and therefore generally better performance. Version 2.7.14 ============== * FIXED: Win32 shell/1 implementation has changed radically, not using threads anymore. This hopefully fixes shell/1 on all platforms. The old version started a thread to wait for the process, while the main thread continued processing windows messages. The new version loops through PeekMessage, GetExitCodeProcess and Sleep, processing messages and waiting in the same (main) thread. * FIXED: reentrance problem in Sgetc() (low level fetch for character), upsetting the tracer sometimes when using XPCE. * FIXED: current_stream/3 failed to properly enumerate the streams. Thanks to Robert van Engelen. * MODIFIED: ensure_loaded and use_module now load if the file has been changed since it was last loaded, and not only if it was not loaded before. * ADDED: load_files/2 to load files with various options (including silent loading). The undocumented $consult_file/2 has gone! * INSTALL: Win32: nice looking installation procedure, based on the WISE installation expert package. * ADDED: A *-> B ; C (softcut). * FIXED: Random generation for machines that use rand(). Still poor, but then this function is bad. Maybe use our own someday. * ADDED: Win32: console support for variable-pitch fonts and user selection of fonts. * FIXED: =.. X, found by Robert van Engelen. Version 2.7.13 ============== * FIXED: prolog_frame_attribute/3 to include the arguments in the goal. Found by Andreas Schlemminger. * FIXED: listing (clause/2) for predicates holding if->then;else or a;b in their body. Found by Andreas Schlemminger. * FIXED: shell/1 for Windows platforms (waited almost indefinitely before executing the program). * ADDED: plregtry.dll and registry.dll, providing access to the Win32 registry database. * ADDED: setting up a DDE server for better interaction with the Windows 95 shell (direct edit and consult from the explorer). Version 2.7.13 (ALPHA) ====================== * ADDED: mode update for open/[3,4] to write at any location in an existing file. Version 2.7.12 ============== * FIXED: behaviour of the tracer. Notably included missing fail-ports from the trace. Also fixed the box-counts for the profiler. * ADDED: expand_term/2 now first tries term_expansion/2 in the module that is being loaded. After that it tries the module user. * FIXED: Various improvements to the explain facility, notably much better location of predicate cross-references. Version 2.7.11 ============== * MODIFIED: feature(version, Version) and PLVERSION are now numeric. * FIXED: reporting out-of-stack now never calls the Prolog exception handler to avoid a real crash. * ADDED: Syntax for maintaining source-location inside term-expansion. If a term of the form $source_location(File, Line):Clause is found, not the current, but the given location will be recorded with the clause) Version 2.7.10 ============== * PORT: More changes to PL_unify_term() by Franklin Chen. Now really compiles on MkLinux. * FIXED: retract/1 once more. Now tested on all combinations of (non-)unit-clause and with(out) module specifier. Version 2.7.9 ============= * FIXED: interaction between tracer and garbage-collector, sometimes causing an assertion-failure in the garbage collector when tracing. Reported by Lourens van der Meij. * CHANGED: flag/3 now handles full 32-bit integers and double float values. Old version was limited to tagged ints and didn't do floats. * PORT: Rewrote PL_unify_term() to avoid using va_list *. May or may not help. Problem arises on the PowerMac version of Linux when compiling pl-fli.c. Reported by Franklin Chen. * PORT: Portability patches for AIX 3.2/4.1: avoid name-clash with hz and fid_t. Contributed by Kay Roemer. * FIXED: documentation of PL_unify_list() interface function. * FIXED: name/2 to behave correctly in the tracer. This problem may appear with more foreign predicates and maybe requires a more fundamental solution. Reported by Chan Kam Fai. * FIXED: retract/1 on non-unit-clauses. Thanks to Liviu Badea. Version 2.7.8 ============= * Some fixes to the Makefile. No functional change. Version 2.7.7 ============= * DOC: Added documentation for PL_unify_term(), making its specs `official'. * ADDED: PL_query(PL_QUERY_VERSION) to find the version of Prolog running. Used by plwin.exe to display the correct version in the window titlebar. * WIN32 Process creation: added win_exec/2 and changed shell/1 such that shell(' &') behaves as win_exec(, normal). * WIN32 DDE: Added dde_poke/[3,4] to support DDE poke operation required to communicate with the sybase database for Windows. MODIFIED dde_request/3 to return a string object rather then an atom to avoid filling the atom-space. * WIN32: For filenames, ~ is expanded to %home%. When not present, %homedrive%%homepath% is used, which expands to NT's notion of the home directory. Finally, '/' is used as fallback. * MODIFIED: Changed directory structure of make rt-install to be the same as normal installation. * FIXED: Installation on Pentium Pro: bad detection of canonical system type by autoconf's config.sub. Updated configure.in to use autoconf 2.10. * FIXED: Backtracking on floats and large integers appearing in the head. The VM instructions H_FLOAT and H_INTEGERS handling these didn't trail the argument. Bug introduced in 2.7.0. Thanks to Peter Terptra for reporting. Version 2.7.6 ============= * MODIFIED: Added some more support for very deeply nested terms on the last arguments (long lists beeing one of them) by introducing a new compilation schema for such terms. Also modified numbervars/4 to exploit right-recursion of terms. * MODIFIED: Argument-stack default-limit changed from 8 KB to 1 MB for machines with dynamic stacks. 16 KB for others. This limits most of all the depth of terms handled by assert/retract. * FIXED: Emacs-interaction bug using history. Thanks to Dave Moffat. * FIXED: decompilation (retract, listing, etc.) for predicates with 0 arguments. Reported by Dave Moffat. * FIXED: configuration for system where readline requires -lcurses rather then -ltermcap (and the latter is not present). Version 2.7.5 ============= * FIXED: typo in float <-> long conversion problem. * FIXED: plld now passes -D* to the compiler rather then the linker. Version 2.7.4 ============= * FIXED: handling of floating-point conversion to integers on machines raising SIGPFE on l = (long)f when f is out of the long range. Thanks to Sven.Hader@Informatik.TU-Chemnitz.DE (Sven Hader). The problem appears at least on Linux running on a Pentium. * MODIFIED: Added -F file flag to select from multiple initialisation scripts, just like -f file. Old versions only loaded plrc. The new version by default loads .rc. -F none stops loading this file. * FIXED: plld: gave error code 1 (always). Added various flags: -v -help, -pl. Updated manuals * FIXED: PL_next_solution() detection of non-deterministic success (reported deterministic for actually non-deterministic goals). * ADDED: For XPCE users: nice graphical frontend for the online help functions. Working on much better Prolog mode for PceEmacs. * PORTABILITY: Removed void * arithmetic in pl-setup.c, removed a couple of other non-strict-ansi things there. Added configure for alloca(). Reported to compile using IRIX 5.3 native compiler now. * FIXED: Sclose() flushed write-buffer for read-only streams. * ADDED: read_term/[2,3]: reading with various options * FIXED: copy_term/2: handling of combination of ground compound terms and shared variables. * FIXED: PL_next_solution() detection of determistic success. * ADDED: concat_atom/3 for concatenating multiple atoms with a separator. * FIXED: Online manual generation for dynamic/1 and friends. Parser now deletes \verb from summaries. * FIXED: $xr_member (underlying explain/[1,2]) for clauses containing string objects (crashed). Improved various details to explain/[1,2] * MODIFIED: Quoted writing of an invalid float yields '$Infinity' or '$NaN', unquoted Infinity or NaN. Version 2.7.3 ============= * FIXED: ?- expand_term(A,B), reported by Fergus Henderson. * FIXED: cleanup after calling Prolog-defined arithmetic functions (caused a crash when two arithmetic functions are called in the same context). * Renamed PL_reinit_hook() to PL_initialise_hook(), which reflects more the current function. Use this to register the readline interface, so it is available while loading .plrc. Se also pl-extend.c and its public copy stub.c. Version 2.7.2 ============= * ADDED: features `debug_on_error' and `report_error' * ISO: If a predicate has no clauses and is defined either dynamic, multifile or discontiguous, it is considered defined. This used to hold only for dynamic predicates. Version 2.7.1 ============= * FIXED: Signal/readline/abort interfaces for the Win32 versions, so signals are handled correctly again and readline-based input handling works. * FIXED: bug in setup of memory-base pointers, causing all versions to fail who allocate memory higher than 128MB, which includes the win32 version under win32s (Windows 3.1) * FIXED: ar/ranlib configuration (notably for BSD systems, such as SunOs 4.1). * FIXED: do not load readline interface if the input is not a terminal. This bug prevented constructs in shell-scripts such as pl << _EOS_ ... Version 2.7.0 ============= * FIXED: HPUX compilation thanks to Gordon Streeter. * WIN32: The kernel is now in libpl.dll, which comes with two toplevel drivers: plcon.exe for a standard IO version and plwin.exe for the windows based version. New directory embed with the sources of both toplevels. * FIXED: memory leak after assert/retract of code holding floats, 32-bit integers or strings (not lists of char-codes). Also provides more compact code for floats and large integers (both small and large integers require 2 words, doubles 3 words). * IMPROVED: More compact representation of compiled floats, long integers and strings. * MODIFIED: Complete rewrite of the internal datastructures. The aim is to avoid mixing pointers and unsigned longs on the stacks and thus remove the various assumptions on the memory model underlying the prior versions. See pl-data.h for details. * IMPROVED: Lifted the maximum number of variables in a clause from 256 to 65536, maximum arity of predicates from 128 to 1024. Both numbers are fairly arbitrary and can be raised further at the cost of wasting a little more memory. Version 2.6.0 ============= * ADDED: plld and manpage for creating embedded executables. * FIXED: flush output of terminal streams while halting. * ADDED: option stand_alone for qsave_program to create stand-alone executables! * INSTALL: The executables are now installed in $(PLBASE)/bin/$(ARCH), i.e. using a different directory for each platform, so multiple platforms are supported more easily. * MODIFIED: Drastic reorganisation of arithmetic handling: - All arithmetic is now handled using 32-bit longs and 64-bit doubles. - Smaller integers (within the range described by the features min_tagged_integer ... max_tagged_integer) are represented internally as tagged integers. Larger integers and doubles are represented as `indirect data'. - A generic representation for `indirect', covering uniform handling of them by the virtual machine, unify and garbage collector. This deals with strings, doubles and `bignums'. - New interface between the arithmetic functions and the arithmetic predicates (is/2, >/2, etc.) as well as their virtual machine instructions. This new interface is faster. and avoids unnecessary type-conversions. - Augmented/renumbered the virtual machine instructions, making old saved states worthless. - Fixed a couple of functions translating between floats and integers: integer/1, ceil/1, floor/1, float_integer_part/1, truncate/1, etc. for handling large numbers correctly. - Added the feature float_format to define how floats are printed by write/1, print/1, etc. * MODIFIED: Disconnected readline and Win32 I/O window interface to a separate module. This is a necessary precondition to arrive at a modular and embedible Prolog engine for Win32. See pl-rl.c * FIXED: unknown/2 (reporting instantiation fault). Version 2.5.6 ============= * FIXED: ceil/1, floor/1 and integer/1 to handle large floating point numbers correctly. * MODIFIED: write and friends to print floating point numbers using the `%g' format by default, printing large floats as -for example- 3e20. Use format with the ~f option to format floats as you please. * FIXED: on some machines requires to be included. configure now checks for this. * FIXED: .qlf file-magic verification. * FIXED: Some minor portability problems: test for CC supporting -c -o combination, solaris prototypes for random and srandom added, changed system parameter detection for file-table-size and page-size to use sysconf() when available. Compilation is now silent on solaris 2.5, except for a number of `might not be initialised' warnings in pl-wam.c that aren't correct (also, these are not reported by other versions of gcc). Version 2.5.5 ============= * FIXED: Important bug in =@=, also used by bagof/setof, leading to crashes on some structures and failure on structural equal terms on others. * FIXED: Crash in the tracer under some circumstances, reported by Michael Schulz. * FIXED: loading Quick Load Files that do not contain modules. Version 2.5.4 ============= * FIXED: read/1 for reading negative floating point numbers (2.5.x bug), thanks to Bill Jones. * FIXED: read/1, etc. for reading a single variable. Found by Luu Tran. * FIXED: DCG expansion error found by Keith Whitwell. Version 2.5.3 ============= * ADDED: ISO at_end_of_stream/[0,1] and peek_byte/[1,2]. * Fixed and faster nth0/3 and nth1/3 implementations by Martin Jansche. * New pl(1) manual page by Martin Jansche. Thanks. * PORT: Ron Ferguson mailed me a couple of fixes for the NeXT machine, using release 2 of the C-compiler from the standard development system. Thanks. * FIXED: decompilation (listing, retract, etc.) for clauses using the new (2.5.x) A_REAL instruction. * FIXED: \=/2 and recorded/3 for handling shared variables. Found by Joerg Garbers. * ADDED: edit definition for emacsclient(1). * Fixed unify (=/2) for unification of two floats. Reported by Dave Moffat. Version 2.5.2 ============= * FIXED: PL_retry() and friends were lacking from the new SWI-Prolog.h * FIXED: PL_cons_functor() and PL_cons_list(), also fixing variable handling in bagof/setof. Thanks to Khanh Doan for reporting. * ADDED: string_concat/3 with same semantics as concat/3, but unbound will be unified with a string object. * ADDED: rl_read_init_file(+File) and rl_add_history(+Line) for better readline interaction. Added readline.3 to the standard installed manual set. * ADDED: file_name_extension/3 to reason about filename extensions in a machine-independent manner. Fixes Win32 associations if the filename has uppercase extension. Version 2.5.1 (released for Win32 only) ======================================= * FIXED: Stack expansion for some foreign predicates using the local stack as temporary area for machines with exception-based stack-overflow handling that do not provide the address of the segmentation fault to the handler (Win32, Linux). * FIXED: Linux: repeated handling of the sequence Control-C, abort. * FIXED: Crash after the system has ran out of some stacks on machines with exception-based stack-overflow handling and POSIX signals. Solaris, Linux and Win32 are the examples I know of. * FIXED: CVT_NUMBER and CVT_ATOMIC constants in SWI-Prolog.h, breaking name(+Float, -Chars). * FIXED: plus/3 for +, -, + instantiation (2.5.0 introduced typo). * FIXED: prototype declaraction reported by Martin Jansche. Version 2.5.0 ============= * Added features `trace_gc' and `gc'. * Added `pl -arch' to get the architecture identifier easily for installation and makefiles * New implementation of copy_term/2 that shares common compound sub-terms. * Totally new foreign language interface using `term-references' to allow for garbage collection and stack-shifts with active foreign code. Ported all foreign predicates to the new interface. This interface also allows for generating multiple alternatives for a Prolog goal from C. For compatibility with old foreign code, see README.oldforeign. * FIXED: optimised compilation of A is X (i.e. second argument is a variable). * COMPILER: improved compilation of floating-point arithmetic using -O (optimised), avoiding unnecessary copying of floating point numbers to the global stack. **************************************************************** INCOMPATIBLE FOREIGN LANGUAGE INTERFACE **************************************************************** Version 2.1.15 ============== * FIXED: read/1 to push the load context when reading end-of-file, so the following works: term_expansion(end_of_file, end_of_file) :- prolog_load_context(file, Path), format('Finished loading ~w~n', [Path]). * FIXED: abolish/2 on imported procedures. Reported by Peter Barth. Version 2.1.14 ============== * DISTRIBUTION: Removed various out-of-date files from the distribution: Makefile.win, Makefile.dos, etc. * WIN32S: Fixed problem in the garbage collector. * WIN32: Improved cputime for NT ('95 and win32s use the old code). * MANUAL: Martin Jansche has send me patches for the manual, fixing many smaller and bigger mistakes in it. Thanks! * DEBUG: Added stuff for debugging for different memory models on Unix machines with an mmap() that can map memory at the addresses normally used by the target machine. See morecore.c Version 2.1.13 ============== * WIN32: Fixed error reporting of shell/1. * FIXED: added a flush() after completing the user-query. This gives better output for ?- write(hello). * FIXED: file-name conversion cache management. This cache is used by absolute_file_name/3. Version 2.1.12 ============== * Most of these fixed after comments from David Plummer. Thanks. * FIXED: displayq for ','(...) * FIXED: read/1 and friends to handle {}(..) and [](...) correctly. * FIXED: format/[2,3] to be able to write unlimited-length output, provided there are no `pending' ~t's. * COMPAT: absolute_file/3 to accept list of access-modes * MODIFIED: access_file/2 to succeed on write and append mode if the file does not exist, but the directory can be written. * FIXED: unification order in translating grammar --> {goal}. Noted by Andreas Steiner. * FIXED: Temporary-buffer management in Svfprintf() and friends. Version 2.1.11 ============== * FIXED: functor(X, 8, 0) to yield X = 8. * DELETED: library_directory(.). Gives too much problems because the system picks wrong files or directories. Version 2.1.10 ============== * ISO: added compliant open/4 predicate. * Moved all printing of the system (banner, prompt and warnings to use user_error (=stderr) rather than user_output (=stdout), so it becomes easier to use Prolog's standard output. Stderr is unbuffered, several predicates that will output more than one character now use a `temporary buffer' to reduce IO-load. * ISO: Added arithmetic functions: rem/2, ** (= ^), ceiling (= ceil), float/1, float_fractional_part/1, float_integer_part/1, truncate/1, sign/1 and round/1 (= integer/1). * ISO Syntax: Changed quoted atom and string syntax to support character escapes, broken lines, etc. These changes can be switched off using ?- set_feature(character_escapes, false). for backward compatibility. Also, 0b110, 0xa2 and 0o70 (binary, hexadecimal and octal) number representations are now recognised. * ISO: Added features bounded, integer_rounding_function, max_arity. * WIN32: Various changes to the console: use standard colours and font, allow for changing colours. Bind Control-Z to end-of-file (alternative for Control-D, which is still valid). * WIN32: `pl state.qlx' now assumes state.qlx is the result of a qsave_program/[1,2] and automatically loads the state. This allows for associating states with the emulator. Also, pl file.pl will automatically chdir/1 to the directory containing the file and load the file before entering the toplevel. * WIN32: Fixed some filename case problems: expand_file_name/2 now works case-insensitive. Comparing files for sorting is done case insenstive. * WIN32: Command-line breaking now handles "quoted arguments". Only double quotes and no escape (I don't know the Windows'95 escape conventions). * WIN32: Fixed filename completion from console window. * INSTALL: Fixed detection of non-gnu/gnu make * FIXED: use_module/1, etc. to import predicates exported using the export/1 directive instead of the module/2 directive. Version 2.1.9 ============= * FIXED: Updated stack-shifter code for the changed layout of the environment-stack frames. This bug prevented pl-gc.c to compile on machines having no virtual-memory based stack allocation. Version 2.1.8 ============= * ADDED: check in exit code that removes possibly incomplete .qlf and bootfiles if an error occurred while building the file. * FIXED: WIN32 tmp_file/2. This fixes help/1. * FIXED: configure for users of a shell that doesn't export $PWD and the system chooses the install-sh script. Version 2.1.7 ============= * FIXED: management of clause index-table. Old code lead to indefinite growing of these tables with repetative assert/retract * ADDED: Improved dirty-management on clause indexing system to improve the performance on retract from hashed dynamic predicates. * ADDED: absolute_file_name/3: options file_type, file_errors and solutions for compatibility. * Win32: compiled (with small updates) for Win32 * ADDED: Implemented open_null_stream/1 by defining a null-stream in SWI-Prologs stream-i/o package to avoid the /dev/null dependency. * ADDED: Saving current operator declarations with qsave_program/[1,2]. * FIXED: Garbage-collector error. * FIXED: predicate-reference count problem * ADDED: style_check(+dynamic) to report on manipulation of predicates that are active in the interpreter. Version 2.1.6 ============= * INSTALL: installs pl in the SWI-Prolog tree and just creates a link from the binary directory. Makes it easier to move and redistribute the SWI-Prolog binaries. * CHPL.c: fixed conflict for basename() * FIXED: file-searching cache returning alternate answers in different order. Version 2.1.5 ============= * ADDED: notrace(+Goal) to run Goal invisible to the debugger. * ADDED: open_shared_object/3 to be able to pass flags to dlopen(). * CLAUSE INDEXING: version 2.1.5 provides hashing to speed up first argument indexing. Numerous changes had to be made to realise this: Indirection in the clause chain of predicates, implementation of a lazy automatic system to guess the proper way to index a predicate, a new clause-reference count system (avoiding problems with manipulation of `active' predicates. The representation of predicate and clauses has changed in various ways. * INSTALL: Changed various things to the configure options and detection, to the defaults make more sence. Upgraded to autoconf 2.4, fixed for cross-compilation. * PORT: Fixed various things for the Linux/ELF port. Tested on Linux 1.2.13 running libc-5.0.9. Compiled with gcc-2.7.0. * PERFORMANCE: Implemented automatic rehashing of all (previously) fixed-size hash-tables. Prevents performance degradation on very large programs. * FIXED: profile/3 problem (leading to crashes). * FIXED: pl -O bug: trailing of is/2 was not handled properly. Version 2.1.4 ============= * MODIFIED: Changed definition of absolute_file_name/2. Moved absolute_file_name/3 from library(quintus) to a built-in predicate. * ADDED: file_directory_name/2 and file_base_name/2. * ADDED: end_of_file is now passed to term_expansion/2. * DOC: Many updates. * FIXED: read/1 for foo.%comment (i.e. no space between the . and the comment). Note that foo./*comment*/ doesn't work as this will be tokenised as `foo', `./*', `comment', `*/'. * ADDED: lazy recomputation of clause indexing. This notably speeds up loading .qlf and bootfiles. * ADDED: hash_term/2 for advanced indexing of databases. * ADDED: setting file_search_path through the command line using: pl -p mydir=/foo/bar. * FIXED: Semantics of ensure_loaded/1 if the file is already loaded, combined with the module system. See ensure_loaded/1. * FIXED: Grammar rule compiler's handling of non-proper lists in the head or body (lists ending in a variable). Lists of more then one element are now translated into append/3. The following now compiles ok: string([H|T]) --> [H|T]. * MODIFIED: term_to_atom/2 and atom_to_term/3 to fail silently on a syntax error. Both predicates now also accept a string in the place of the atom to parse strings: term_to_atom(X, "foo(bar)") works as expected. * ADDED: `swi' and `foreign' aliases to file_search_path/2. * MODIFIED: Grammar rule translator now uses 'C'/3 instead of '$char'/3 to extract the head. Compatibility. * MODIFIED: at_initialisation/1 is now called at_initialization/1. * INSTALL: Fixed Makefile and configure to be able to build the system for multiple platforms. * ADDED: Infra-structure for making portable saved-states (equivalents of boot files): + initialization/1 (goals to run at initialization) + volatile/1 (predicates for which not to save clauses) + require/1 (define we require this predicate) + autoload/[0,1] (autoload needed things now) + qsave_program/[1,2] (make a quick-loadable state) * ADDED: compound/1 to test for compound terms. * FIXED: compilation of ``foo:Head :- Body'' to be equivalent to foo:(Head :- Body). * FIXED: problem in read/1 and number_chars/2 that may have lead to garbage collection errors. * FIXED: setarg/3 integrated in the trail-system. Removes its choicepoint and ensures data consistency. Version 2.1.3 ============= * ADDED: setarg/3 for extra-logical assignment to arguments of terms. * MODIFIED: PL_new_integer() now returns a floating point value if the argument exceeds SWI-Prolog's integer range. * ADDED: Automatically dumps the top of the runtime stack on floating point exceptions. * FIXED: Trap floating point exceptions for the win32 version. Version 2.1.2 ============= * FIXED: read/1 problem. Try reading just '0'. ... Reported by Daniela Genius. * FIXED: `toplevel' variable expansion system, leading to various strange behaviours in handling queries from the user. It now can also handle cases as: ?- X = 5. ?- X is $X + 1. Version 2.1.1 ============= * MODIFIED: DCG translation of free variables now calls phrase/3, which has been changed slightly to deal with `un-parsing'. Modification is probably not complete, but it fixes some problems encountered by Michael Boehlen. * MODIFIED: keysort/2 is now stable with regard to multiple values on the same key. Makes this predicate compatible with SICStus and Quintus. * FIXED: :- dynamic, :- multifile, :- module_transparent and :- discontiguous to accept Module:Name/Arity, ... * Moved call/[1..] into the compiler. call/[1..6] is removed from library(quintus) as it is now part of the base system. Also fail/0 and true/0 are now handled by virtual machine instructions. * Upgrade to autoconf 2.3, fixed usage of `tr' for Solaris 2.x and with that the configuration of --enable-shared. * FIXED: number_chars/2 and name/2 now handle floating point numbers. * FIXED: interaction between chdir/1 and absolute_file_name/2. * FIXED: format('~*c', [10,45]) (or more in general, providing an argument to ~c to print the character multiple times). Thanks to Michael Boehlen. * FIXED: PrologPrompt() to allow reading standard input from the -g and/or -t goal options. Version 2.1.0 ============== * Added facilities to allow for embedding SWI-Prolog in C applications. * Fixed semantics of the cut in toplevel queries by compiling the query instead of using meta-call. * Fixed bagof(A, member([B, C]), L) to yield L = [B,C] instead of making new variables. * Fixed typo in dde.pl (reported by Thiebaut Moeglin) * Integration of NeXT patches from Thomas Hoppe (hoppet@cs.tu-berlin.de). Probably still not 100% ok, but should be closer now. * Fixed XPCE event dispatching for pl -tty * PL_univg() C-interface function added for supporting XPCE > 4.8.10 with better interface performance. * Fixed operator precedence problem (reported by Dave Moffat) Version 2.0.9 ============= * ADDED: HPUX interface for shared libraries, but a HPUX guru should fix the import/export details (line was too slow to browse to lots of manual pages). * FIXED: pl-incl.h typo (breaks IRIX 5.3 port and propably others) * FIXED: HPUX detection of mmap()'able stacks fixed. * FIXED: generation of include/SWI-Exports, the AIX export declaration file. Version 2.0.8 ============= * FIXED: loading shared objects using dlopen() for solaris 2.x * FIXED: shlib.pl current_foreign_library/2 administration. Version 2.0.7 ============= * FIXED: compilation (boot and .qlf) now donot look for compiled (.qlf) files. * CHANGED: Default goal writing the banner is now in the flag $banner_goal (used by XPCE as a shared library). Version 2.0.6 ============= * CHANGED: retractall/1 implementation is now compatible to Quintus, avoiding the hacky redefinition in library(quintus.pl). The difference is that now the argument will only be matched against the clause-head. on a match the clause will be removed, regardless of its body. Makes no difference for retractall on facts, but does make a difference on clauses with a non-just-true body. retractall/1 is now a deterministic foreign predicate that no longer decompiles the clause body, making it faster too. * FIXED: made .qlf files independent of the directory they where compiled. * FIXED: Path canonisation problem * FIXED: loading .qlf files holding already-defined modules * ADDED: file_search_path file-location system * ADDED: access_file(File, exists) to check for bare existence. * FIXED: Another clear_uninitialised() problem related to if-then-else causing garbage collector and possibly stack-shift errors. As the implementation is now changed radically, this problem should be gone forever ... * FIXED: copy_term/2. Now creates more efficient terms (less references) and no longer creates bad references. Version 2.0.5 ============= * MODIFIED: Replaced libc based stream IO with more general IOSTREAM package. Deleted folding capabilities as just about any IO device has these built-in these days. These changes are to facilate embedding in window-based environments that do not support stdio. See pl-stream.c * FIX: dwim_match/2 for single character mismatch. * ADDED: atom_chars/2, number_chars/2, atom_char/2, various new unix/1 arguments. Version 2.0.4 ============= * MODIFIED: Consult and friends (ensure_loaded, use_module, etc.) no longer change directory to the directory in which the file lives. As a consequence, directives have to use prolog_load_context/2 or source_location/2 to find the context directory of the directive. consult and related directives still load relative to the directory in which the currently loading file lives. * Added prolog_load_context/2 to provide context for directives. Actually moved from library(quintus) to the boot image as the predicate is now necessary. * Added -DO_RUNTIME support to make a version that is more suitable for distribution of products: no profiling, no tracer, no readline and no interrupt handling. Setup using configure --enable-runtime Version 2.0.3 ============= * Fixed: loading qlf files now push the source context while running a directive, so source_location/2 should work while executing a directive from a .qlf file. * Fixed: recognise MAP_ANONYMOUS for configuring mmap() based stacks. * Added feature(dynamic_stacks, Bool) for detection of virtual memory based stack management. * Fixed feature(open_shared_object, Bool) (Michael Kauschke) Version 2.0.2 ============= * Fixed pl [options] -c file ... * Improved VMI implementation for (if -> then ; else), \+ and (a;b). Reduces overhead of these to about 1/3th. * Added VMI support for fast calling of foreign system predicates that are called with only variable arguments (i.e. `test(X) :- integer(X)' is optimised; `test(X) :- integer(3)' is not). Provides big speedup for fail, true, integer/1 (etc.), and many other commonly called foreign predicates. * Support for mmap() using MAP_ANON. Avoids a file-descriptor and hopefully improves portability of dynamic stacks. * Fix for Solaris 2.4 mmap() detection. * Fix: added autoconf test for using asm("nop") in pl-wam.c or use slower but more portable C alternative (fixes RS/6000 version) Version 2.0.1 ============= * FIX in garbage collector of 2.0.0 was only half the story. Should be ok now. Thanks to Thomas Hoppe for supplying me with the error report. * FIX & performance: current_functor/2 with the first argument is instantiated. * Installation: the libraries are now installed as $(prefix)/lib/$(PL)-$(PLVERSION). A possibly existing executable is moved from $(prefix)/bin/$(PL) to $(prefix)/bin/$(PL).old Version 2.0.0 ============= * Added `Quick Load File' compilation support. See qcompile/1 and qload/1. Alpha stage. * FIXED infrequent segmentation violation occurring on machines with dynamic stack management, but whose signal handler is not provided the address of the fault (Linux and Solaris 2 for example). The crash can be in various foreign predicates that use the local stack as scratch area. * Important FIX to the garbage collector. This bug may happen iff a garbage collection is invoked while clauses are active that have \+ or (a -> b ; c) constructs that are not yet active. Generally the problem is reported as an inconsistency in the relocation count. * Fix to virtual machine encoding that applies to versions compiled with gcc 2.x and whose text-space starts at a high address. * Modified absolute_file_name/2 to take specifications of the form absolute_file_name(library('shell.pl'), X). * Various fixes to the new .qlf format and support for compiliation of individual or combined sources into .qlf files. .qlf files may now be loaded as normal sourcefiles instead of only as `boot' file. Version 1.9.6: ============== * Fixed for BIG_ENDIAN machines (Intel, VAX, ...) * Windows version: added dde_execute/2 * Added Quintus compatible foreign-language (C) interface. * Changed .qlf (former .wic) format drastically. The current format gives about 30% shorter files and loads twice as fast. * Changed basic clause representation. VM op-codes are now full machine words, avoiding the need for the `XR' table management and related indirections. Simplifies the instruction set, speedup for compiler, decompiler (retract, clause) and execution (about 10%). Enlarges program-size with about 10%. Version 1.9.5: ============== alpha-2 * Fixed prolog_frame_attribute/3 for key=parent. * Added at_initialisation(+Goal) for initialisation hooks * Fixed tracer problems introduced in 1.9.5-alpla-1. alpha-1 * Moved sourcecode administration from predicate to individual clauses. Purpose: better source-level debugger support, better handling of multifile predicates. * Recompiling files holding clauses for multifile predicates now works properly. The clauses of the latest loaded file will always be the last. * Removing a predicate from a file and recompiling the file now actually removes the definition from the Prolog database, even if you are not using modules. * Added prolog_frame_attribute(Frame, clause, ClauseRef) to get a reference to the currently running clause. * Added clause_property/2 to get the source information from a specific clause. * Compiled state (-c compilation) has changed a little. The system does not load old states. Version 1.9.4. Redefining system-predicates is no longer allowed. This may be overruled using :- redefine_system_predicate(+Head). Fix in Makefile (from Kayvan Sylvan): fixes shell syntax error make install. Give warning on user-files trying to load module `user' or `system' (this is why library(system) could not be loaded). Fixed whereis/1 to find locations of predicates. Fixed trace/[1,2] to avoid low-level errors on bad specifications. Specification now also accept the much more natural ?- trace(append, fail). as a shorthand for [+fail]. Added autoloader handling to ed/1, listing/1, spy/1 and trace/2. Manipulating not-yet-loaded autoload predicates will trap the autoloader. Added hook for help-system, so we provide a decent help-window when running under the XPCE graphical environment. The hook is called show_help_file/2. Fixed rename_file/2 (bug introduced in pl-1.9.2). Fixed versions Windows-specific problems. Added prolog_to_os_filename/2 to convert between internal and external names (DOS/Windows). Integrated the 1.9.4 patches for the Windows version. Fixed to compile on AIX. Fixed compilation on some Solaris version. Version 1.9.3. Fix index/1 problem introduced in 1.9.2. Fix stack-expansion problem in all versions that lack hardware support for stack-expansion. Some cleanup in pl-gc.c to make clean compilation with -Wall and -DO_DEBUG possible. Regenerated common prototype file pl-funcs.h using mkproto tool (and some editing). Version 1.9.2. Configuration is now based on GNU's autoconf. All md-*.h files have been removed from the distribution. $arch/2, $home/1 and $version/1 have been replaced by feature/2. A predicate read_link/3 has been added to read symbolic links. Installation is tested on SunOs 4.1.3, Solaris 2.3 and Linux 1.0.9 with readline 2.0.3. Version 1.9.1. Added: Windows DDE interface, Added Unix/System-V (?) interface to dlopen() and friends to access shared objects dynamically. Version 1.9.0. Incorporation of various ports: md-netbsd.h, md-mswin.h and md-msdos.h. There is a binary distribution for Windows in win-pl.tgz of the main ftp server (swi.psy.uva.nl). The DOS and Windows versions are created using the WATCOM-C/32 toolkit. ======================================================================= Version 1.8.12. Fixed tracer option `f' (fail) used on the exit port of a goal. Thanks to Thomas Hoppe. Version 1.8.8. Fix in the parser to avoid some bad syntax-error messages. Also fixed spurious crashes trying to read bad-syntax-terms of the form ?- atom,. New in the quintus.pl library: initialization/1, random/3, numbervars/3 and absolute_file_name/3. Version 1.8.7 includes the catch/throw-like control structures block(+Label, +Goal, -Rval), fail(+Label), exit(+Label, +Rval) and !(+Label). Also new is explain(+Anything) which will try to tell you a lot of what the system knows about the term you entered. Additions and suggesions are welcome. Also new: library(bim): A partial Prolog-by-BIM (tm) compatibility package by Henk Vandecasteele. Thanks. Further fixes: * Bug in detecting stack-overflow for the PC/linux version. * Handling of SWI_HOME_DIR (fixes installation problem for XPCE/SWI-Prolog). * atom_length/2: give warning (instead of crash) on invalid data-type (e.g. unbound, term). * nth_clause/3: Removed errornous warning when cut-off and fixed returning 0-reference for defined predicates without clauses. Version 1.8.6 defines phrase/[2,3] for accessing grammar rules and fixes name/2 for numbers outside the integer range (yielding a float). A predicate nth_clause/3 is added to provide access to specific clauses of predicates. xmalloc(), xrealloc() are added to fix some problems when linking with gnu-libraries. Version 1.8.5 contains a few fixes for the SunOs-4/gcc-2.5 combination. DONOT USE GCC-2.5.[123] as the optimiser appears broken. gcc-2.5.4 is ok again. Version 1.8.4 fixes =@=/2, contains a more logical form of arg/3, fixes passing empty-string arguments from the Prolog command-line and fixes some things for old non-ansi compilers. There are some extensions to the quintus.pl compatibility library. Version 1.8.3 Fixes some more readline problems having to do with running SWI-Prolog as an inferior process under EMACS. Version 1.8.2 fixes some serious problems in the tracer intoduced by more global changes in 1.8.0. Version 1.8.1 fixes load_foreign for both SunOs 4.1.3 and PC/Linux. Extensive use of the stat(2) system call is reduced with some changes to the file administration. This speeds up loading many small files by an incredible amount, notably when reading over a (slow) network. The manual is regenerated. There are not many changes, but the PostScript files in these archives are totally different as we upgrated LaTeX and dvips. Therefore the patch file **diff-1.8.0-1.8.1** does *not* include the patches to the PostScript manual. Version 1.8.0 includes a stack shifter, enabling dynamic stacks for machines that do not offer hardware support by providing suitable access to the virtual memory management. Fixed a bug in concat/3. expand_file/2 is now sensitive to fileerrors/2 while expanding $var or ~user. More bugfixes to the readline interface. Manual page contributed by Dave Sherrat. RS6000 port no longer uses -lbsd and compiles on gcc. ================================================================ Version 1.7.2 should compile on Solaris 2.2 using gcc 2.4.5. It fixes the usual couple of portability problems, the terminal interface when connected to the XPCE graphics library. It ads line_count to predicate_property to support a future graphical debugging tool. Version 1.7.1 fixes a very serious memory allocation violation in the connection to the readline library. Make sure to update from 1.7.0! Version 1.7.0 contains a version linked with the GNU readline library for bash/tcsh compatible line editing. The library readline is distributed separately and must be installed before installing prolog. The file readline-1.1.tar.gz contains the unmodified GNU sources. librl-1.1.tar.z contains the binaries for PC/Linux. ================================================================ Version 1.6.18 contains a fix to load_foreign/[2,5] for PC/Linux. [Version 1.6.17 has been reinstalled at Jun 1 23:16 with two prototype fixes and a fix to save_program/1 necessary for the RS6000.] Version 1.6.17 fixes some minor installation problems reported for 1.6.16. The online manual has been updated for trace/[1,2]. Callback of undefined Prolog-predicates from C now correctly trap the autoloader. Analysis of the PATH variable to find the Prolog executable has been fixed. Nothing serious if you have a running system! Version 1.6.16 integrates port to 386 System-V Unix made by Eric S. Raymond (esr@snark.thyrsus.com), who also ported the shell scripts to use sh rather than csh. The new predicates trace/1 and trace/2 allow for tracing individual predicates non-interactively. Version 1.6.15 eliminates some compiler limits, fixes a bug in trail-stacks management and provides a much better port for PC/Linux. Requires Linux kernel 99pl7 or later. Version 1.6.14 provides 8 bit character support. All characters in the range 128 ... 255 are treated as lowercase letters. op/3 is fixed to actually delete operators when priority 0 is specified. Version 1.6.13 implements standard order compatible to Quintus and contains a fix of the module system which broke the Quintus.pl replacement of retractall/1. Version 1.6.12 is te result of integrating ports to LINUX, OS/2 and HP/UX with the main-stream (SunOs).