Branch: stable (switch to
development),
SWI-Prolog Changelog from version 8.4.3 to 9.0.4
[Jan 27 2023]
- TEST: Run unsafe thread_wait tests only if
SWIPL_TEST_FAIL_ON_UNLIKELY is set to
y
.
- FIXED: `1Inf` should be invalid syntax.
[Jan 26 2023]
- DOC: Foreign language details. Notable PL_raise_exception().
[Jan 23 2023]
- FIXED: With
float_undefined
set to nan
, 0/0
must return NaN.
[Jan 20 2023]
- FIXED: with_output_to/3 to flush the streams before finishing the
capture.
- ADDED: Sdprintf() and friends to accept the
t
integer size specified
for ptrdiff_t
.
[Jan 19 2023]
[Jan 17 2023]
- FIXED: Windows: string_length/2 did not handle UTF16 surrogate pairs
correctly.
- DOC: Document PL_write_term()
[Jan 16 2023]
- FIXED: Possible deadlock in a transaction commit due to different
ordering in locking L_GENERATION and L_PREDICATE locks.
[Jan 14 2023]
[Jan 13 2023]
- FIXED: Issue#195:
cmpFloatNumbers()
for NaN.
[Jan 12 2023]
- FIXED: Implement A_MPZ and A_MPQ instructions when using LibBF
binding. This fixes using such numbers in expressions compiled with
optimization enabled. Reported by Rick Workman.
[Jan 11 2023]
- FIXED: Issue#1091: optimised compilation of clauses containing big
integers or rational numbers in expressions.
- FIXED: Issue#1092: term_hash/2,4 crashes on Unicode strings.
- ADDED: list_debug_topics/1 to search, only print active topics,
etc. This predicate now uses print_message/2. debugging/0 is hooked
to show the active topics.
- ADDED: debugging/0: allow extensions using
prolog_debug_tools:debugging_hook/0
- DOC: Fixed PL_Q_CATCH_EXCEPTION interaction with the debugger.
- DOC: Reviewed and updated foreign language sections on exception
handling. Thanks to Peter Ludemann for pointing the many parts of
the docs that were unclear or outdated.
[Jan 10 2023]
- DOC: Added some details for PL_exception()
[Jan 5 2023]
- FIXED: Issue#1087: crash on inlined unification against a rational
number.
[Dec 28 2022]
[Dec 19 2022]
- PORT: msys2, add %MINGW_PREFIX%/bin to dll path
- PORT: msys2, do not copy system dlls into home
- ADDED: Prolog flag
msys2
to detect the MSYS2 installation.
[Dec 18 2022]
- PORT: Fix crash in walking the Prolog stack for gcc 12 on arm
32-bit. This is caused by padding added in `struct queryFrame
between
saved_environment and
top_frame`
[Dec 16 2022]
- PORT: Fixed rationalize/1 and
cmpFloatNumbers()
to fail due to
gcc optimization using internal wide float registers rather than
comparing 64 bit doubles. Not entirely sure this is our mistake
or within GCC's claim to work with the extended float registers.
Bottom line is that comparing a double (from memory, so 64 bits) to
the result of a computation may return non-equal even if the extended
float when forced to 64 bits is equal. This problem surfaced in i386
using gcc 12.2.0.
[Dec 15 2022]
[Dec 12 2022]
- FIXED: Initialise Prolog flag
encoding
from locale name. Internal
UTF-8 decoding is typically faster than the C library multibyte
operations.
[Dec 11 2022]
- FIXED: clause/2,3: possible GC crash when dealing with moved
unification. We cannot have references to the local stack and thus
we must allocate the support variable on the global stack.
[Dec 8 2022]
- ENHANCED: If one of the standard streams of a thread has been closed,
rebind the stream to the original process streams. This can happen
if, for example, we create a thread while output is redirected to
some stream. If now this stream is closed the thread ends up with
a closed standard stream.
[Dec 6 2022]
- PORT: Build MacOS bundle using LibBF based big integers. Somehow the
build for the universal binaries covering a large series of MacOS
versions (since 10.14) breaks after uograde to MacOS Ventura when
linking against libGMP. The results are random segfaults, bus errors
and memory corruption.
- PORT: Build MacOS bundle using LibBF based big integers. Somehow the
build for the universal binaries covering a large series of MacOS
versions (since 10.14) breaks after uograde to MacOS Ventura when
linking against libGMP. The results are random segfaults, bus errors
and memory corruption.
[Dec 5 2022]
- FIXED: Possibly crash in breakpoint callback after GC/shift.
- TEST: Make thread signal test behave better under high loads.
[Dec 4 2022]
- PORT: Make C backtraces work on ARM systems that use libunwind or
glibc
backtrace()
.
- FIXED: Error handling if prolog_frame_attribute/3 using
parent_frame
runs out of stack. Careful review of this function after reported
crash on 32 bit arm. Might be due to a stack shift in this code,
but I doubt it and cannot reproduce the issue. Surely the current
code is safer.
- DOC: Document prolog_frame_attribute/2 with
parent_frame(-Next)
- TEST: test may result in another error on 32-bit platforms.
[Dec 2 2022]
[Dec 1 2022]
- FIXED: WASM shell: failure after clearing output.
[Nov 30 2022]
- UPDATE: Merge devel@b70e1737c01220e258830db17ade553164d5d9d1 -
Fixed SSL password hash compatibility - Fixed race condition for
creating functor objects - Fixed data corruption in clause/2 when
decompiling the head - Fixed updating break table when removing a
clause - Updated sweep - Made all sources stricty C11 compatible
(gcc -std=c11 -pedantic)
- FIXED: breakpoint removal when retracting a clause.
- PORT: Provide MSVC alternatives for MinGW runtime support.
- DEBUG: Dump Prolog stack on assertion error.
- PORT: Drop old MSVC
#ifdef
code in favour of <inttypes.h>
on all platforms.
[Nov 29 2022]
- PORT: Strict C11 support for VM instruction argument declaration.
- PORT: Avoid GCC empty struct and named variadic arguments for cpp to
make pl-wam.c compile under strict C11 standard. This does not solve
full portability. pl-codetable.c suffers from related problems.
- PORT: Fixed compilation for Windows after providing the
libswipl
patches
[Nov 28 2022]
- FIXED: Race condition between destroying indexes of thread-local
predicates on thread exit and the clause garbage collector.
- FIXED: Race condition for creating a functor. We must add the
functor to the global functor array before we can declare it valid.
- FIXED: thread_wait/2: race condition in updating threads waiting for
a module.
- FIXED: clause/2: possible error handling H_LIST_FF if there is a GC
between handling the head and tail.
[Nov 27 2022]
- BUILD: Simplify configuration detection in the build environment
by exploiting the
libswipl
flag if it is read-only (and thus
reliable).
[Nov 26 2022]
- ADDED:
swipl --dump-runtime-variables
to provide the name of the
shared object in PLLIBSWIPL
.
- ENHANCED: Set the Prolog flag
libswipl
based on dladdr()
when
possible.
[Nov 25 2022]
- PORT: The C11 standard does not allow for empty structs.
[Nov 24 2022]
- SNAP: CMAKE_INSTALL_LIBDIR seems undefined inside snapcraft, causing
the build to fail.
- SNAP: Latest snapcraft sets LD_LIBRARY_PATH to provide access to the
"parts". We should not consider this a broken environment.
- DOC: Fixed LaTeX issues blocking the generation of the PDF manual.
- TEST: Avoid name conflict between two tests to make test_installation/0
work again.
- ENHANCED: library(main) to delay looking for tspy/1 or gspy/1 until
the option is activated.
- FIXED: Make X11 event dispatching work in single threaded version.
- TEST: Avoid testing stuff that requires threads in the single threaded
version.
- CLEANUP: Do not compile code required for multi-threaded loading in
the single threaded version.
[Nov 23 2022]
- DOC: format/1-3: document behavior of `~0f`.
- CONFIG: Do not install thread libraries for single threaded version.
- MODIFIED: When ISO mode is enabled, unknown options are result in a
domain error. This now also holds if the option argument is a dict.
- MODIFIED: Ssprintf() and Ssnprintf() functions now use UTF-8 encoding
(used to be ISO Latin 1), so they can handle Unicode.
- ENHANCED: Use xref_source/2 for fetching PlDoc comments from loaded
sources. Patch by @swi.
- PORT: Provide backtrace with line numbers on MacOS using
atos
as replacement for addr2line
.
[Nov 21 2022]
[Nov 19 2022]
- PORT: More integer passing problems over vararg functions.
- FIXED: Prolog flag
pid
on some 64 bit platforms.
- PORT: Use CMake to test for <threads.h> support.
- MAINTENANCE: Provide a Prolog flag
asan
when the system is compiled
with AddressSanitizer.
[Nov 16 2022]
- INSTALL: When using
-DSWIPL_INSTALL_IN_LIB
, make sure that the
CMake export files can be relocated.
[Nov 14 2022]
- WASM: Avoid undefined HTMLCollection.
toList()
. Emacs whitespace update
- MODIFIED: pack_install/1 and friends to pass all environment variables
to the tools that may be executed to build the pack.
- PORT: Issue#1070: pack_install/1: Pass
PKG_CONFIG_PATH
to build
tools
[Nov 13 2022]
- FIXED: format/2,3: manage proper arithmetic environment for
expressions.
[Nov 9 2022]
- PORT: Make LibBF code compile for Clang
[Nov 8 2022]
- FIXED: fetch/restore of Mersenne Twister random state. Also reduced
the size of the state.
- MODIFIED: **/2 and ^/2: If the power can be done using rational
arithmetic but the numbers are too big, make the behaviour depend
on
max_rational_size_action
. When float
, try to continue after
float conversion, else raise a resource error.
- FIXED: **/2 and ^/2 overflow checking when computing the power of
two rational numbers.
[Nov 7 2022]
- ENHANCED: Prefer
mpz_sgn()
over mpz_cmp_ui()
to 0.
- ENHANCED: Key generation for bignum and rational clause indexing
[Nov 4 2022]
- ADDED: BF_FTOA_PL_QUIRKS for correct float formatting.
[Nov 3 2022]
- MODIFIED: CMake
target_link_swipl()
now removes the lib
prefix.
- PORT: Updated MacOS dependencies
- FIXED: swipl.cmake outside pack_rebuild/2 context gets linking against
libswipl wrong.
[Oct 30 2022]
- FIXED: Issue#163: -s and -l files were loaded before the argv Prolog
flag is cleaned.
[Oct 26 2022]
- ADDED: prolog_walk_code/1: option
walk_meta_predicates(+Boolean)
to prevent the code walker from considering meta-predicates.
There are few cases where this is interesting, but it was needed
for constructing a s(CASP)
dependency graph.
[Oct 24 2022]
- DOC: Document (part of) the PL_cvt_i_*() functions and improve
documentation for several of the PL_get_*() and PL_get_*_
ex()
functions.
[Oct 22 2022]
- ADDED: PL_get_bool() now also accepts the integers (0,1)
[Oct 21 2022]
- PORT: set RPATH correctly on MacOS for native libs in packages
[Oct 19 2022]
- ADDED: PL_cvt_i_llong() PL_cvt_i_ulong() and PL_cvt_i_bool().
This completes the types supported by these functions.
[Oct 20 2022]
- ADDED: listing/1,2 to also accept a clause reference as entity to list.
[Oct 11 2022]
- INSTALL: control registry view with CPACK_NSIS_ONINIT_REGVIEW
[Oct 18 2022]
- FIXED: Possible crash due to mistake in handling `--home` changes.
[Oct 17 2022]
- FIXED: Issue in recursion checking of print_message/2.
- PORT: Include Emacs interface in MacOS bundle
- MODIFIED: Removed an ancient mechanism for finding the Prolog home
directory from a magic string in the binary. Changed plain
-home
to print the home directory and exit (used to ignore and run).
[Oct 15 2022]
- WASM: Maintain a stack of open queries such that we can detect when
we act on a query that is not the innermost. Currently only prints
to the console.
- WASM: By default load scripts and files into the
user
module.
- PORT: Emscripten does not set
CMAKE_EXECUTABLE_FORMAT
. As all
this is meaningless with statically linked WASM version we do not
set the executable_format
and libswipl
flags
- ADDED: prolog_walk_code/3 option
on_edge
which is similar to
on_trace
, but provide easier to understand source locations.
[Oct 14 2022]
[Oct 12 2022]
- FIXED: Big integer to float (
mpz_to_double()
) to_nearest, half to
even rounding and also a couple of minor cosmetic changes.
[Oct 13 2022]
[Oct 11 2022]
- ADDED: new flags executable_format and libswipl New read-only Prolog
flags determined at swipl compile time. These flags are intended
to allow package sweep to determine if libswipl needs to be loaded
ahead of sweep-module (when executable_format=elf), and if so to
locate libswipl.
[Oct 12 2022]
- WASM: Shell: make edit/1 work to show source of the libraries.
- WASM: Shell: allow collapsing the answers to a query.
- WASM: Enhanced :=/2: get global variables using
eval()
such that
it also works on Node and raise a Prolog exception in case something
goes wrong.
- WASM: Shell: add splitter to allow changing the distribution of the
output and editor.
[Oct 11 2022]
- WASM: make shell demo console output more structured.
[Oct 10 2022]
- WASM: Shell: add examples from the server
- WASM: Added fetch/3 as public function of
library(wasm)
.
- WASM: Cleanup js_script/2 to simply call
_ := eval(String).
This also makes this work in Node.
- WASM: Make Prolog.
call()
and Prolog.forEach()
call by default in the
user
module rather than system.
[Oct 12 2022]
- FIXED: help/1: avoid problems with modules that are also section
labels. @swi.
[Oct 7 2022]
- WASM: Use CodeMirror in shell.html (from CDN such that we do not need
to grow our distribution).
[Oct 9 2022]
- WASM: Make local compilation not use sig_atomic/1 as that breaks
yielding and we have no signals anyway.
- ADDED: Support conditional compilation in boot/init.pl
[Oct 8 2022]
- DOC: updated manual section about GNU Emacs interfaces
- ADDED: flag libswipl_dir holding the installation dir of libswipl
[Oct 7 2022]
- WASM: Extend data transformation in :=/2 and improve documentation.
- FIXED: WASM: await if the promise returns a compound term or list.
- WASM: :=/2 should pass a list as data instead as a call on
'[|]'(h,t)
.
[Oct 6 2022]
- WASM: Documentation updates and LaTeX fixes to the docs.
- WASM: Do not use undocumented interfaces in test/demo.
- WASM: Issue#1052: make output of Prolog.
query()
.once()
easier to
handle.
- FIXED: help/1 for normal built-in predicates (broke after support
for user predicates). Patch by @swi.
[Oct 4 2022]
[Oct 3 2022]
- TEST: Add additional float rounding test cases for various integer
sub-types.
- ENHANCED: New (faster) function for converting bigints (MPZ) to float
Also includes minor adjustments for some
mpz_fdiv
rounding modes.
- DOC: Fixed LaTeX errors
[Sep 23 2022]
- ENHANCED: Replace
mpz_fdiv()
with a version that rounds to nearest.
- CLEANUP: Introduce
mpz_to_double()
[Oct 2 2022]
[Oct 1 2022]
- PORT:
swipl --abi-version
: VM signature hash depended on big/little
endian.
[Sep 28 2022]
- ADDED: PL_atom_mbchars() to extract text from an atom in various
encodings.
- ADDED: PL_cvt_i_[u]
int32()
for consistency.
- PORT: Avoid false alarm warning from gcc on 32-bit Windows.
- PORT: Windows: fixed compilation of the DDE interface after adding
FUNCTOR_error1 to the core system.
[Sep 27 2022]
- FIXED: Instantiation error in cross-referencer.
[Sep 26 2022]
- FIXED: xref_source/1: avoid lazy definition of predicates in
user
by calling predicate_property(user:Goal, ...)
.
- FIXED: prolog_set_IO/3: stderr wrapper interpreted return code from
low-level output wrong. This causes problems if output is connected
to a socket as used by prolog_server/2.
[Sep 24 2022]
- ENHANCED: Make toplevel quit nicely if the I/O streams are in error
state.
- ADDED:
stream_property(S, error(Boolean))
.
[Sep 25 2022]
- PORT: Msys2, fix LibDir for swipl in build env
[Sep 23 2022]
- ADDED: sweep package - integration with GNU Emacs
- FIXED: Windows: directory_files/2 and other directory access for
long paths. Fixed by @mgondan1. Thanks!
- ENHANCED: portray_clause/1: add space after
(?- goal)
.
- WASM: Avoid error on HTMLCollection on node
[Sep 22 2022]
- FIXED: Windows: long file support was broken again.
- FIXED: Handle reexport/1 and reexport/2 properly in multi-file
.qlf files. Reported by @swi.
- DOC: syntax error handling in conditional compilation.
[Sep 21 2022]
- ENHANCED: ^ and ** arithmetic operator optimization for small integer
use cases to avoid relying on GMP. This patch also uses integer
exponentiation when compiled without GMP when possible and handles
all special cases compatible with the GMP based version.
[Sep 22 2022]
- ENHANCED: Use __
builtin_mul_overflow()
when available to do fast
overflow-safe multiplication.
- TEST: Silence syntax error on a rational number when compiled without
rational support.
- MODIFIED: When inside code fragment under conditional compilation
where the code is ignored, do not report syntax errors.
[Sep 21 2022]
- WASM: Added CHAT80 demo.
- FIXED: Prolog.Compound.
toJSON()
- WASM: Avoid dependency on HTMLCollection to run on node.
- MODIFIED: WASM: Prolog.
consult()
now calls load_files/1, allowing it
to handle a mixture of local files, URLs as well as Prolog sources
and .qlf files. The sources are now processed sequentially and
are no longer materialised as files.
- DOC: Improved WASM documentation.
[Sep 16 2022]
- ADD: License to CBG Chords example
[Sep 20 2022]
- ADDED: qcompile/2: option
include(user)
. This option allows for
compiling an application into a single Prolog .qlf file.
- ADDED: load_files/2: option
if(Cond)
is extended with exists
to
silently not load a file if it does not exist.
- FIXED: det/1 was not declared as a proper meta-predicate.
[Sep 19 2022]
- WASM: Allow translation of JavaScript ArrayBuffer into a Prolog
byte-string. This allows extracting binary data from
Response.blob()
and is used by the WASM compilation hook to allow loading `.qlf`
files from URLs.
- BUILD: Allow building with AddressSanitizer on Clang. Based on
patches by Alessandro Bartolucci. Thanks!
- DOC: More WASM documentation.
- ENHANCED: notrace/1: avoid callback through C. This avoids possible
C stack overflows and allows yielding from below notrace/1.
- MODIFIED: WASM: Renamed js_yield/2 to await/2 and js_can_yield/2
to is_async/2.
- FIXED: Possibly dangling tref->trie pointer when shared tabling
creates the same variant table in two threads and disposes one of them.
This hopefully addresses issue#1041. It surely fixes a bug though.
[Sep 18 2022]
- FIXED: Possible corruption of tries. By using
PL_BLOB_UNIQUE
we
good reuse an atom after freeing the trie and creating a new one at
the same address. As we save the symbol anyway, making use of unique
atoms is meaningless here.
[Sep 17 2022]
- WASM: Make '$confirm'/2 hookable and implement it by means of the
browser
confirm()
function.
- WASM: Make URL compilation work on slow connections and connections
that do not provide a modification time through a
HEAD
request.
- FIXED: Exception preservation in undo/1
[Sep 15 2022]
- WASM: Allow compiling from a URL.
- WASM: js_yield/2: if the result is a single JavaScript string, return
it as a Prolog string for reducing garbage.
[Sep 16 2022]
- FIXED: source_file/2 in mode (-,+) never reported any files.
Breaks coverage analysis tool.
- FIXED: on_signal/3 for
SIGINT
called the handler asynchronously.
This should only happen if SIGINT is bound to the debug
handler. Reported by Raivo Laanemets.
[Sep 15 2022]
- WASM: Added is_object/1,2 to test Prolog terms for being a JavaScript
object reference (of some class).
- WASM: Added pseudo function
instanceof()
to expression evaluation.
- WASM: Ported Paul Brown's Tau-Prolog example.
- ADDED:
library(dom)
, providing Tau-Prolog compatible DOM
interaction. Partial implementation.
- WASM: Added Prolog.
load_string()
and Prolog.load_scripts()
- WASM: Typos in docs and mixup of arguments in rational numbers.
[Sep 14 2022]
- WASM: Re-implement sleep/1 using an abortable Promise.
- WASM: Introduce the notion of abortable promises.
- WASM: Wrap js_yield/2 to forward exceptions.
- DOC: Started adding WASM documentation to main manual
- WASM: Added js_can_yield/0.
- WASM: Use a WeakMap rather than additional attributes to get the
reverse
object --> id
mapping
- WASM: Return all objects except for instances of "Object" by reference
rather than as a dict.
- WASM: Print blobs that embed JavaScript objecs as
<js_Class>(Ref)
rather than <js_object>(Ref)
.
- ADDED: js_yield/2 may be passed a promise, causing Prolog to wakeup
when the promise is resolved.
[Sep 13 2022]
- ENHANCED: PL_unify_bool() accepts same atom values as
PL_unify_bool_ex() and PL_get_bool()
[Sep 12 2022]
- ENHANCED: js_yield: get return value as term.
- ENHANCED: js_yield: allow passing a term rather than a string.
- INSTALL: Windows: Copied deleting the Uninstall registry key to the
64 bit section.
[Sep 11 2022]
- WASM: Much restructuring to prolog.js. Add Prolog.
forEach()
and
Prolog.abort()
to remain responsive when running slow queries.
[Sep 12 2022]
- FIXED: Backtracking after a foreign yield.
[Sep 10 2022]
- DOC: remove outdated restriction regarding [] and {} as operators
[Sep 9 2022]
- ENHANCED: colourise_db/3: process asserted bodies
- FIXED: qualify_op/3: recognize [] as an operator.
Use SSU rules.
- CLEANUP: Moved default output routines to the core and Prolog
class. Simpified and documented the shell.html and test.html examples.
- WASM: Simplify starting the WASM version by moving more defaults into
swipl-web.js
.
[Sep 8 2022]
- FIXED: Windows: this registry key is not deleted by Uninstaller.exe
Unistalling swipl at Windows 10 Add/Remove App window should now work
- DOC: Add missing failure return info for more more foreign functions.
- WASM: Use an unbound tag for dicts created from JavaScript objects.
If the class is not "Object", bind the Prolog tag to the JavaScript
class name.
- WASM: Introduce classes for Prolog objects we cannot represent
naturally in JavaScript such as variables, compounds, etc.
- CLEANUP: Large rewrite of WASM
prolog.js
to use ES6 class syntax
for the Prolog class.
- MODIFIED: WASM: representation of rational numbers.
- WASM: Use `-s BIGINT` to exchange Prolog integers up to 64 bits.
Update Prolog.
get_integer()
to return values as JavaScript number when
possible and JavaScript bigint otherwise. Updated Prolog.toProlog()
to convert bigint to a Prolog large integer.
- TEST: Added test for Windows NUL files
[Sep 7 2022]
- FIXED: Issue#153: Windows: can no longer open reserved files such as
nul
. Reported by Paulo Moura.
[Sep 6 2022]
- DOC: Fix typos, clarify return codes and error conditions for many
foreign language interface functions (PL_*()).
[Sep 7 2022]
- FIXED: If creating an atom fails due to invalid representation of the
source text (e.g., invalid UTF-8 sequence) we now raise an exception.
[Sep 6 2022]
- WASM: Using node we by default have no control over the terminal.
Need to find out whether it is possible to make that work.
- TEST: Lower test recursion on systems with limited C stack
- WASM: Disabled IEEE754 tests as float rounding does not appear to be
suported and many WASM float functions are imprecise.
- WASM: Do not support
open(pipe(Command), ...)
as popen()
is a dummy.
- FIXED: transaction/1 in single threaded version.
- ENHANCED: Simplify clause visibility rules with transactions.
- PORT: Windows: install a copy of libstdc++*.dll while building and
add this to the installer if INSTALL_TESTS is active.
[Sep 5 2022]
- PORT: Be more conservative with C stacks on WASM. Fixes dealing with
cyclic terms in assert/1 and friends.
- BUILD: make_library_index/1 to silently ignore errors from
use_foreign_library/1. This works around a dependency issue for
building the INDEX.pl files during build. This is not ideal as in
theory we could do exports conditionally based on what is in the
foreign object. At this moment this does not happen.
- MODIFIED: qsave_program/2 and compilation using
-c
to interpret the
`--emulator=file flag (or emulator(Emulator) option) independently
from the `--stand-alone
option. This allows creating non-stand-alone
executables that use a specific emulator path.
[Sep 4 2022]
- TEST: When using
-DINSTALL_TESTS
, install foreign plugins that
only support testing.
[Sep 3 2022]
- DOC: Describe the design of the Windows file system interaction and
its limitations.
- ENHANCED: Test Windows file identify using the device identifier to
deal with links.
[Sep 2 2022]
- TEST: Added more file name tests.
- FIXED: Windows: turned '$mark_executable'/1 into a dummy as it does
nothing meaningful anyway.
- FIXED: Windows
opendir()
, etc. emulation. Use more efficient file
finding and avoid a possible inifinite loop.
- ENHANCED: expand_file_name/2: provide signal handling while expanding
such that we can interrupt.
[Sep 1 2022]
- FIXED: Windows working directory to use SetCurrentDirectoryW() for
supporting longer path names.
- FIXED: Sprintf() for wide character strings with surrogate pairs.
- FIXED: Sprintf() for NULL char * that have non-ASCII encoding.
- FIXED: Windows implementation of size_file/2 to use
GetFileAttributesExW() because _
wstati64()
cannot handle long file
names.
- ENHANCED: Windows: Use more robust translation to Windows path
names. Support long file names using the
"\\?\"
or "\\?UNC\"
prefix.
- FIXED: Windows
dlopen()
emulation path handling.
[Aug 31 2022]
pairs when needed.
rather than using mbscoll()
. The latter did not work anyway because
the pattern and file names use UTF-8 rather than native multibyte.
- FIXED: existence checking on Windows for expand_file_name/2
- FIXED: Windows: do not canonicalize characters of file names > 0xffff
using towlower()
as this function truncates to 16 bits. Assumes there
are no letters with case above 0xffff.
- FIXED: Windows: translation of
wchar_t
to UTF-8 for surrogate
pairs. Fixes e.g. ?- string_bytes('\U0001f600\U0001f604', L, utf8).
- FIXED: Windows: ensure surrogate pairs to the console streams are in
the same WriteConsoleW() call. This fixes writing Unicode code points >
0xffff to user_error
. The patch also writes output to user_error
in larger chunks. Note that the default Windows console does not handle
surrogate pairs. The Windows Terminal does.
- DOC: Describe poor exceptions from failing file system operations.
[Aug 30 2022]
- FIXED: Actually use overruled PATH_MAX in uxnt.c emulation.
- DOC: rename_file/2: updated docs.
- ADDED: Prolog flag
path_max
to get access to the manimum file name
length on the OS.
[Aug 29 2022]
- FIXED: string_bytes/2 in mode (+,-) for UTF-16 encoding on
Windows. Reported by Matthias Gondan.
[Aug 25 2022]
- PORT: Emscripten updates: Move required settings to Emscripten.cmake
and add support for GMP
[Aug 23 2022]
[Aug 22 2022]
- FIXED: Issue#1025: stream encoding wchar_t not returned as stream
property
[Aug 21 2022]
- FIXED: Issue#1021: engine_next/2 for a next answer when the previous
return was due to a yield crashes.
- FIXED: WASM Issue#1023: sleep/1 no longer worked.
[Aug 20 2022]
- BUILD: Dependency issue for building the library indexes. After
comments and a hint by Matthias Gondan.
- TEST: Avoid more tests that depend on threads in single threaded
version.
- WASM: library(readutil): use shared use_foreign_library/1.
[Aug 19 2022]
- WASM: Include http into wasm version
- WASM: Activate STATIC_EXTENSIONS and include (part of) the clib
package.
- BUILD: Build option
cmake -DSTATIC_EXTENSIONS
which adds selected
extensions (packages) to libswipl. In this scenario dynamic linking
is disabled and use_foreign_library/1 is adjusted to call the already
existing install function of the extension.
[Aug 18 2022]
- WASM: Added calling JavaScript from Prolog, exchange DOM elements
and adding scripts from Prolog.
[Aug 17 2022]
- WASM: Renamed js_call/1 to js_run_script/1 for consistency
- WASM: Avoid the need for a frame in Prolog.
query(String)
.
- WASM: Provide Prolog.
message_to_string()
- WASM: Allow a frame to discard all data
[Aug 11 2022]
- WASM: Many changes to calling Prolog from JavaScript. These patches
work to more high level interaction with Prolog from JavaScript.
This work should be considered experimental.
[Aug 9 2022]
- WASM: Perform UTF-8 decoding on output such that we can write Unicode.
- WASM: Handle sleep/1 using JavaScript
setTimeout()
[Aug 8 2022]
- WASM: Allow _ in file names.
- WASM: Reduce auto-yield frequency and avoid the event loop when < 20ms.
- WASM: Focus on input next/stop when requested.
- WASM: Set default package list to plunit, chr and clpqr
- WASM: Extended shell.html demo. Working asynchronous behavior, command
line history and persistent files in localStorage and manage files.
- WASM: Many extensions to calling Prolog from JavaScript. Added support
for (auto) yielding to achieve asynchronous behaviour in the browser.
[Aug 6 2022]
- ADDED: heartbeat mechanism: by setting the Prolog flag
heartbeat
, the
multifile predicate heartbeat/0 is called every N inferences.
[Aug 8 2022]
- FIXED: PL_yield_address() (foreign yielding) effectively popped one
level of the foreign frame stack.
[Aug 3 2022]
- WASM: Updated instructions in CMAKE.md. "Native friend" is no
longer needed.
- WASM: Pass
-s ALLOW_MEMORY_GROWTH=1
to allow for bigger stacks.
- WASM: libswipl should not be a dynamic library on emscripten
- WASM: Attempt to support threads. Compiles, but doesn't work on
either Firefox or node.
- WASM: Addes js_call/1 to call JavaScript
- WIP: trying to deal with reading.
- WASM: added
ttymode()
to Prolog JavaScript API.
- WASM: Minimal running example.
[Aug 2 2022]
- CLEANUP: Type safety of property enumerators
- CLEANUP: get rid of function pointers without declared arguments.
- WASM: Make init argv default
- WASM: Put file system as /swipl and make this the Prolog home.
- WASM: Avoid absolute path messages when linking swipl-web
[Jul 31 2022]
- FIXED: autoloading: read the module header using operators from the
system module to avoid user operator declarations to cause a failure
reading this.
[Jul 28 2022]
- ENHANCED: Performance tuneup - reduce number of arithmetic operations
for pivot - replace one call to lists:member/2 with memberchk/2
- ENHANCED: Optimize nth1/3 using '$seek_list'/4
- DOC: Add => to the operator table.
- ADDED: PL_get_stream_from_blob()
- PORT: config/win32.h and config/win64.h have been removed.
[Jul 27 2022]
- DOC: Various updates to blob API (notably flags).
[Jul 28 2022]
- FIXED: Issue#1015: Small memory leak
[Jul 27 2022]
- CLEANUP: Windows: move config parameters to common CMake infrastructure
instead of using the dedicated hard-coded values.
- BUILD: Determine architecture from CMAKE_SYSTEM_PROCESSOR and
CMAKE_SYSTEM_NAME rather than their HOST counterparts.
- DOC: setarg/3: point at arg/3.
- FIXED: setarg/3 to unify always when the first argument is a
variable. Abramo Bagnara.
- TEST: Do not run cyrillic file tests if the
text
encoding cannot
represent them.
- TEST: Set UTF-8 encoding.
- DOC: setarg/3 if the designated argument is a variable.
[Jul 20 2022]
- ENHANCED: C version of nth0 to be more consistent with the Prolog
implememtation and allow for interupts.
[Jul 19 2022]
- ENHANCED: performance for nth0/3 in mode (+,+,?)
- PORT: Issue#1009: Avoid conflict between Qt and swipl-win target.
[Jul 16 2022]
- PORT: Suppress uninit warning in msys2 I think this can safely be
initialized to FALSE
[Jul 14 2022]
- FIXED: user_or_explicit autoload mode not working
[Jul 11 2022]
- FIXED: make_library_index/1 to use the
xref
flag while reading the
file header. Avoids unwanted term expansion.
[Jul 10 2022]
- PORT: WASM version: statistics/2
cputime
now actually returns
walltime since the start of Prolog. This allows for basic performance
evaluation on CPU based tasks. WASM does not provide primitives to
access the actual CPU time usage.
- PORT: Make compile again in WASM. Reported by Jos de Roo
[Jul 9 2022]
- FIXED: string_bytes/3 to
ascii
: avoid crash and raise an exception
if the text cannot be represented using ASCII.
- FIXED:
string_codes(+,-,octet)
(crashed on assertion error)
- FIXED: write/1 for strings using UTF-16 encoding (Windows).
[Jul 8 2022]
[Jul 7 2022]
- FIXED: Avoid C-stack overflow in recursive C->Prolog->C calls by
demanding a minimum of 100Kbytes stack before calling Prolog.
[Jul 2 2022]
- FIXED: pack_install/1: if the pack is already installed at an older
version, upgrade it.
- ENHANCED: Make git probe silent on all possible errors.
- FIXED: GIT URLs must be a valid absolute URL to begin with
- FIXED: pack_install/1: version comparison for already installed
versions.
[Jul 1 2022]
[Jun 30 2022]
- MDOIFIED: Fixed various internal recoding issues to ENC_WCHAR.
These changes also ensures canonical text as used for atoms and strings
only contain valid Unicode code points. As a result, passing invalid
strings to Prolog using the foreign API may result in a failure.
- DOC: Unicode and UTF-16 issues.
- MODIFIED: Be consistent about valid character codes. These are the
Unicode code points 0..U+10FFFF, while the range reserved for UTF-16
surrogate pairs is excluded (U+D800..U+DFFF).
- DOC: Base64 encoding issues.
[Jun 29 2022]
- PORT: add_package_path/1 also under Windows This change allows for
a GNU-style directory structure also under Windows.
[Jun 30 2022]
- DOC: Rename section label for the statistics section of the manual to
avoid a clash with the library documentation, hiding statistics/2 docs.
[Jun 29 2022]
- TEST: Avoid surrogates for all encodings
- UTF: Fixed length handling in setenv/2.
[Jun 28 2022]
- PORT: Replace most wint_t by int for character classification purposes
because Windows wint_t is 2 bytes, so we cannot classify anything
> 0xffff
- UTF: atom_concat/3 can now handle UTF-16 sequences.
- UTF: Make PL_cmp_text() and PL_unify_text_range() deal with UTF-16
strings.
- CLEANUP: sub_atom/5: more consistent typing and better reuse of
primitives. This patch fixes handling atoms longer than 2G code points
[Jun 27 2022]
- FIXED: Reading terms from Unicode symbol sequences.
- ADDED: Use UTF-16 for canonical text on Windows. This is a first
step that implements some of the basic handling for creating and
writing atoms with code points > U+FFFF
[Jun 26 2022]
- MODIFIED: Official encoding names for UTF-16. Now also allows
aliases for the IANA names for specifying the encoding (UTF-8,
UTF-16BE, UTF-16LE).
- ENHANCED: Allow reading and writing UTF-16 files.
[Jun 28 2022]
- PORT: MSYS2, add %MINGW_PREFIX%/bin to dll search
[Jun 26 2022]
- MODIFIED: PL_get_char() now returns a domain or representation error if
the code is outside the Unicode range (domain) or cannot be represented
by the system (representation).
- FIXED: built-in option list processing should raise a type error if
the list is cyclic.
[Jun 24 2022]
- FIXED: incr_invalidate_calls/1: succeed if no tabling happened in
the calling thread yet (and thus there is no variant table).
[Jun 23 2022]
- ADDED: Allow floats from other scripts.
- DOC: various Unicode related updates, including handling of non-ASCII
decimal number characters.
[Jun 22 2022]
- MODIFIED: Make the Prolog parser parse decimal numbers in other
scripts to integers.
- ADDED: char_type/2 type
decimal
.
- MODIFIED: Updated character classification for read/1 and friends to
be based on Unicode 14.0.0
- MODIFIED: Updated to Unicode 14.0.0 (from 6.0.0)
- CLEANUP: library(unicode/unicode_data) to avoid conflict with table/1.
[Jun 20 2022]
- MODIFIED: win_add_dll_directory/1: throw exceptions on failure rather
than assuming failure of `AddDllDirectory()` indicates we need to
extend ``%PATH%%`.
- ENHANCED: win_add_dll_directory/2: throw normal Prolog exceptions for
the two common reasons for this predicate to fail: non-existence of
the target or the target not being absolute.
- ENHANCED: building the autoload index now extracts the public
predicates in a more generic way, processing optional #! line,
:- encoding directives and (conditional) exports in the header.
This notably allows for module hedaers like below.
` :- module(m,
[p/1]). :- if(current_prolog_flag(windows,true)). :- export(win_q/2).
:- endif.
`
[Jun 15 2022]
- ENHANCED: PL_record_external() deal with records > 2Gb on 64 bit
platforms.
- FIXED: Issue#114: Windows getenv/2 may return additional garbage
(typically an extra
\u0000
character at the end of variables of
1023 bytes or longer because the 0-byte is not added. Paul Singleton.
[Jun 12 2022]
- FIXED: write_term/2 and friends handling of embrace of operants that
are operators for partial writes.
- FIXED: no space is required between a space and
(
.
[Jun 11 2022]
- FIXED: write_term/2 and friends: do not embrace writing a single atom
if this is an operator and the
priority(Priority)
option is given.
- FIXED: Do not close the standard streams as part of atom-GC.
[Jun 9 2022]
- DOC: Create links for S*() function references
[Jun 8 2022]
- DOC: Started documenting SWI-Stream.h
- FIXED: Sgets() handling of non-0-terminated output from Sfgets().
[Jun 2 2022]
- DOC: ord_intersection/2 is semidet.
- DIST: Fixed rmd160 generation for scripts/update-macports
[Jun 1 2022]
- FIXED: write_term/2 with numbervars and variable_names (#866)
[Jun 2 2022]
- ENHANCED: do not map I/O errors to exceptions when the error occurs as
a result of a close that is initiated from the atom garbage collector.
[Jun 1 2022]
- FIXED: Issue#993: possible deadlock when loading a module. Reported by
Sean Leather.
[May 23 2022]
[May 18 2022]
[May 17 2022]
- DOC: enhance documentation for det/, $/1 and $/0, describing the
exceptions and how trap/1 can be used to make the debugger act quickly.
[May 15 2022]
- ADDED: set_breakpoint_condition/2, providing conditional breakpoints
- MODIFIED: Extend break_hook/6 to break_hook/7 ...
..adding an extra boolean argument
+Debug
denoting whether the
system was in debug mode when the breakpoint was triggered.
- FIXED: explain/1: hide references from called/5
- FIXED: Have breakpoints cleared in the UI when the clause that holds
them is removed during a reload of the file.
[May 14 2022]
- FIXED: breakpoint_property/2: fixed
character_range
property
- ENHANCED: Issue#17: reverse/2 to be deterministic if second argument
is a proper list. Ulrich Neumerkel.
[May 13 2022]
- TEST: Added STO restriction as this test involves rational trees.
[May 12 2022]
- FIXED: Issue#122: dif/2: or-node simplification.
- FIXED: Possible deadlock enumerating predicates from a source file.
[May 10 2022]
- TEST: Updated ^/2 tests. Move float**rat tests to test_ieee754
for rounding mode handling.
- ENHANCED: use
ldexp()
rather than pow()
for multiplying a float with
an integral power of 2. mpz_fdiv()
: replace calls to pow()
function
by ldexp()
- FIXED: rounding of
pow()
(^/2 and **/2) ar_pow()
: Re-implement
float**mpq case
- FIXED: Avoid Unicode quote in library(aggregate) comment
[May 9 2022]
- ADDED: Prolog flag
acg_close_streams
.
- ADDED: Sgcclose() as an extended version of Sclose() that can be
used to avoid deadlocks when closing streams from the atom garbage
collector.
- MODIFIED: PL_blob_data() to return NULL if the blob has been released
and document the consequences thereof.
[Apr 24 2022]
- PORT: Replace MINGW_ROOT by WIN32 I think -municode needs to be defined
on all Windows systems that are currently supported (= several flavors
of MinGW). MINGW_ROOT was not defined on my system, so I would like
to change this to WIN32 to save a cmake command line switch.
[May 6 2022]
- FIXED: LaTeX conflict preventing building the PDF docs
- PORT: Issue#83: "label can only be part of a statement" compiler error.
[May 5 2022]
- ADDED: Prolog flag
vmi_builtin
that controls whether or not built-in
predicates that are defined in the VM are handled in the VM or called
as normal predicates. The latter was previously associated with debug
mode, but has also other purposes, such as in coverage analysis or
when using trace/1.
[May 4 2022]
- ADDED: Low level primitives to collect information about coverage.
This is used by show_coverage/1,2 to achieve only a modest slowdown.
[May 3 2022]
- MODIFIED: delete_file/1 to delete a read-only file on Windows for
compatibility with other platforms.
- MODIFIED: Windows: use GetACP() to detect that the system runs in
UTF-8 mode and set the default encoding accordingly.
[Apr 23 2022]
- FIXED: Several issues to consistently deal with buffer sizes in
os/windows/uxnt.c.
[Apr 27 2022]
- MODIFIED: Floating point rounding now assumes the C correctly
implements floating points functions for the "to nearest" rounding.
It than adds or subtracts one ulp to guarantee that the true value
is between the downward and upward rounded values.
[Apr 21 2022]
- FIXED: Possible race condition importing into a module. Can lead to
termination on a system error.
- PORT: Consistently use PATH_MAX and raise it to 32k on Windows.
[Apr 20 2022]
- CLEANUP: Use POSIX PATH_MAX rather than MAXPATHLEN
- FIXED: Source layout handling for SSU (=>) whose guard is a
conjunction.
- FIXED: Source layout handling for unifications against nested head
variables.
[Apr 19 2022]
- FIXED: Make source layout handling aware that debug/3 and assertion/1
may be removed by the optimizer.
[Apr 17 2022]
- DOC: Many enhancements to the foreign language API docs, notably
wrt. atoms and blobs.
- ADDED: Sopen_iri_or_file() API to allow foreign code to access the
resources.
[Apr 16 2022]
- ADDED: Support repositioning streams on program resources by setting
the buffer size to the size of the resource. This allows the IDE
tools to run on resource files.
[Apr 15 2022]
- FIXED: central resource db handling by opening ``res://` may have
streams closed early during to atom-GC.
- ENHANCED: require/1 to simply import if the target module is already
loaded. Reduces startup time.
[Apr 14 2022]
- ENHANCED: open_resource/2,3: allow opening multiple resources
concurrently.
- FIXED: open/3 and friends on 'res://' paths.
[Apr 13 2022]
[Apr 12 2022]
[Apr 8 2022]
[Apr 7 2022]
- TEST: updated check_installation for PCRE2
- PORT: skip dll in Rtools (only static libs)
- ADDED: open/4 option
newline(Mode)
.
[Apr 6 2022]
- FIXED: read_term/2: memory leak when reading Unicode variable names
and reporting these using the
variable_names(Names)
option.
[Apr 5 2022]
[Apr 4 2022]
[Apr 3 2022]
- FIXED: Windows (swipl-win.exe) clean closing of I/O.
- FIXED: Possible wrong Windows drive letter normalisation.
[Apr 2 2022]
- PORT: msys2, detect libdb-6.0.dll from libdb.a
[Apr 1 2022]
- PORT: Msys2/clang64
- PORT: MSYS2/clang64 the dll name appears several times in the ".a"
file, select the first appearance
- FIXED: PL_retry() and PL_context() to work with all integers.
- FIXED:
swipl-ld
didn't pass -I
for SWI-Prolog.h any more.
[Mar 31 2022]
[Mar 30 2022]
- FIXED: on_signal/3: properly set flags on the signal structure such
that when bound to a predicate the predicate is called synchronously.
Breaks handling SIGTERM in library(http/http_unix_daemon).
- PORT: Sopenmem() to use SIO_NL_POSIX. All internal strings use
POSIX \n to delimit lines. @mgodan1.
[Mar 29 2022]
- FIXED: copy_term/4 to handle cyclic terms for the first argument.
Also proper recovery in case of a memory overflow.
[Mar 28 2022]
- DOC: Enhance docs for trap/1.
- DOC: Start disclaimer on float precision.
[Mar 27 2022]
- FIXED: Added new test files,
- PORT: Work around broken llround in MinGW
- TEST: Added test framework and some initial tests for source code
position and breakpoint management testing.
- DOC: open/3,4
pipe(Command)
limitations.
- TEST: Moved pipe tests to a plunit file.
- PORT: open/3,4 on Windows: use clib
popen()
instead of the broken
emulation in src/os/windows/popen.c
[Mar 26 2022]
- FIXED: Clause position management for
h => X = ..., rest_body
:
the unification is not inlined.
[Mar 25 2022]
- SNAP: Updated snap package dependency for pcre2
[Mar 24 2022]
- FIXED: swipl-ld: access to uninitialized memory
- FIXED: round/1 near +/- max integer.
- DOC: complete library index, move gensym and www_browser library docs
from LaTeX to PlDoc
- FIXED: round/1 function. As discussed on Discourse. Rick Workman.
[Mar 23 2022]
- FIXED: Empty thread queues before deleting them.
- FIXED: Reclaim stored exception when deallocating a stream.
- FIXED: Avoid crash updating the stream admin from blob release handlers
during shutdown.
- MODIFIED: Added flags and more return values to PL_cleanup().
- FIXED: abolish/1 on an imported predicate should decrement the
reference count for the imported predicate.
[Mar 22 2022]
- DEBUG: Tricks for ASAN to find the predicates that have not been
deleted.
- FIXED: current_predicate/1 bug in updating module reference count
that may cause temporary modules not to be destroyed. Notably affects
SWISH.
- DEBUG: Allow for the environment `ASAN_OPTIONS
detect_leaks
1` when
build with ASAN to debug memory leaks and avoid unloading foreign
libraries using dlclose()
.
[Mar 21 2022]
- DOC: Add transpose/2 to the clpfd docs.
- FIXED: Allow using delimited continuations after cleanup/initialise
sequence.
- FIXED: Cleanup cache for tabling ret/N functors
[Mar 20 2022]
- FIXED: Using date and time functions after PL_cleanup().
- CLEANUP: Silence several warnings on systems that remove
assert()
calls.
- FIXED:
bulk
mode for transactions was not actually passed.
- PORT: fixed support for systems that lack file mapping
- FIXED: Single threaded build.
- FIXED: Issue#961: crash in halt after using the graphical debugger,
[Mar 18 2022]
- TEST: Do not load xpce into the basic test suite.
- DOC: PL_cleanup() docs updated for improved functionality.
- TEST: Avoid relying on the
cat
program.
- FIXED: Memory leak reconsulting a file for deleted predicates.
- FIXED: retract in nested transaction of a clause asserted in the
outer transaction to properly reclaim the clause.
- TEST: Avoid deprecated thread_exit/1.
[Mar 17 2022]
- FIXED: Cleaning up locale reference counting and deletion. Could leak
memory.
[Mar 16 2022]
- TEST: Close the temporary toplevel streams
- MODIFIED: set_prolog_IO/3 no longer creates a clone stream if stdout
and stderr are the same stream, but creates an error stream that
writes to the output (and flushes it). This way we can safely close
user_error
.
- FIXED: fast_term_serialized/2: memory leak.
- FIXED: Avoid transaction rollback to be recorded (memory leak).
- FIXED: Ensure deleting table enum object (leaks).
- FIXED: Avoid leaking a trie node on concurrent insert of the same
value.
- ENHANCED: if we created a supervisor that is equal to the existing,
discard the new one. This may happen if multiple threads create
a supervisor. Leaks memory as we cannot safely discard a running
supervisor.
- FIXED: memory leak recliming the IDG for monotonic tabling.
[Mar 15 2022]
[Mar 14 2022]
- FIXED: consistent use of tree pool allocation.
- TEST: Disable some tests under ASAN as they run out of stack.
- FIXED: Reclaim indexes array on reclaiming predicates.
[Mar 13 2022]
- FIXED: Initial atom table was allocated twice. Also set the initial
size for this table to be big enough to load the initial state,
avoiding two rehash operations.
- FIXED: memory leak when destroying a module holding thread-local
predicates.
- CLEANUP: Use one function for deallocating predicate definitions
- FIXED: Reclaim argument admin for destroyed predicates.
[Mar 12 2022]
- CLEANUP: Reclaim "dirty table" and "dewam_table".
- CLEANUP: Moved globally cached dict functors to GD.
- CLEANUP: Reserve global vars for predicates used from C to allow
re-initialization
- FIXED: PL_cleanup(): reset blob admin.
[Mar 15 2022]
- FIXED: Typo on threadutil.pl, harming operation without xpce.
Johan Romme.
[Mar 10 2022]
- ADDED: Make encoding accessible by name using PL_atom_to_encoding()
and PL_encoding_to_atom()
- DOC: tabling
po(Compare)
argument.
[Mar 9 2022]
[Mar 8 2022]
- DOC: refer to pack
debug_adapter
in the GNU Emacs Interface page
- FIXED: dif/2 not firing after unifying with other attributed variables.
- CLEANUP: replace start/endCritical by proper functions to simplify
debugging.
[Mar 7 2022]
- FIXED: call_residue_vars/2: possible spurious reported variables
because the trail entry was removed but the variable was not reclaimed
due to a frozen stack.
[Feb 28 2022]
[Feb 25 2022]
- MODIFIED: fixing SIG_PROLOG_OFFSET at 32, per docs This also introduces
a set of macros to interact with the pending signal mask which should
hopefully ease refactoring if and when we change which signals swipl
supports, like adding support for system signals over 31.
[Feb 24 2022]
- MODIFIED: Do not allow for an comma to appear as an unquoted atom.
- MODIFIED: switching core libswipl code to C11 This allows for a
standards-compatible implementation of the LD macros that is guaranteed
to compile down to a simple reference even at -O0. I've also added
some code that, at least in my testing, makes `print LD` work again
in GDB and any debugger that uses it as a backend.
[Feb 19 2022]
- PORT: adding O_SIGNALS define in config.h This provides a single define
to check if Prolog's signal-handling is enabled, rather than checking
each of HAVE_SIGNAL etc. This also makes the existence and use of
GD->signals.sig_alert
consistent on whether SIG_ALERT is defined.
[Feb 18 2022]
- PORT: Do not depend on SIGINT if signal support is disabled.
[Feb 16 2022]
- PORT: Get optional symbols via weak linking This unifies the tcmalloc
and ptmalloc linking code and also allows systems without
dlsym()
,
like WASM, to expose the malloc-implementation predicates, so long
as the linker is capable of resolving weak symbols.
[Feb 17 2022]
- PORT: Issue#939: TLD_alloc() undefined error on Win32. @mgodan.
- FIXED: Gui tracer for inlined unification with SSU clauses, e.g.
p(X)
, X = aap(N)
=> writeln(N)
.
- FIXED: Allow tracing test predicates that are inlined into the VM.
- FIXED: Make gui tracer handle inlined head unifications.
- FIXED: rule/3 for => rules that have the unification moved into the
head and listing/1 for such SSU clauses.
[Feb 15 2022]
- FIXED: Preproc/build errors Adding a couple GCC builtins to the config
tests, using them to force short-circuiting of _LD_WITH_FALLBACK even
in low-optimization modes (e.g. Clang in DEBUG configuration).
Also adding a few missing-but-used defines to config.h.cmake
(HAVE_BUILTIN_EXPECT, HAVE_THREAD, HAVE_VOLATILE, and HAVE_INLINE)
and fixing an unbalanced #ifdef pair that got added in f3b79d6.
- FIXED: Consider $/0 a breakable instruction. This fixes the debugger
for clauses holding $/0.
- FIXED: Avoid instantiation error on =../2 when analysing clause
positions with incomplete information.
[Feb 14 2022]
- SANDBOX: SWISH issue#147: Allow for copy_term/4.
- FIXED: Allow retry from the body of => rules.
- ENHANCED: Avoid tracing inside spy/1, nospy/1 and related debug
control predicates.
- FIXED: Issue#935: package manager: download location of git archives
- DOC: Remove obsolete reference of break/1 trace port
[Feb 9 2022]
- FIXED: Tracer retry on a parent frame. Notably causes problems if
retrying runs cleanup handlers.
[Feb 4 2022]
- MODIFIED: MacOS SWI-Prolog.app working directory and locale setup.
[Feb 3 2022]
- MODIFIED: MacOS
swipl-win
to start in ~/Documents.
- MODIFIED: MacOS: set LC_CTYPE to UTF-8 if neither LANG nor LC_CTYPE is
set. Also set the
encoding
flag to utf8
if LC_CTYPE
is set to
UTF-8
.
- PORT: Started Apple specific predicates. Adds
apple_current_locale_identifier/1.
- PORT: Fix compilation using clang in debug mode.
[Feb 2 2022]
- FIXED: make/0 to consider a file modified if some indirectly included
file is modified. Used to only consider directly included files.
[Jan 31 2022]
- FIXED: Possible GC crash on a rational number appearing in a clause
head.
[Jan 30 2022]
- FIXED: Indexing issue for assessing possible clauses indexes in SSU
code. Can lead false "No matching clauses" errors.
[Jan 28 2022]
[Jan 27 2022]
- ENHANCED: option/2: verify the Options argument.
- CHECK: Verify that the format/2,3 arguments are a list. Quintus
allowed for not using a list when only a single argument was required.
Paulo Moura.
[Jan 26 2022]
- MODIFIED: Read +digits as a term rather than a number. This changes
also removes the space when writing e.g. +42. Reading +digits as
a number predates the ISO standard and current practice. It was in
SWI-Prolog since version 2.5 ...
- MODIFIED: format/1-3: enforce first argument to be text. Now raises
an exception if the first argument is a number, etc.
- MOFIFIED: format/2:
~@
, running a goal now discards possible
bindings created by the goal. Compatibility with SICStus.
- COMPAT: format/2: a numeric argument to
~s
, e.g., ~3s
truncates
the string to the given number of characters.
- COMPAT: format/2: ~r uses default radix of 8, compatible with SICStus
and GNU-Prolog (used to raise an exception). Paulo Moura.
- FIXED:
set_prolog_flag(threads, Val)
deadlocked. Paulo Moura.
- FIXED: big integers constants in arithmetic expressions under
optimization could be compiled as A_MPQ (rational), resulting in
a crash. Paulo Moura.
[Jan 25 2022]
[Jan 24 2022]
[Jan 22 2022]
- FIXED: call_residue_vars/2: if GC performs early reset on an attvar
it is incorrectly considered residual.
- DOC: Fixed PL_get_dict_key() docs. Matthijs van Otterdijk.
[Jan 21 2022]
- ENHANCED: Use mallinfo2 when available. By @mgodan1.
[Jan 19 2022]
- CLEANUP: Remove code from DCG translation that moves unifications
immediately following the neck of the clause into the head.
Since this optimization is done by the compiler anyway this is no
longer needed. This allows for creating SSU DCG rules on top of the
existing compilation.
[Jan 18 2022]
[Jan 17 2022]
- DOC: Fixed error in CMake build script for the manual.
- DOC: Fixed LaTeX errors.
- FIXED: Another postfix operator issue as a regression to recent fixes
on postfix operator handling. Affects the R interface (reported
by Nicos Angelopoulos for real, but probably rserve_client is also
victim).
[Jan 16 2022]
- DOC: clarify module issues wrt. macro expansion and explain what is
affected by import modules.
- DOC: read_term/2: quasi quotation layout
- TEST: read_term/2 subterm_position option. Contributed by Peter
Ludemann.
[Jan 14 2022]
[Jan 12 2022]
- ENHANCED: If a package is available both globally and locally (per
user), ignore the global one silently rather than with a warning.
- ADDED: pack_install/2: option
global(Boolean)
to explicitly install
a package for the user or globally.
- BUILD: Include debug info with PGO build.
- CMAKE: let Threads use -pthread instead of -lpthread This can link
other needed libraries, and fix building on riscv64.
[Jan 11 2022]
[Jan 10 2022]
[Jan 9 2022]
- TEST: Started a few operator tests
- FIXED: handling postfix operators must reduce the left side before
reducing the postfix operator.
[Jan 8 2022]
- ENHANCED: Issue#24: clause_info/4: reject if term layout returned
by expand_term/4 is bogus. This forces the guitracer to revert
to decompiling.
- FIXED:
arg xf xf
(cascading postfix operators) where the priority
of the first is higher than the second must generate a syntax error
rather than an incorrect term.
[Jan 7 2022]
- DEBUG: Fixed duplicate debug id
- FIXED: print_term/2 handling of postfix operators.
[Jan 6 2022]
- SECURITY: running plain
swipl
loads init.pl
from the current
directory if this file exists. It is not advised to load customisation
files from the current directory. We now only load init.pl when
explicitly called using swipl -f init.pl
while an implicit init
file is only loaded from the user_app_config
path alias.
[Jan 5 2022]
- ENHANCED: library(apply_macros) now expands maplist calls with lists
known at compile time into a sequence of calls if this is safe and
the lists are at most 10 elements long.
- ADDED: copy_term/4 and copy_term_nat/4. These predicates provide a
partial renaming of variables and is used in
s(CASP)
. This patch also
improves out-of-memory handling and adds a test suit for copy_term.
[Jan 4 2022]
[Jan 3 2022]
- FIXED: pack_rebuild/1 if the pack is installed but does not provide
binaries for the current architecture. Nicos Angelopoulos.
- FIXED: SWISH Issue#146: failure to render stacktrace due to failure
of message_to_string/2 on
ansi(Style, Fmt, Arg)
if Arg is not a list.
[Jan 2 2022]
- ADDED: PL_can_yield() to figure out whether the current execution
context allows for yielding control.
[Jan 1 2022]
- DOC: foreign yield interface
[Dec 31 2021]
- ADDED: Allow yield/resume from foreign predicates.
- MODIFIED: Query identifiers now keep track of the engine to which they
are associated. As a result, they are now anonymous pointers rather
than (pointer wide) integers. Does not affect compatibility except
source compatibility when the value is combined with integral types.
- BUILD: Disable MQI if multi-threading is not enabled.
[Dec 27 2021]
- FIXED: print_term/2 from entering a loop. Also fixes unneeded
parenthesis in lists.
- FIXED: finding clauses from a source location could crash on thread
local predicates
[Dec 23 2021]
- FIXED: conjunction/disjunction.
- FIXED: print_term/2: respect write options when computing with of
native output.
- MODIFIED: print_term/2 to get the default right margin from tty_size
if the output is a tty and tty_size/2 succeeds.
- ENHANCED: mkconj/3 and mkdisj/3 to produces a right-grouped term, e.g.
?-
mkconj((a,b),c, Conj)
Conj = (a,b,c)
(was Conj = ((a,b),c)).
- FIXED: We must preserve the pack registration when creating a saved
state to make loading foreign resources work.
- ENHANCED: main/0 to avoid setting up application signal handling and
termination when run interactively.
[Dec 22 2021]
- FIXED: Issue#917: separate S_DYNAMIC and S_MULTIFILE. Jos de Roo.
- ADDED: print_term/2: options
fullstop(Boolean)
and nl(Bool)
. Also lots
of documentation restyling and removed old conditional compilation.
- ENHANCED: print_term/2 to deal with operator expressions that exceed
the line width.
- FIXED: print_term/2: max priority of list elements and compound term
arguments to 999 to force parenthesis.
- FIXED: Issue#917: WAM Table mismatch: wam_table[119(s_static)] ==
wam_table[124(s_multifile)]
[Dec 21 2021]
- SNAP: Reverted to core20 because Qt is broken on core20.
- FIXED: Ensure VMI instruction are on unique addresses. This patch
extends 7bf463db4dcc7b4e27c820ef8fc6f94fd8116720 for the case that
two VMIs jump to the same real implementation.
- SNAP: Trying to switch to core20 base. See
https://github.com/octave-snap/octave-snap/issues/67
[Dec 20 2021]
- PORT: Guarantee two VM instructions are not optimized to use the
same code.
[Dec 19 2021]
- FIXED: Ensure bigints are properly indexed on 32-bit platforms.
- PORT: On MacOS fat executables, both try fat-darwin and the actual
archirecture when searching foreign resources.
- PORT: Set archirecture name of fat packages to
fat
.
- PORT: Support generation of MacOS universal (fat) binaries.
Also updates minimum supported MacOS version to 10.14.
[Dec 18 2021]
- PORT: Dynamically determine actual architecture on MacOS
- PORT: Install openssl.cnf with MacOS dependencies
(scripts/macos-deps.sh)
[Dec 17 2021]
- PORT: By default disable tcmalloc for MacOS as it causes a crash in
setlocale()
for Monterey.
- ADDED: Support '*' to print the most last choicepoint when a toplevel
goal succeeded deterministically.
- ADDED: print_last_choicepoint/0,2.
- ENHANCED: Make explain/1 use the message system and the new terminal
hyperlinks.
- ENHANCED: explain/1: hide system references.
- PORT: Building an apple bundle using Qt6
- PORT: Updated script for MacOS dependencies
- DOC: return type for PL_put_variable(), PL_put_bool() and PL_put_atom()
is
int
.
[Dec 16 2021]
- ENHANCED: ord_subtract/3: use => rules to trap wrong calls and stop
when the list of elements to be subtracted is exhausted.
[Dec 15 2021]
- FIXED: Handle new terminal hyperlink elements in message_to_string/2
- PORT: MacOS to deal with installation directory for libjpeg as
installed by Macports. This patch also disables more Macports and
Homebrew locations if we provide our own dependencies.
[Dec 14 2021]
- BUILD: By default use Macports gcc11 (gcc-mp-11)
- EHNANCED: SICStus datime/2 emulation now supports mode
datime(-When,
+Datime)
.
[Dec 13 2021]
[Dec 11 2021]
- ENHANCED: Use new
url(Location)
message line elements throughout.
- ADDED: Introduce
url(Location)
and url(URL, Label)
message line
elements.
- PORT: Fixed cmake issue for MacOS Homebrew dependencies.
[Dec 10 2021]
[Dec 9 2021]
- ADDED: prolog_choice_attribute/3:
clause
attribute to find the next
candidate clause.
- FIXED: Initial value for the Prolog flat
on_warning
must be print
.
[Dec 8 2021]
- FIXED: Stack trace line-level location when parenthesis are used.
[Dec 6 2021]
[Dec 5 2021]
- DOC: Added the rbtrees, statistics and fastrw libraries to the main
documentation to make them available in help/1.
- DOC: Added library(rbtrees) to main documentation to make it work
in help/1.
[Dec 1 2021]
[Dec 4 2021]
- ADDED: write_term/2: option
quote_non_ascii
. This option is enabled
by default for write_canonical/1.
- ADDED: PL_write_term():
PL_WRT_QUOTE_NON_ASCII
flag
- FIXED: write_canonical/1 to use the
brace_terms
option as false
.
- FIXED: Make write/1 and friends escape characters that the stream
cannot represent.
[Dec 3 2021]
- FIXED: write/1 and friends: we must check that the first character
can be represented by the stream.
- ADDED: Server socket support to SICStus 4
library(sockets)
emulation.
[Dec 2 2021]
- FIXED: If we abort in the tracer from a redo port that is on a foreign
predicate we must discard this (foreign) frame.
[Dec 1 2021]
- ADDED: pack_install/1 to support
pack_version(2).
in pack.pl
.
Version 2 changes the names of the exported environment variables that
control building the pack. This was necessary to avoid conflicts
with build environments. As an incompatible change was required
anyway we took the opportunity to rationalise all the variable names.
[Nov 29 2021]
[Nov 28 2021]
- PORT: First attempt to support MacOs M1 with brew deps in /opt/homebrew
- ENHANCED: library(assoc): partial rewrite to use SSU (=>/2) to generate
errors when called with invalid input.
[Nov 26 2021]
- ENHANCED: Base clause indexing hash for indirect types (strings,
bigints and rationals on the start, end and length if the size exceeds
4 machine words. Without, the time to compute the hash easily becomes
dominant. Found by Rick Workman.
- REFACTOR: Get all index key computation in one place.
[Nov 25 2021]
- ADDED: pack_install/1 and friends: provide an environment variable
PREFIX for installing global objects.
[Nov 24 2021]
- BUILD: Provide more control over the PGO build.
- ADDED: argv_options/3 to process type
number
[Nov 22 2021]
- FIXED: profile/1 involving code executed in a temporary module.
- MODIFIED: This patch modifies
PL_prof_type_t
, the interface to
extend the SWI-Prolog profiler. Foreign code using this may need to
be updated. Most likely only used by xpce.
[Nov 20 2021]
- MODIFIED: Issue#900: Renamed PL_version() to PL_version_info().
Provides a macro for backward (source) compatibility.
- FIXED: Issue#105: dif/2 wrong result. This patch is a major rewrite
for dif/2. Where the previous version contained or nodes that were
considered satisfied based on a count, the new version verifies the
individual unifications of the unifier produced by unifiable/3.
The count fails, both too low and too high, as a result of multiple
unifications in a single unification as well as subterm sharing in
the input terms.
[Nov 18 2021]
- TEST: More dif/2 tests.
- FIXED: dif/2: we should ignore unrelated attributes.
[Nov 17 2021]
- FIXED: Issue#907: failure to fully reclaim clause indexes under
some loads.
[Nov 16 2021]
- CMAKE: Support older CMake versions.
- FIXED: Saved state handling of a dict whose first key value (in the
internal order) and tag are both avoid variables. This patch is less
invasive than 4de9114a76cd44659591296627e999cf1072d744.
[Nov 15 2021]
- FIXED: Saved state handling of a dict whose first key value (in
the internal order) and tag are both avoid variables. Reported by
Matt Lilley.
- TEST: Migrate dif/2 tests to plunit.
- FIXED: dif/2: pending constraints on sharing inside the terms.
[Nov 14 2021]
[Nov 12 2021]
- STYLE: list_void_declarations/0, part of checks after make/0 to list
predicates defined as discontuguous/1 while they have no clauses.
This is, according to ISO, not a bug as such predicates are considered
to be defined.
- FIXED: Be more relaxed about existence of the current predicate
when pushing and popping the compilation context.
[Nov 11 2021]
- ENHANCED: Report failed build steps because no tools was willing to
do the job. Pass
-DCMAKE_BUILD_TYPE=Type
, which may be set from
the options to pack_install/2.
- ENHANCED: Get version info into the Prolog flag. Now uses CMake rather
than a shell script and provides a new Prolog flag
cmake_build_type
.
- FIXED: pack_install/1 install step for make based packages.
- FIXED: Rebuilding GNU-style packages failed due to catching wrong
exception.
[Nov 10 2021]
- FIXED: pack_rebuild/1 for CMake configurations.
- ADDED: A file
<home>/cmake/swipl.cmake
that provides generics to
use CMake for building SWI-Prolog packs.
- DOC: Updated CMake build instructions.
[Nov 8 2021]
- ADDED: pack_install/1: reorganized the code building foreign resources.
This code is now in a new library(build/tools) and uses a plugin
architecture that deals with Conan, CMake and GNU tools (autoconf
etc.). The changes are intended to be fully compatible with the
old system. The build system now supports more tools and provides
mechanisms for structured extensions.
[Nov 10 2021]
[Nov 8 2021]
- EHNACED: pack_rebuild/1,2 for CMake based packages to use `cmake
--build
and
cmake --install` for the build and install steps rather
than calling make
, ninja
, etc. directly. Suggested by Wouter Beek.
- MAINTENANCE: Possible segv in retract/1 when compiled using O_DEBUG.
[Nov 7 2021]
- FIXED: Possible race conditions between the various ways a thread
can be joined.
- FIXED: Do not start a new thread to join garbage collected threads
while shutting down the system.
- MAINTENANCE: On a system error we only go into interactive mode if
both stdin and stderr are connected to a terminal. Otherwise we
print the message, C and Prolog stack and abort.
- MAINTENANCE: Use of guarded C-stack using
sigaltstack()
doesn't go
with ASAN. Results in the error below. Disabled guarding the C
stack when compiling using address sanitizer. ``` =101190
=ERROR:
AddressSanitizer failed to deallocate 0x2000 (8192) bytes at
address 0x6250000b1900 =101190
=AddressSanitizer CHECK failed:
../../../../src/libsanitizer/sanitizer_common/sanitizer_posix.cc:60
"(("unable to unmap" && 0)) != (0)" (0x0, 0x0)
```
[Nov 3 2021]
- FIXED: CMake packs must use environment variables.
- ADDED: Support
ninja
builds when using CMake
- FIXED: pack_install/1,2: If we use CMake for configuration, we should
also build in the CMake directory.
- TEST: Signalled thread may already be dead.
[Nov 2 2021]
- ADDED: pack_install/1,2: provide
pack_install(.)
to add the local
directory to the pack registry and build it. Also add option
link(true)
and rebuild(When)
to provide more fine control over
the build.
- FIXED: pack_install/1,2: do not remove contents if the package
registered as a symbolic link.
- FIXED: memberchk/2 for partial lists where the unbound part is
constrained. Reported on Discourse by Abramo Bagnara.
- BUILD: Avoid GCC-11 warning
[Oct 31 2021]
- ENHANCED: Protect assertz/1 and friends (compiler) against C-stack
overflows.
- ENHANCED: Use
setjmp()
instead of sigsetjmp()
to reduce the overhead
of the C-stack guarding.
- MAINTENANCE: Updated C calltree analysis for CMake build and new
coding style and conventions.
[Oct 30 2021]
- FIXED: Fallback to find a place for packages to install executables.
- FIXED: Hash consistency on pointer sided integers for 64-bit bigendian
machines. Only affects consistency of term_hash/2 over platforms.
- FIXED: Checking that an uncaught exception is caught in an outer
environment, i.e., nested C<->Prolog callback.
[Oct 28 2021]
- FIXED: Make C-stack guarding work in threads.
- ENHANCED: Use C-stack guarding for read/1 and friends.
- FIXED: format/2,3: Term printing using ~[kpqw] did not propagate
exception.
[Oct 27 2021]
- ENHANCED: Handle C-stack overflows gracefully on POSIX targets with
sigaltstack()
.
[Oct 26 2021]
- PORT: Alignment on ppc64el. Better version than
df1f0bf795a16edd313a2a25f0678ce044a4a71d
- ADDED: argv_options/3: allow including longer descriptions as header,
usage and footer in the usage message.
- ADDED: argv_options/3: Allow the user to redefine the bindings for
help. Suggested by @swi.
- PORT: Alignment on ppc64el (Debian). See
https://github.com/SWI-Prolog/issues/issues/104
[Oct 25 2021]
- FIXED:
pl_get_uint64()
for GMP numbers on 32-bit systems.
- ADDED: argv_options/3,4: allow for disjunctive types.
[Oct 24 2021]
[Oct 22 2021]
- ADDED: message_property/2:
tag(Tag)
property to change ERROR
and/or Warning.
- ADDED: print_message/2: Allow message term to text translation to be
language specific.
- ENHANCED: Allow loading library(prolog_debug) if
spy
and/or nospy
are defined as operators.
- FIXED: Do not reclaim memory on termination when we failed to terminate
all threads.
- ENHANCED: Provide a non-polling process termination procedure for
systems that do not have
sem_timedwait()
such as MacOS.
- ENHANCED: Improve performance for process shutdown on POSIX
systems that support
sem_timedwait()
by avoiding a polling loop.
This typically saves 0.1 second on the elapsed time for short lived
executables.
[Oct 21 2021]
- ADDED: Allow
--no-pce
together with -c
(compile) to produce
a state that does not include xpce.
- FIXED: Retract for
retract((a:-true))
. Reported by Fernando
Sáenz-Pérez.
[Oct 20 2021]
[Oct 19 2021]
- ADDED: argv_options/3 to provide a full featured and lightweight
alternative to library(optparse).
- FIXED: format/2 and friends: verify error when emitting rubber.
- ADDED: format/2 and friends: support
~:|
, the colon modifier for
tab stops to insert a newline if the current column already passed
the tab stop.
[Oct 18 2021]
- FIXED: Fixup singleton for cleanup of optspec validation.
[Oct 19 2021]
- FIXED: Issue#896: Claim that memory streams as used by
e.g. open_string/2 are reported as repositionable. Reported by
Matthijs van Otterdijk.
- ENHANCED: Allow 64-bit seek function to work on memory streams.
- ADDED: Allow stream contol functions to return whether the stream
is repositionable.
[Oct 18 2021]
- FIXED: Make optparse:parse_type/3 hook work. Cleanup of optspec
validation.
- MODIFIED: opt_parse/4: if an option is unknown only throw an exception,
i.e., not first print the help message.
- ADDED: opt_parse/4: Allow using a string as
help(Help)
value.
- FIXED: det/1: avoid false non-determinism claim if all relevant
choicepoints are debug choicepoints.
[Oct 14 2021]
- ENHANCED: library(rbtrees): error checks and more test cases.
- FIXED: Predicate access in nested transactions for clauses that are
removed in the parent (or a previous nested) transaction. We must
inspect the affected clauses of all parent transactions. Reported by
Eric Zinda.
[Oct 11 2021]
- FIXED: Answer subsumption tabling case provided by Annie Liu.
- TEST: Tests for new thread_signal/2.
- ADDED: Predicate property
sig_atomic
. Currently only for the
built-in sig_atomic/1.
[Oct 10 2021]
- DOC: Document new thread signal primitives.
- ADDED: thread signal blocking and unblocking.
[Oct 9 2021]
- FIXED: Delay signals in prolog_exception_hook/4.
- MODIFIED: Signal handling no longer backtracks. This implies it may
set global variables.
[Oct 8 2021]
[Oct 10 2021]
- ADDED: sig_atomic/1 to run goals protected from signals. This
predicate used to be available as the undocumented '$sig_atomic'/1.
'$sig_atomic'/1 is now available from
library(backcomp)
.
- ENHANCED: thread_signal/2: reduce the locked section
[Oct 11 2021]
- FIXED: thread_wait/2: return when condition is true before this
predicate is called.
- FIXED: thread_wait/2:
wait_preds
option accepted non-predicate
indicators.
- ADDED: sandbox: call_delays/2 as safe meta predicate
[Oct 6 2021]
- FIXED: Issue#889:
swipl --abi-version
crashed.
[Oct 5 2021]
- ENHANCED: trace/2 to delete that we are tracing this predicate if
the port list is empty.
[Oct 1 2021]
- DOC: Document key
pc
of prolog_choice_attribute/3
- FIXED: 91d73fb8a859c6e0f0d97ff553f96903816bc18c triggers another case
where the falsecount of a node can underflow during re-evaluation.
Bit dubious.
- DOC: LaTeX formatting error
[Sep 30 2021]
- FIXED: possible failure to propagate changes in lazy monotonic
tabling. This happens because answers added during lazy reevaluation
are propagated eagerly, but '$idg_mono_affects_eager'/3 didn't find
dependencies to non-lazy tables.
[Sep 29 2021]
- ADDED: pack_install/1 and friends: pass a prefix flag to CMake or
configure that follows the same conventions as the installed Prolog
system.
- ADDED: dcg_translate_rule/2 is now declared safe for use in sandboxes.
- ADDED: notraceall/0.
[Sep 28 2021]
- ADDED: Allow authors of packs to not have an email address or URL.
[Sep 27 2021]
- ADDED: PL_cvt_i_schar() for explicit signed character handling.
- ENHANCED: dict_options/2 in mode (-,+) to remove duplicate options,
keeping the first.
[Sep 24 2021]
[Sep 23 2021]
[Sep 21 2021]
- ENHANCED: ord_intersection/2 to raise errors of the input is not a
proper powerset.
- FIXED: Possible crash enumerating a trie holding indirect values
against instantiated data. Reported by Eric Zinda.
[Sep 16 2021]
- FIXED: VMI_FUNCTIONS build now works with LDFUNC changes
- FIXED: Issue#883: Decompiler to preserve order of arguments to
optimized +/2 and -/2 functions.
[Sep 15 2021]
- FIXED: Issue#882: Test failure if xpce is not added to the build.
Reported by David Tonhofer.
- BUILD: Make building the docs works if X11 is not included.
[Sep 14 2021]
- FIXED: Completion of lazy monotonic tabling to exclude lazy monotonic
tables without queued dependencies as there is no point in evaluating
these now.
- FIXED: Lazy monotonic tabling detection that a mutual dependent
monotonic dependency network is complete.
[Sep 11 2021]
- FIXED: Allow listing/1 from a temporary module.
[Sep 8 2021]
- ADDED:
customize/edit
command to accept --no-wait
option.
Requires latest xpce package. Can by used with editor plugin for
terminator.
Package RDF
[Sep 6 2022]
Package archive
[Dec 21 2022]
- PORT: Simply use int64_t as older 3.x libarchive versions do not
define la_int64_t. Simply using
int64_t
seems the easiest way out.
[May 9 2022]
- FIXED: Allow an open archive to be garbage collected.
[May 6 2022]
[Apr 16 2022]
- CLEANUP: Removed references to libarchive versions before 3.0.0a -
Version 3.0.0a was released 2008/05/26 - The "seek" functionality
was added 2011/11//18 - The "filter count" functionality was added
2010/02/19 Changed the archive blob from PL_BLOB_NOCOPY to instead
be allocated by PL_unify_blob(), which simplifies cleanup on some
failure situations. Set blob fields to NULL after they have been
freed. Removed unused
free_archive()
[Apr 12 2022]
- TEST: Remove assumptions about the build environment and other details
such that the tests also run in different environments such as the
installed environment.
[Apr 9 2022]
- TEST: Added tests for code snippets in documentation and
check_installation Fixed typos in documentation Added tests that
cause memory leaks and exercise error conditions / failure
Package bdb
[Aug 23 2022]
- PORT: Support static linking
Package chr
[Aug 9 2022]
- WASM: Install generated files in
wasm-preload
Package clib
[Jan 26 2023]
- FIXED: uri_iri/2 to not decode encoding
&=;
in the query string.
[Jan 9 2023]
- FIXED: detach_IO/1: Protect I/O stream against garbage collection.
[Nov 23 2022]
- TEST: Disable tests that require threads on the single threaded
version.
[Sep 26 2022]
- ENHANCED: prolog_server/2: ensure the server thread terminates,
also if the client disappears with an error. Improved docs.
[Sep 5 2022]
- TEST: Synchronize libraries included and tests included. Also includes
library(filesex) into the Emscripten version.
[Sep 4 2022]
- PORT: Windows executable files may not have read access if they are
a reparse point.
[Aug 30 2022]
- FIXED:
relative_file_name(Dir, SameDir, Rel)
to return Rel as `.`
rather than ''
.
[Aug 20 2022]
- TEST: Disable tests that need threads on the single threaded version.
[Aug 19 2022]
- WASM: Re-group plugins to make it easier to select only those that
do not depend on OS features.
- PORT: Replace old K&R declarations
[Jul 7 2022]
- ADDED: library(sched), providing a start at accessing the OS scheduling
primitives.
[Jun 28 2022]
- FIXED: read_line_to_codes/2: avoid line ending with \r if the \n is
found just after a flush. This patch also includes a rewrite of this
predicate and read_stream_to_codes/3 to use UTF-8 as intermediate
representation rather than wchar_t, avoiding the need for UTF-16
surrogate pairs.
Package cpp
[Dec 6 2022]
- FIXED: PlQuery() should resolve the predicate in the target module
if one is provided as well as set the context. This bug breaks
completion in swipl-win.
[Dec 5 2022]
- TEST: Avoid encoding issues when running the tests.
[Dec 4 2022]
- TEST: Fixed PL_scan_options() test for 32-bit platforms.
- TEST: Avoid test_common.pl. Although avoiding duplication is good,
it is not a good idea that when build with -DINSTALL_TESTS, this file
ends up in the public library.
[Dec 3 2022]
- DOC: Fixed LaTeX errors and duplicate labels.
[Dec 2 2022]
- DOC: Add "philosophy" section on classes Remove some obsolete sections
Some cleanup of markup
- ADDED: PlPredicate, PlModule classes, support Pltermv(0) Also removed
some unused parameter defaults and clean up initialization checks.
[Nov 29 2022]
- DOC: fix description of how exceptions work
[Nov 26 2022]
- TEST: Disabled invalid tests on Windows.
[Nov 24 2022]
- DOC: more details about exception handling
[Nov 22 2022]
- TEST: Fixed C interface PL_scan_options() tests.
[Oct 20 2022]
- TEST: Renamed foreign function test module to
test_ffi
. This avoids
a conflict (and confusion) with the ffi pack to run the tests
interactively.
[Oct 18 2022]
- TEST: Added PL_scan_options example
[Oct 10 2022]
- TEST: Avoid dependency on gethostname introduced by the tests.
[Oct 6 2022]
- TEST: Remove .as_string.
c_str()
as this is unsafe.
[Oct 4 2022]
- DOC: Document both version 1 and version 2.
- DOC: Setup for documenting both SWI-cpp.h and SWI-cpp2.h
[Sep 24 2022]
- ENHANCED: added PlTerm::
record()
, PlTerm::write()
, PlTerm_recorded,
PlRewindOnFail(), PlStringBuffers Removed PlTerm::unify_*_check()
Added example code for backtracking predicate that gets info on int
types Fixing integer overloading for win32, MacOS - remove many of the
overloaded methods and instead use names derived from the underlying
SWI-Prolog PL_put_*() and PL_unify*()
[Sep 6 2022]
- DOC: Added a porting section
- PORT: Make SWI-cpp2.h compile on systems where `long int` is 32 bits
(Win64). Patch by Peter Ludemann.
[Sep 5 2022]
- CLEANUP: better reuse of Prolog exceptions.
[Jul 7 2022]
- ENHANCED: Version 2 of C++ interface - removed some implicit
conversions and constructors whose use can cause subtle bugs -
made most conversions and constructors explicit - added subclass
constructors to make Prolog types explicit and avoid some subtle bugs
- added copy constructors, assignment operators - renamed handle_,
ref_ to C_, for simplified "getter/setter" - added PlCheck() for
easier calling of SWI-Prolog.h functions - removed conversion
(cast) operator - added pseudo-exception PlFail for returning
failure from a PREDICATE - also used by the
unify_XXX_ex()
methods -
deprecated assignment operator for term unification - replaced by
unify_XXX()
and unify_XXX_ex()
methods - added some support for
std::string, std::wstring - and additional support for wchar_t -
added some more methods that allow using PlTerm:xxx(...)
instead of
PL_xxx(t.get_term_t()
, ...); also for PlAtom - added PlTerm::type()
,
PlTerm::is_variable()
, etc. methods - moved atom_t handle into private
PlAtom, term_t into private PlTerm - added get_atom_t()
, get_term_t()
-
added verify()
, is_valid()
, reset()
methods - some refactoring, e.g.,
PlTerm::check()
, PlTerm::null - refactored the integer "getters"
to get around problems with C++ built-in conversions and integer
promotion. - refactored comparison methods, added PlTerm::compare()
-
replaced "int" as return type by "bool" in many places - use common
C++ naming practice for class fields (suffixed by "_") - added unit
tests - moved examples from test.cpp to unit tests file (cpp4pl.cpp,
test_cpp.pl) - used C++ initializer lists where possible - added
[[nodiscard]] to many methods - added [[deprecated]] to some methods -
(internal: used a template class to handle some boilerplate)
[Jul 3 2022]
- ADDED: PlTerm casts for bool and uint32_t
Package http
[Jan 27 2023]
- FIXED: `1Inf
->
1.0Inf` syntax.
[Jan 23 2023]
- ENHANCED: More robust restoring of current output after redirection
to the CGI stream.
[Jan 11 2023]
[Jan 9 2023]
- FIXED: Avoid recursion when garbage collecting HTTP sessions under
Redis session management.
- ENHANCED: Do not try to send websocket broadcast messages after
shutdown progressed too far.
[Jan 6 2023]
- ADDED:
library(http_unix_daemon)
to broadcast http(shutdown)
before
calling halt(0)
.
- ENHANCED: http_absolute_uri/2 to use the setting
http:public_scheme
or the port to find the scheme (http
or https
)
[Jan 4 2023]
- ENHANCED: Redis http session plugin to use caching to speedup checking
whether a session is alive.
[Dec 21 2022]
- FIXED: Issue#120: term//2 (term to HTML) rendering of infix terms if
these contain "member" terms with arity 2.
[Dec 7 2022]
- TEST: Avoid using test condition bindings.
[Nov 23 2022]
- CONFIG: Reorganise installation and docs to distinguish core part we
always want, the HTTP client and HTTP server libraries.
[Sep 23 2022]
[Sep 16 2022]
- WASM: Support more the HTML related infrastructure.
- PACKAGE: Include http_quasiquotations.pl and the term_html.pl imported
from the Pengines package into the minimal installation.
[Sep 5 2022]
- TEST: Synchronize installed and tested packages.
[Sep 1 2022]
[Aug 19 2022]
- WASM: Provide a stripped down version for the WASM target, currently
providing the library(http/html_write), the json and stream library.
[Aug 2 2022]
- ADDED: Mime type mappsing from
.data
to
application/octet-stream
.
[Aug 1 2022]
- ADDED: MIME type rules: added .wasm -> application/wasm.
[Jul 10 2022]
[Jul 8 2022]
Package jpl
[Jul 18 2022]
- TEST: simplify & tidy unit tests Tidier, simpler JUnit tests, removing
dead code and duplicated stuff, with reduced noise from succeeding
tests (still available via REPORT flag, but now quieter by default).
- ENHANCED: non-recursive Term.getSubsts reimplementation This
fixes another term-depth-limited issue with JPL's public API by
reimplementing Term.
getSubsts()
non-recursively
[Jul 5 2022]
- ENHANCED: Non-recursive Term.getTerm reimplementation Replaces the
original recursive implementation of Term.
getTerm()
etc. (which runs
out of JVM stack for e.g. lists of more than a few thousand members)
with a depth-unlimited non-recursive version (see Term.getLoop)
and adds a couple of JUnit tests
[Jul 3 2022]
- ENHANCED: Non-recursive Term.put reimplementation Replaces the original
recursive implementation of Term.
put()
etc. (which runs out of JVM
stack for e.g. lists of more than a few thousand members) with a
depth-unlimited non-recursive version (see Term.putLoop) and adds a
couple of JUnit tests
[Jun 22 2022]
- TEST: Cleanup and enhancements.
Package ltx2htm
[Sep 18 2022]
[Aug 23 2022]
- PORT: Allow for static linking
Package mqi
[Dec 12 2022]
- TEST: Avoid recorsive Python exception
[Sep 2 2022]
- DOC: hard links to swipl manual
- DOC: hard links to swipl manual the "section references" do not get
connected properly
Package odbc
[Dec 18 2022]
- PORT: More odbc type work around. As we do not use long [long] int
sizes or availability, just leave them undefined and let unixODBC do
its magic.
- PORT: Include patch from Debian for some 32-bit systems. Some versions
of sql.h depend on
HAVE_LONG_LONG
. Our code does not use any of
the properties for `long int`.
[Nov 23 2022]
- PORT: Allow compiling in single threaded mode.
Package pcre
[May 24 2022]
- TEST: Add Unicode>0xffff test
[Apr 6 2022]
- TESTS: Fixed tests to work on systems without pcre2 jit
[Apr 5 2022]
- DEBUG: Removed debugging prints. The print statement in the
pcre_release()
function is unsave as during proces cleanup the pattern
may vanish before the regular expression.
- FIXED: Make comparison and printing the blob work for Unicode patterns.
[Mar 29 2022]
- ENHANCED: re_config/1 backtracks through all possible values
re_config/1 fails if an invalid otption is given instead of throwing
an error fixed some PCRE1 vs PCRE2 documentation for re_config/1 added
a test to check that re_config/1's documentation is a complete list
comparison now uses the pattern; blob-write also shows pattern fix
bug in
compare_pcres()
that incorrectly resulted in equality
[Mar 27 2022]
- FIXED: memory leak if re_compile fails or throws an error
[Mar 25 2022]
- PORT: Make compiled and test using pcre2 10.31.
- PORT: Make work on systems that do not provide JIT support.
Possibly it is better to fail on the option in that case?
[Mar 24 2022]
- ENHANCED: use pcre2 library instead of pcre1 - Issue #2 - Numerous
small bug fixes and enhancements (e.g., handling of duplicate
options, capture_type, error checking). - This commit takes
advantage of refactoring that was done on the pcre1 code to make
it easier to handle the pcre2 options (which are both more numerous
and have a different underlying API). - Added new pcre2 options -
Removed some obsolete options, preserving backwards compatibility
where possible - The meaning of
optimise(true)
has changed - it now
calls the JIT compiler - Renamed bsr(...)
and newline(...)
options
to bsr2(...)
and newline2(...)
because the pcre2 interface has
changed - compat(javascript)
is replaced by alt_bsux(true)
and
extra_alt_bsux(true)
- Code improvements: use uint32_t
wherever
possible instead of unsigned
or int
- Does not use the new
pcre2_substitute()
for re_replace/{4,5}, re_split/{3,4}, re_foldl/6
(however, some improvements have been made to the APIs for these). -
Added test cases
[Mar 9 2022]
[Feb 4 2022]
- ENHANCED: re_replace/{4,5}, re_split/{3,4} handle capture_type option -
some refactoring - some bug fixes - added tests
[Jan 26 2022]
- FIXED: re_replace/4 can now handle duplicated back references (Issue
#6) - added escapes for "$" and "\" Refactored "capture map" code
Minor reformatting
[Jan 22 2022]
- ENHANCED: re_replace/5 with options list, similar to re_matchsub.
There are still some "fixme" tests, related to global capture_type.
Fixed: caching of compiled patterns with options. Renamed some
predicates to make things clearer.
[Nov 23 2021]
- FIXED: re_config/1 throws error for all cases of invalid argument
Added Unicode tests (for migration to PCRE2 Issue #2) Fixed uncleared
exception Use convenience function or error returns Regularize some
names Documentation had "optimize" option; code had "optimise"
- allow both Fixed detection of type suffix in pattern names Fix
potential memory leaks and missed error checks Refactor conflated pcre
return code PL_... return code Document return codes Lower-case cmake
functions that are lower-case elsewhere Small fixes from turning on
more compiler warning
Package pengines
[Sep 16 2022]
- PACKAGE: Move term_html.pl to the http package. It is not specific
for Pengines.
Package pldoc
[Jan 25 2023]
- FIXED: Possible race condition when pldoc is loaded concurrently from
multiple threads. Hook is installed before the predicates it needs
are defined.
[Nov 23 2022]
- CONFIG: Make most of PlDoc work in the single threaded version.
- CONFIG: Make PlDoc work if the HTTP server components are not part
of the configuration.
[Nov 20 2022]
- ENHANCED: Source button to prefer loaded code over xref data.
Package plunit
[Dec 7 2022]
[Dec 2 2022]
- MODIFIED: extend message term
plunit(end(Unit))
to plunit(end(Unit,
Summary))
where summary provides the status and time spend on the unit.
Package redis
[Jan 2 2023]
- ENHANCED: Avoid hanging connection on invalid authentication.
[Dec 30 2022]
- ADDED: Split authentication for the redis instances from the sentinel
network.
- FIXED: Also connecting to the sentinels require authentication.
[Dec 28 2022]
- ADDED: Connect to a master through a sentinel network.
- ADDED: Support Redis TLS connections.
[Dec 12 2022]
- TEST: More relaxed timing to make test pass on heavily loaded machines.
[Oct 18 2022]
- FIXED: Handle push messages that do not include a pubsub header (@swi).
Package semweb
[Dec 8 2022]
- PORT: Support full Unicode input for ntriples and trutle on
Windows. Based on PR#108 by @mgondan.
[Nov 21 2022]
- FIXED: rdfa.pl: Avoid dependency oin development tools
[Oct 3 2022]
[Sep 5 2022]
- TEST: Make tests work in restricted single threaded version.
[Aug 20 2022]
- BUILD: add cmake dependency
- PORT: Make the turtle and ntriples readers and writers load without
library(semweb/rdf_db). Still issues using them.
- PORT: Do build build
library(semweb/rdf_db)
in single threaded
mode. In this mode the semweb only provides the turtle and ntriple
readers and writers.
[Jun 21 2022]
Package sgml
[Jan 18 2023]
- FIXED: Back skip over UTF-16. @UweR.
[Jan 17 2023]
- ENHANCED: Partial support for full Unicode handling ion Windows
(UTF-16).
[Jan 16 2023]
- ADDED: Add
ignore_doctype(+Bool)
option to explicitly ignore DOCTYPEs
embedded in XML
[Aug 19 2022]
- CLEANUP: Avoid function pointers with incomplete prototypes and make
the install function follow the conventions to allow for statically
linked extensions.
Package ssl
[Jan 14 2023]
- FIXED: Allow HTTPS server to be started as Interface:Port.
[Nov 29 2022]
[Nov 23 2022]
- TEST: Drop tests when single threaded.
[Aug 13 2022]
- FIXED: Zero the PL_CRYPTO_HASH_CONTEXT struct on first allocation
[Apr 24 2022]
- PORT: RTools42, link order for OS libs, add libz
[May 6 2022]
- BUILD: Ensure HOME is set to a writable path for generating the SSL
test certificates.
[May 3 2022]
- PORT: Avoid deprecated SecKeychainOpen().
[Mar 8 2022]
- ADDED: Implement clean shutdown hook support for HTTPS.
[Feb 28 2022]
- TEST: test_ssl won't SIGPIPE without signals
[Feb 21 2022]
- PORT: Override OPENSSL_OS_LIBS with cmake -Detc. For some reasons,
RTools42 needs libz included in the OPENSSL_OS_LIBS
Package swipl-win
[Jan 25 2023]
- PORT: qmake.pro and includes to compile in QtCreator (up to Qt 6.4)
[Nov 23 2022]
- FIXED: Check return codes of many operations on lists.
[Jul 22 2022]
- PORT: Changes for SWI-cpp.h API Version 2
Package windows
[Oct 26 2022]
Package xpce
[Jan 24 2023]
- TEST: Skip test if xpce cannot be found.
[Dec 10 2022]
- FIXED: file<-time default was accidentally to
access
where it used
to be modified
.
[Nov 30 2022]
- PORT: Make the xpce source compile clean using GCC -pedantic flag.
Note that an important part of the problems is that XPCE threads data
and function pointers the same. This used to work with a cast to
`void*`. This is not allowed in C11. It is allowed to cast both
pointers and functions to
intptr_t
, so with a little detour we
get where we need to be. Time will tell whether we will see systems
where this conversion is not allowed.
[Nov 23 2022]
- CONFIG: Avoid dependency on threads.
[Oct 29 2022]
[Oct 4 2022]
- ENHANCED: PceEmacs: properties of predicates in status line (better
text and ignore more irrelevant).
- ADDED: gxref_called/2 hook into gxref/0 to allow silencing
predicates that are called by means of hooks or some other mechanism.
- FIXED: gxref/0: edit predicate on click to properly handling included
files.
[Sep 20 2022]
- PORT: suppress uninitialized warning in msys2 gcc
[Sep 19 2022]
- PORT: msys2-compatible mkdir and wildcards
[Sep 7 2022]
- FIXED: PceEmacs sgml mode: use setup_call_cleanup/3 to ensure Prolog
streams to editors are always closed.
[Sep 4 2022]
- TEST: Create files and directories in temp.
[Sep 2 2022]
- PORT: Avoid using Windows
stat()
Package zlib
[Nov 23 2022]
- TEST: Disable tests that requires threads
[Sep 6 2022]
- TEST: Disable socket based tests if sockets are not supported.