Logtalk Changelog

What's new in Logtalk 3.77.0

Apr 8, 2024
  • Logtalk compiler and runtime:
  • ADDED: Predicate property recursive to the reflection API to document that a predicate definition includes at least one recursive rule.
  • ADDED: Linter warnings for logtalk::print_message/3 goals (specifically, missing message tokenization and misuse of Format+Arguments meta-message).
  • Documentation:
  • ADDED: Also generate ePub and PDF versions of the APIs documentation.
  • IMPROVED: Documentation of the code_metrics tool.
  • Library:
  • ADDED: New and improved tests for the os library.
  • FIXED: The os library date_time/7 predicate for XSB to return the local date and time.
  • Tools:
  • CHANGED: The code_metrics tool to exclude auxiliary predicates from analysis.
  • CHANGED: The diagrams tool to omit from library loading and library dependency diagrams libraries that are not loaded or have no dependencies.
  • CHANGED: The diagrams tool to omit from directory loading and directory dependency diagrams directories that are not loaded or have no dependencies.
  • CHANGED: The diagrams tool to use the default layout for sub-diagrams when using the zoom(true) option.
  • CHANGED: The packs tool to only install or restore, by default, packs that are compatible with the current Logtalk, backed, and operating-system versions. Add a new compatible/1 boolean option for the install/4, update/3, and restore/2 predicates (default is true) to allow overriding the new default behavior.
  • ADDED: Support to the packs tool for specifying packs alternative dependencies using the (;)/2 operator.
  • ADDED: New public predicates to the code_metrics tool that take a list of options to selectively exclude from analysis libraries, directories, files, and entities.
  • ADDED: The diagrams tool directory diagrams now generate file nodes that link to file entity diagrams when using the zoom(true) option.
  • ADDED: New diagrams tool recursive_relations/1 boolean option (default is false) to output recursive calls links in predicate cross-referencing diagrams.
  • ADDED: New diagrams tool versions/1 boolean option (default is false) to print the Logtalk and backend version data.
  • ADDED: New diagrams tool predicate_url_target_format/1 option (default is sphinx) to allow generating correct documentation URL predicate targets.
  • ADDED: Preliminary support for Mermaid to the diagrams tool (not loaded by default as its current version lacks parity with required Graphviz features).
  • IMPROVED: The packs tool now checks when updating a pack if any dependent pack will break.
  • FIXED: The packs tool to pass pack installing and updating options to any required dependencies that must also be installed or updated.
  • FIXED: The diagrams tool to normalize the directories listed in the exclude_directories/1 option.
  • FIXED: The diagrams tool to always consider the exclude options when outputting external nodes and edges.
  • FIXED: The diagrams tool to avoid adding zoom icons/links when the linked diagrams are empty.
  • FIXED: The diagrams tool to show relative paths in external file nodes after the omit_path_prefixes/1 option instead of just basenames.
  • FIXED: The lgtunit tool xUnit.net v2 XML format support to output errors quoted.
  • Tests:
  • ADDED: Preliminary test set for the Prolog encoding/1 directive supported by some of the backends that support Unicode and multiple text encodings.
  • ADDED: Additional tests for the Prolog standard number_codes/2 predicate.

New in Logtalk 3.76.0 (Mar 19, 2024)

  • Logtalk compiler and runtime:
  • CHANGED: The reflection API now also includes calls/2 object and category properties when the callers are auxiliary predicates. This change allows the dead_code_scanner tool to avoid false positives when reporting non called predicates.
  • ADDED: Implemented the object and category updates/2 property alias/2 and non_terminal/1 predicate properties.
  • IMPROVED: The compiler report of errors and warnings clause context for multifile predicates.
  • IMPROVED: Print a warning only for the first successful call to the logtalk_linter_hook/7 hook predicate.
  • FIXED: The compiler to detect and report attempts to declare category predicates or non-terminals as both multifile and dynamic.
  • FIXED: The updates/2 object and category property would not be reported for updated predicates in user.
  • FIXED: The compiler to not create object and category calls/2 properties for built-in database predicate calls updating predicates in user.
  • FIXED: False positive missing predicate linter warnings in logtalk_make/1 calls for the check target when analyzing (^^)/1 and (::)/1 calls from objects playing the role of instances.
  • Documentation:
  • IMPROVED: Clarify that license information in info/1 directives and pack manifest files should preferably use a SPDX standard license identifier.
  • IMPROVED: Documentation of the diagrams tool on known issues when generating predicate call cross-referencing diagrams.
  • FIXED: Handbook description of object and category calls/2 and updates/2 properties missing the non_terminal/1 predicate property and wrongly specifying as/2 instead of alias/2 predicate property.
  • Library:
  • CHANGED: No longer require arbitrary term generators to have a type-checker.
  • CHANGED: The type::check/2 and the arbitrary::arbitrary/2 predicates are now also declared as meta-predicates to support new meta-types.
  • REMOVED: The types_frequency/1 type from the type library (use instead the types/1 type for type-checking).
  • ADDED: New (::)/2 and constrain/2 types to the types and arbitrary libraries. This (::)/2 type allows using object public predicates as scoped type-checkers, generators, and shrinkers. The constrain/2 type allows constraining a base type using a closure.
  • ADDED: New transform/2 type to the arbitrary library. This type allows transforming generated values of a base type using a closure.
  • ADDED: New arbitrary::max_size/1 multifile predicate to allow overriding the maximum size for types where its meaningful and implicit.
  • ADDED: New arbitrary::shrink_sequence/3 predicate to help testing definitions of the arbitrary::shrink/3 predicate.
  • IMPROVED: Linter warnings for calls to the list::append/3 predicate.
  • FIXED: Bugs in the arbitrary library shrink/3 predicate definitions for some of the pre-defined types that could result in non-terminating sequences.
  • FIXED: Protect arbitrary library shrink/3 predicate definitions for float types from underflow errors.
  • FIXED: The arbitrary library tests when run with the GNU Prolog backend.
  • FIXED: Deleted unused non-terminals from the number_grammars/1 object.
  • FIXED: Tests for the ulid library to account for some backends providing low time accuracy.
  • IMPROVED: Implementation of the os library predicates full_device_path/1 and read_only_device_path/1.
  • Tools:
  • CHANGED: The diagrams tool interpretation of the excluded_directories/1 option to exclude also all sub-directories of the excluded directories.
  • CHANGED: The lgtdoc tool interpretation of the excluded_paths/1 option to exclude also all sub-directories of the excluded directories.
  • ADDED: New public predicates to the dead_code_scanner tool that take a list of options to selectively exclude from analysis libraries, directories, files, and entities.
  • ADDED: Support to the packs tool to represent operating-system dependencies in pack manifest files.
  • IMPROVED: The logtalk_tester.sh script can now be interrupted using Ctrl-C when the timeout option is used.
  • IMPROVED: The logtalk_tester.sh script now kills all created child processes on exit.
  • IMPROVED: The tutor tool explanation for permission errors when trying to declare a category predicate as both multifile and dynamic.
  • IMPROVED: The packs tool to clean the pack installation directory when restoring or (re)installing a pack from an archive.
  • FIXED: The packs tool to respect the verbose(true) option when adding or updating packs and registries from directories.
  • FIXED: The packs tool lint checking of pack manifest notes.
  • FIXED: Test for the packs tool when running on Windows with backends that convert paths to lower case.
  • FIXED: The dead_code_scanner tool to not report non-terminals and predicates listed in uses/2 or use_module/2 directives when a local scope directive exists or when they are used only as arguments in calls to the built-in database methods.
  • FIXED: The dead_code_scanner tool to report unused non-terminals and predicates listed in uses/2 or use_module/2 directives when aliases are defined.
  • FIXED: The diagrams tool predicate call cross-referencing diagrams to ensure that caller nodes are not created for auxiliary predicates.
  • FIXED: The logtalk_tester.ps1 script reporting of broken test sets when the tests cannot be compiled due to syntax errors.
  • FIXED: Workaround a XSB command-line options handling bug on Windows in the logtalk_tester.ps1 script.
  • Examples:
  • ADDED: Additional tests for the hooks example.
  • Ports:
  • FIXED: The metagol port learn_with_timeout/4 predicate definition.
  • Contributions:
  • FIXED: Unused predicate warnings when analyzing the pddl_parser, verdi_neruda, and xml_parser contributions using the dead_code_scanner tool.
  • FIXED: Linter warnings for the verdi_neruda contribution with backends not providing a statistics/2 built-in predicate.
  • Tests:
  • IMPROVED: Tests for the standard stream_property/2 built-in predicate.
  • FIXED: Tests for the get_char/2, get_code/2, and peek_char/2 standard predicates that caused failures when run on Windows.

New in Logtalk 3.75.0 (Feb 27, 2024)

  • Logtalk compiler and runtime:
  • IMPROVED: Simplified implementation of the threaded_engine_destroy/1 built-in predicate.
  • FIXED: Workaround SWI-Prolog throwing existence errors when calling thread_signal/2 or thread_send_message/2` on a terminated but not yet joined thread.
  • Prolog adapter and integration files:
  • UPDATED: The Trealla Prolog adapter file to set the threads and engines flags to supported when running on a recent version providing the required built-in predicates.
  • Documentation:
  • IMPROVED: Handbook documentation of the threaded_engine_self/1 built-in predicate.
  • IMPROVED: Documentation of the arbitrary library.
  • Library:
  • ADDED: New os library predicates operating_system_name/1, operating_system_machine/1, and operating_system_release/1.
  • ADDED: New compound(Name,Types) and types_frequency(Pairs) types to the types and arbitrary libraries. Joint work with Yurii Rashkovskii.
  • Tools:
  • CHANGED: The lgtunit tool now prints both CPU time and wall time for tests.
  • CHANGED: The lgtunit tool xUnit reports now use the tests wall time instead of CPU time.
  • FIXED: The packs linter for pack definitions would not recognize the (==)/2 operator as valid when specifying dependencies.
  • Examples:
  • ADDED: Additional test for the document_converter example.
  • ADDED: Tests for the tbbt threaded engine example.
  • IMPROVED: Tests for the barriers blackboard, buckets, buffer, checkpoint, metered_concurrency, philosophers, ping_pong, sorting, and team multi-threading examples by using explicit assertions.
  • IMPROVED: Portability of the whisper multi-threading example.
  • UPDATED: The buckets, buffer, metered_concurrency, tbbt, and whisper multi-threading examples to use the format library.
  • UPDATED: The buckets multi-threading example to call the thread_yield/0 predicate in the redistribute and match loops.
  • UPDATED: The ebench threading engines example tests for LVM.
  • FIXED: The threads/team example to allow running it independently of the current directory.
  • Tests:
  • ADDED: Test set for ISO Prolog standard logical update semantics.
  • ADDED: Additional test for the ISO Prolog standard op/3 predicate.
  • ADDED: Additional tests for the de facto Prolog standard format/2-3 predicates (~p control sequence).
  • IMPROVED: Test for the ISO Prolog standard current_op/3 predicate.

New in Logtalk 3.74.0 (Feb 1, 2024)

  • Logtalk compiler and runtime:
  • CHANGED: Printing of linter warnings about to the use of unsound control constructs in grammar rules to be controlled by the grammar_rules flag instead of the suspicious_calls flag. Also changed the format of warning message.
  • CHANGED: The implementation of the context/1 built-in method and the implementation of the threaded_call/2 and threaded_once/2 built-in predicates to throw uninstantiation_error(Term) errors instead of type_error(var, Term) errors.
  • CHANGED: The implementation of the threaded_peek/1-2 built-in predicate to throw an exception when there is no thread proving the goal argument.
  • CHANGED: The implementation of the threaded/1 built-in predicate to not abort execution when the argument is a disjunction of goals if one of them throws an exception while there are still thread goals running.
  • IMPROVED: The implementation of the threaded/1 built-in predicate to support calls where the argument is only bound at runtime.
  • IMPROVED: The implementation of the threaded/1 built-in predicate to use a dedicated message queue per call. This prevents unlikely but still possible leaks of individual thread results between calls that could cause unexpected failures.
  • IMPROVED: The implementation of the threaded_engine_create/3 predicate to use a single mutex.
  • IMPROVED: The implementation of the threaded_cancel/1 predicate.
  • IMPROVED: Error checking of the threaded_exit/1-2 and threaded_peek/1-2 predicates.
  • IMPROVED: Linter warnings for if-then-else and soft-cut control constructs.
  • FIXED: Compilation of synchronized/1 directives in categories to not depend on the Prolog with_mutex/2 built-in predicate implicitly creating mutexes.
  • FIXED: Compilation of phrase/2-3 goals where the first argument is a (::)/1-2 or (^^)/2 control construct with a variable grammar rule body argument would result in a compilation infinite loop. Thanks to Yurii Rashkovskii for the bug report.
  • FIXED: Regression where a compiler error when a source file term is not callable would be delegated to the backend.
  • Prolog adapter and integration files:
  • UPDATED: The LVM adapter file to set the engines and threads flags depending on the availability of the required built-in predicates.
  • FIXED: The SWI-Prolog swihooks.pl file to allow calls to the threaded/1 built-in predicate in user to actually use multi-threading by preventing module-qualification of the predicate argument.
  • Documentation:
  • IMPROVED: Handbook documentation of built-in meta-non-terminals and meta-predicates.
  • IMPROVED: Handbook documentation on grammar rules.
  • IMPROVED: Handbook documentation on dynamic predicates and the create_object/4 built-in predicate.
  • IMPROVED: Handbook documentation of the threaded/1 built-in predicate.
  • IMPROVED: Handbook documentation of the meta_predicate/1 directive.
  • FIXED: Handbook description of the if/1 conditional compilation directive.
  • FIXED: Documentation of the context/1 built-in execution context method.
  • FIXED: Documentation of the threaded_exit/1-2 exceptions.
  • Library:
  • CHANGED: The type library object to to throw uninstantiation_error(Term) error instead of type_error(var, Term) error when checking the var type.
  • CHANGED: Deleted deprecated library/genint.lgt file, replaced by the genint library.
  • ADDED: Library listing supporting listing of object dynamic predicates clauses. This library replaces the old non-documented listing category.
  • ADDED: Library recorded_database to help porting legacy Prolog code.
  • UPDATED: The os::file_exists/1 predicate for YAP.
  • FIXED: The json library to avoid unnecessary escaping of slashes when encoding a string. Thanks to Yurii Rashkovskii for the bug report.
  • FIXED: The json library ignoring the selected JSON object representation when generating JSON output. Thanks to Yurii Rashkovskii for the bug report.
  • FIXED: The json library domain error when trying to generate JSON output from an invalid JSON representation.
  • FIXED: Description of the hierarchies library.
  • FIXED: Compatibility of the types library with XSB due to the missing implementation of the de facto standard gcd/2 arithmetic function.
  • FIXED: Two linter warnings when loading the os library using the CxProlog backend.
  • Tools:
  • CHANGED: Recent versions of both Texinfo and Sphinx broke index search in the Handbook and APIs documentation when using the help::handbook/1 and help::apis/1 predicates. The argument is now interpreted as a starting node instead of a search string.
  • CHANGED: Default output directory for the diagrams tool to ./dot_dias.
  • UPDATED: The update_svg_diagrams.* scripts for the new diagrams tool default output directory.
  • UPDATED: The lgtunit tool to report unbound test options.
  • UPDATED: The lgtunit tool xUnit.net v2 XML format output to include the assemblies and assembly tags start-rtf and finish-rtf attributes.
  • UPDATED: The tutor tool for the refactoring of the linter warnings on the use of unsound control constructs in grammar rules.
  • FIXED: Syntax error in the logtalk_tester.ps1 script.
  • Ports:
  • IMPROVED: Portability of the fcube port by using less problematic operator names. This allows the port to run with LVM and SICStus Prolog.
  • Examples:
  • CHANGED: The haunted_wasteland, scratchcards, and trebuchet examples providing solutions for selected Advent of Code 2023 problems to comply with this event legal requirements by linking (instead of copying) to the problem descriptions and removing test files that are not samples found in the problem descriptions.
  • UPDATED: The errors example for the linter warnings on the use of unsound control constructs in grammar rules, redefined operators, and suspicious tests in conditionals.
  • UPDATED: The ebench example for an upcoming LVM version.
  • UPDATED: Several multi-threading example tests to use explicit assertions.
  • UPDATED: The mtbatch example to use the format and os libraries.
  • UPDATED: Simplified the functions and mtbatch multi-threading examples, accounting for the changes to the threaded/1 built-in predicate.
  • FIXED: The emetas example definition of the best_of/3 predicate to destroy the threaded engine after computing the answer.
  • Tests:
  • ADDED: Additional tests for the multi-threading built-in predicates.
  • ADDED: Additional tests for the format/2-3 de facto standard predicates (~Ng, ~NG, ~|, ~N|, and ~N+ control sequences).
  • IDEs, text editors, and syntax highlighters support
  • REMOVED: The old and deprecated VSCode support in favor of the “Logtalk for VSCode” extension available from the VSCode Marketplace.
  • UPDATED: The syntax highlighting test files to include the built-in non-terminals.
  • UPDATED: EditorConfig support for the .logtalk and .prolog file name extensions.
  • UPDATED: Ace support for compatibility with its current version (v1.32.2).
  • UPDATED: Rouge support for compatibility with recent versions.
  • FIXED: Ace support highlight of 0'Char and 0'Char numbers.
  • FIXED: GtkSourceView support error with escaped characters highlighting.
  • FIXED: Merge upstream changes for the Kate text editor support.
  • FIXED: Merge upstream changes for the Pygments syntax highlighter support.
  • FIXED: SubEthaEdit 4.x/5.x syntax highlight for the threaded_cancel/1 built-in predicate.
  • FIXED: Vim support highlight of 0'Char and 0'Char numbers.
  • Installers and installation scripts:
  • UPDATED: The install.sh manual installation script to inform the user about the INFOPATH environment variable.
  • FIXED: The Bash shell embedding scripts to actually use the default settings file when no -s option is passed.

New in Logtalk 3.73.0 (Dec 12, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Linter warnings for deprecated arithmetic functions.
  • ADDED: Linter warning for comparing numbers using unification.
  • ADDED: Linter warnings for Quintus Prolog predicate versions of arithmetic functions.
  • ADDED: Additional legacy built-in predicates for linter deprecated warnings.
  • ADDED: Support for using backend-declared deprecated built-in predicates in linter warnings.
  • IMPROVED: When checking the availability of predicates in user for uses/2 and use_module/2 directives, also check for an imported_from/1 predicate property.
  • IMPROVED: Avoid false positive linter warnings about non-terminals called as predicates when the caller is a phrase-like predicate declared in the backend adapter file. Thanks to Yurii Rashkovskii for the use-case report.
  • IMPROVED: Compiler reporting of term-expansion errors to write the source term.
  • FIXED: Unknown and undefined predicate call warnings when the calls occur in an included file to report the actual location instead of the main file.
  • FIXED: Only print linter warnings related to grammar rules when the flag grammar_rules is set to warning.
  • Prolog adapter and integration files:
  • CHANGED: B-Prolog support status to “experimental”. Bugs and limitations on atom representation result in silent failures when loading libraries and tools.
  • ADDED: Support for declaring phrase-like predicates that call non-terminals. This helps preventing false positive linter warnings of non-terminals called as predicates.
  • ADDED: Support for declaring deprecated built-in predicates (with or without advised alternatives) in the adapter files.
  • IMPROVED: ECLiPSe definition of the '$lgt_current_module_predicate'/2 internal predicate.
  • UPDATED: The CxProlog adapter file to require version 0.98.2 or later.
  • UPDATED: The LVM adapter file to prevent a clash with the term_hash/4 built-in predicate introduced in an upcoming version.
  • UPDATED: The SWI-Prolog adapter file to load the prolog_evaluable library when available (provides the evaluable_property/2 predicate used by the linter).
  • Documentation:
  • IMPROVED: Handbook grammar section now uses W3C-style EBNF syntax compatible with the Railroad Diagram Generator. Several typos and omissions are also fixed. Thanks to Domingo Alvarez Duarte for his contribution and bug report.
  • IMPROVED: Handbook section on parametric objects.
  • IMPROVED: Documentation of the wrapper tool.
  • UPDATED: The manual installation instructions on generating documentation human-readable formats.
  • UPDATED: The man page for the lgt2pdf shell script.
  • Library:
  • REMOVED: The tsv object from the csv library.
  • ADDED: Experimental mutations library for generating random mutations of terms of selected types. Intended for eventual fuzz testing support.
  • ADDED: New tsv library for reading and writing TSV files.
  • ADDED: Library predicates list::occurrences/2-3 to count the number of occurrences of list elements.
  • ADDED: Library predicate numberlist::least_common_multiple/2.
  • ADDED: Predicates select/4, swap/2, and swap_consecutive/2 to the random library for returning a random member of a list, replacing it by a new element and returning the resulting list, and for swapping two randomly chosen elements of a list.
  • ADDED: Non-terminals zero_or_more//2, one_or_more//2, and without//2 to the sequence_grammars library object.
  • IMPROVED: Performance of the reader library predicates that read a file or a stream to a list of chars, codes, or bytes.
  • IMPROVED: Performance of the term_io library predicates.
  • UPDATED: The csv library to also recognize .tab file extension for TSV files.
  • FIXED: The documentation of the pairs::keys_values/3 library predicate.
  • FIXED: The os library tests calls to the shell/1 predicate from auxiliary predicates.
  • FIXED: The listing library category implementation of the listing/1 predicate.
  • FIXED: The sequence_grammars library object definition of the non-terminals zero_or_more//0-1 and one_or_more//0-1 to consume tokens eagerly.
  • Tools:
  • UPDATED: The lgtunit tool to also print the tests runtime in seconds.
  • UPDATED: The tutor tool for the new arithmetic function linter warnings and the new linter warning for comparing numbers using unification.
  • FIXED: The debugger tool checking for a deterministic goal for CxProlog.
  • FIXED: The lgtunit tool definition of the deterministic/1-2 predicates for CxProlog.
  • FIXED: The logtalk_tester scripts to detect and report as broken test sets where the tests failed to run due to an unexpected loading error likely caused by a backend bug.
  • FIXED: The lgt2html.ps1, lgt2md.ps1, lgt2rst.ps1, and lgt2txt.ps1 PowerShell scripts to release the lock on the XML files after converting them to reStructuredText files.
  • FIXED: Error in the wrapper tool when printing missing directives advice.
  • Examples:
  • ADDED: New haunted_wasteland example, providing a solution for the Advent of Code 2023 Day 8 problem.
  • ADDED: New scratchcards example, providing a solution for the Advent of Code 2023 Day 4 problem.
  • ADDED: New trebuchet example, providing a solution for the Advent of Code 2023 Day 1 problem.
  • ADDED: Tests to the poem, profiling, and self_vs_this examples.
  • UPDATED: The errors example for the new arithmetic function linter warnings.
  • UPDATED: The bench example to remove dependency on the deprecated name/2 built-in predicate and eliminate all linter warnings.
  • FIXED: The bench example to always load the boyer and chat_parser benchmarks and to also run by default the flatten benchmark.
  • FIXED: The benchmarks example not loading the module.pl file from the loader_events.lgt and loader_no_events.lgt files when using Tau Prolog.
  • Tests:
  • ADDED: Additional tests for the phrase/2-3 built-in methods.
  • FIXED: Test for the setof/3 built-in method.
  • Installers and installation scripts:
  • UPDATED: The macOS installer to add /opt/local/bin to the default system PATH environment variable, /opt/local/man to the default system MANPATH environment variable, and /opt/local/share/info to the default system INFOPATH environment variable.
  • UPDATED: The macOS installer to inform the user about the additions to the PATH, MANPATH, and INFOPATH environment variables.
  • FIXED: The logtalk_user_setup.ps1 PowerShell script to use a valid path for the backup directory.

New in Logtalk 3.72.0 (Nov 9, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Linter warnings for use of unsound calls in grammar rules (when the argument of a (+)/1 call or the condition in (->)/2 or (*->)/2 calls is not {}/1).
  • ADDED: Linter warning for calls to the deprecated predicates not/1 and fail_if/1.
  • IMPROVED: Simplified handling of plain Prolog terms when compiling source files.
  • IMPROVED: Avoid computing directory hash twice when compiling a source file.
  • IMPROVED: Performance when compiling object and category facts.
  • IMPROVED: Performance when compiling entity ground terms.
  • IMPROVED: Performance when compiling entity terms that are not expanded.
  • FIXED: Catch any errors during the compilation of the begin_of_file virtual term.
  • FIXED: Minor performance bug when compiling clauses for multifile predicates of parametric entities.
  • FIXED: Reporting of compiler instantiation errors in clause and grammar rule heads where a '$VAR'/1 or '$VAR'//1 term would be displayed.
  • Prolog adapter and integration files:
  • UPDATED: Notes on the LVM adapter file for enabling coinduction support.
  • Documentation:
  • ADDED: Documentation to the lgtunit tool on mocking solutions.
  • ADDED: Documentation to the lgtunit tool on test execution times and memory usage.
  • ADDED: Documentation to the lgtunit tool on testing or suppressing expected output written to user_error and other streams.
  • IMPROVED: Handbook section on performance.
  • IMPROVED: Handbook documentation of the (+)/1 and forall/2 built-in methods.
  • FIXED: Allow Handbook and APIs documentation search support to work offline.
  • Tools:
  • ADDED: Predicate help::man/1 for inline browsing of man files.
  • UPDATED: The tutor tool for the new linter warnings on unsound calls in grammar rules.
  • FIXED: Typo in the packs tool error message when uncompressing a pack archive fails.
  • Examples:
  • UPDATED: The documentation of the metainterpreters example.
  • Installers and installation scripts:
  • UPDATED: The macOS installer to also add the Logtalk default paths to the PATH, MANPATH, and INFOPATH environment variables.
  • UPDATED: The Windows installation script to also detect upcoming SICStus Prolog 4.9.x versions.

New in Logtalk 3.71.0 (Oct 13, 2023)

  • Prolog adapter and integration files:
  • REMOVED: Scryer Prolog is no longer supported due to the system refusal to implement (or accept contributions implementing) the required de facto standard version_data flag.
  • FIXED: The GNU Prolog adapter file for compatibility with versions older than 1.6.0.
  • Documentation:
  • IMPROVED: Simplified finding the goal to use to load an entity when browsing the APIs documentation.
  • IMPROVED: Documentation of the embedding scripts on how to handle an application using a mix of Logtalk and Prolog source files.
  • FIXED: Texinfo navigation between Handbook and APIs documentation.
  • Library:
  • UPDATED: The tester_versions.lgt library file to use the de facto Prolog standard version_data flag to print any additional backend Prolog version data (e.g. a git commit hash).
  • Tools:
  • CHANGED: The debugger tool to print a procedure box port for spy points when the port is unleashed.
  • IMPROVED: The packs tool linting of pack specifications to also check that pack versions are listed from newest to oldest.
  • UPDATED: Entity documentation generated by the lgtdoc tool now includes the goal required for loading each entity.
  • UPDATED: The tutor tool for the new linter warning on missing arithmetic functions.
  • FIXED: The packs tool linting of pack specifications would wrongly report pack dependency versions using only Major:Minor or Major.
  • Examples:
  • CHANGED: The document_converter example to ensure UTF-8 encoding of the text files resulting from PDF files conversion.
  • UPDATED: The errors example to illustrate linter arithmetic function warnings.

New in Logtalk 3.70.0 (Sep 18, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Linter check for missing arithmetic functions when using a backend implementing the evaluable_property/2 predicate.
  • IMPROVED: The compiler to optimize the compilation of catch/3 goals where the first argument is a call/1 goal.
  • Prolog adapter and integration files:
  • FIXED: The GNU Prolog adapter file to rely on the new show_banner flag (when available) instead of the new show_information flag (in the upcoming 1.6.0 release) to set the Logtalk report flag.
  • Documentation:
  • IMPROVED: Documentation of the embedding scripts, notably on how to ensure relocatable applications.
  • UPDATED: The man pages of the logtalk_doclet and logtalk_tester scripts on generating a GNU Prolog executable that includes Logtalk.
  • FIXED: Override default Pygments CSS style for syntax highlighting errors in the Handbook to avoid displaying red boxes in non-Logtalk code blocks.
  • Libraries:
  • ADDED: Additional tests for the java library conversion between non-ASCII Java strings and Prolog atoms.
  • Tools:
  • IMPROVED: The packs tool handling of pack dependencies to try first to select dependency versions that verify any Logtalk and Prolog backend requirements before resorting to versions that just comply with the parent pack requirements.
  • UPDATED: The logtalk_allure_report scripts to support generating single file reports when running Allure 2.24.0 or a later version.
  • UPDATED: The packs tool to print an error message when updating a pack fails unexpectedly.
  • FIXED: The packs::update/0 predicate to use default options for updating the outdated packs.
  • Examples:
  • IMPROVED: The document_converter example for faster conversion of large PDF files.
  • Tests:
  • ADDED: Additional Unicode tests for the standard sub_atom/5 predicate.
  • Installers and installation scripts:
  • ADDED: All the embedding scripts now support omitting a settings file by using the -s none option.
  • FIXED: All the embedding scripts to use the default value for the settings file if none is specified (using the -s option) as per documentation.

New in Logtalk 3.69.0 (Aug 22, 2023)

  • Logtalk compiler and runtime:
  • FIXED: Compilation of read_term/2-3 and write_term/2-3 goals would fail to take into account local operator definitions when the portability flag was set to silent (its default value).
  • Prolog adapter and integration files:
  • UPDATED: The LVM adapter file list of proprietary predicate properties for version 6.4.0.
  • FIXED: Workaround a LVM embedding application issue with plug-ins where the registry name differs from the shared library basename.
  • Documentation:
  • IMPROVED: Documentation of the op/3 directive.
  • IMPROVED: Documentation of the asserta/1 and assertz/1 built-in methods.
  • IMPROVED: Documentation of the diagrams tool path_url_prefixes/3 and omit_path_prefixes/1 options.
  • IMPROVED: Documentation of the lgtunit tool on writing and running tests.
  • Library:
  • ADDED: Experimental os::full_device_path/1 library predicate. Currently limited to Linux and BSD systems.
  • ADDED: Experimental os::read_only_device_path/1 library predicate. Currently limited to macOS systems.
  • ADDED: Predicate approximately_equal/2 to the number library object.
  • IMPROVED: The number object documentation of the approximately_equal/3 and essentially_equal/3 predicates.
  • Tools:
  • CHANGED: The lgtunit tool to handle a non-deterministic success test result as any other test failure (thus suppressing non_deterministic_success/6 print messages).
  • ADDED: Predicate approximately_equal/2 to the lgtunit tool.
  • ADDED: The lgtunit tool now supports a flaky/0 test option as the preferred solution for declaring flaky tests.
  • IMPROVED: The lgtunit tool documentation of the approximately_equal/3 and essentially_equal/3 predicates.
  • IMPROVED: The diagrams tool DOT language support no longer sets the graph pack attribute to true to avoid frequent Graphviz dot command crashes when converting graphs to SVG format.
  • IMPROVED: The lgtdoc tool support for documenting libraries where source files are organized in multiple sub-directories.
  • IMPROVED: The tutor tool explanations for some message sending warnings.
  • FIXED: The lgtunit tool xUnit reports escaping of XML special characters.
  • FIXED: Bug in the packs tool warning message when installing a pack requires updating the backend Prolog system. Thanks to Jacob Friedman for the bug report.
  • Examples:
  • IMPROVED: The metapredicates example.
  • UPDATED: The document_converter example to allow converting large files and to turn off OCR for faster testing. Also added samples in formats other than PDF. Tested with Apache Tika 2.8.0.
  • Tests:
  • ADDED: Additional tests for the Logtalk op/3 directive for checking the semantics of the read_term/2-3, read/1-2, write_term/2-3, writeq/1-2, and write/1-2 predicates in the presence of local operator definitions.
  • Installers and installation scripts:
  • UPDATED: The LVM embedding scripts to support encryption of the generated Prolog files. Requires LVM 6.4.0 or later version.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Link to the new home for the VSCode Logtalk plug-in.

New in Logtalk 3.68.0 (Jul 25, 2023)

  • Logtalk compiler and runtime:
  • ADDED: New logtalk_load_context/2 predicate entity_relation key to access the entity (being compiled) relations from its opening directive. After a suggestion and prototype code from Yurii Rashkovskii.
  • FIXED: Harmless singleton variable warnings in the logtalk built-in object when using some embedding scripts.
  • Prolog adapter and integration files:
  • UPDATED: GNU Prolog adapter file for the format/2-3 predicate changes in version 1.6.0.
  • UPDATED: The LVM adapter file to require version 6.3.0 or later.
  • FIXED: Workaround a LVM embedding application issue with loading of plug-in shared libraries.
  • Library:
  • ADDED: LVM support to the library parallel_logtalk_processes_setup.pl file.
  • Tools:
  • ADDED: Support to the logtalk_doclet.* scripts for using a GNU Prolog executable that includes Logtalk for better performance. With the help of Daniel Diaz.
  • IMPROVED: The lgtunit tool now prints all test execution times with nine decimal digits to simplify comparing test runs. Thanks to Daniel Diaz for the suggestion.
  • IMPROVED: The packs tool installed/0-1 and outdated/0-1 predicates to list packs in alphabetical order.
  • IMPROVED: The packs tool update/0 predicate to inform when a pack is orphaned.
  • IMPROVED: The packs tool update/1-3 predicates to print an error message when a pack is orphaned.
  • IMPROVED: When using the packs tool to install a pack using git archive, delete any empty archive file created when the remote connection fails.
  • IMPROVED: When using the packs tool to install a pack using curl, fail on HTTP server errors instead of creating an archive file with the HTTP error.
  • IMPROVED: The packs tool now reports the pack or registry download full command in case of failure instead of the URL or the asset path.
  • FIXED: Bug in the packs tool where installing a pack when its archive was previously downloaded using git archive would result in a mangled directory structure.
  • FIXED: Bug in the packs tool where installing a pack would fail when updating installed dependencies was required.
  • Examples:
  • IMPROVED: Simplify the Java example scripts that set the required CLASSPATH environment variable.
  • UPDATED: Notes of the tabling object on current limitations.
  • UPDATED: The errors example to illustrate errors occurring in the first source file line (mainly to test IDEs and text editors support).
  • Tests:
  • ADDED: Tests for the call_nth/2 predicate found on increasing number of Prolog systems.
  • ADDED: Additional tests for Prolog standard syntax for terms adapted from WG17 work.
  • ADDED: Additional tests for the Prolog standard asserta/1, assertz/1, bagof/3, copy_term/2, msort/2, setof/3, sort/2, and term_variables/2 predicates adapted from WG17 work.
  • ADDED: Additional tests for the Prolog standard write_term/2 predicate.
  • FIXED: Enable running the evaluable_property/2 predicate tests when using SWI-Prolog as the backend.
  • Installers and installation scripts:
  • CHANGED: The SWI-Prolog based Docker image to use swipl:stable instead of swipl:latest.
  • CHANGED: All embedding scripts to patch the backend adapter files to change the settings_file flag value from allow to deny when also embedding a setting file. This prevents the generated files to to try to load (another) setting file when loaded.
  • ADDED: LVM embedding scripts support for copying all plug-in foreign library files used by an application and generate an auxiliary loader.pl file.
  • ADDED: SWI-Prolog embedding scripts support for specifying the foreign object action when building standalone saved states. Contributed by Yurii Rashkovskii.
  • UPDATED: All embedding scripts to use expand_library_alias_paths(loader) instead of the deprecated loader file.

New in Logtalk 3.67.0 (Jul 6, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Two new linter flags, grammar_rules and arithmetic_expressions, to enable/disable the corresponding warnings.
  • IMPROVED: Abstract how the linter and make tools check if a module defines a predicate. While this fixes some issues with some backends (e.g. ECLiPSe), most systems don’t provide a reliable and clean solution for performing these checks.
  • UPDATED: The compiler to also handle the lsb/1 and msb/1 integer functions when lint checking (is)/2 goals.
  • FIXED: Linter check false positives for predicates called as non-terminals when the non-terminal is declared as dynamic.
  • Prolog adapter and integration files:
  • UPDATED: The Trealla Prolog adapter file to require version 2.18.7 or later.
  • ADDED: macOS .command files for JIProlog and Scryer Prolog.
  • Documentation:
  • CHANGED: Use SPDX-FileCopyrightText for most files copyright information.
  • ADDED: Section on writing debugging/logging messages from tests to the lgtunit tool documentation.
  • UPDATED: Documentation of the dictionaries library.
  • FIXED: Several typos in the Handbook section on Prolog integration and migration.
  • Library:
  • IMPROVED: Simplified some of the dictionaries library test assertions and changed most tests to check for expected determinism.
  • FIXED: The type library object type-checking of Unicode character codes to exclude non-character code points (i.e. reserved, surrogate, or non-assigned). Currently, this check is only accurate for LVM and SWI-Prolog as other backends don’t provide support for querying a Unicode code point category.
  • FIXED: The arbitrary library category generation of Unicode character codes to exclude non-character code points (i.e. reserved, surrogate, or non-assigned). Currently, this is only accurate for LVM and SWI-Prolog as other backends don’t provide support for querying a Unicode code point category.
  • FIXED: The arbitrary library category generation of Unicode atoms in the BMP to avoid atom normalization (as performed by some backends such as LVM) resulting in atoms with characters outside the BMP.
  • FIXED: The arbitrary library category generation of Unicode atoms of a given length to avoid atom normalization (as performed by some backends such as LVM) resulting in atoms with a different length.
  • Tools:
  • ADDED: Predicates rlibraries/1-2, libraries/1-2, rdirectories/1-2, directories/1-2, and files/1-2 to the lgtdoc tool.
  • ADDED: The packs::update/2-3 predicates now accept an install/1 boolean option to install a pack latest version when trying to update a pack that’s not installed.
  • ADDED: The lgtunit tool now detects and reports discrepancies between the number of tests run and the total number of tests defined in a test set. This usually implies bugs in the implementation of basic Prolog control constructs by the used backend system.
  • ADDED: Support to the logtalk_tester.* scripts for using a GNU Prolog executable that includes Logtalk for better performance. With the help of Daniel Diaz.
  • UPDATED: The help tool to support other operating-systems, notably BSD, that also provide the xdg-open command.
  • FIXED: A lgtunit tool bug when a test condition goal throws an error that would result in the test being reported twice (both as skipped and failed).
  • FIXED: Tests for the directory_dependency_diagram::rdirectory/2 and directory_load_diagram::rdirectory/2 library predicates.
  • FIXED: The debugger tool messages was still wrongly assuming that LVM didn’t provide a way to check if a call is deterministic.
  • FIXED: Prevent the lgtdoc tool rdirectory/1-2 predicates from failing when there are no sub-directories with loaded files.
  • Examples:
  • REMOVED: Now redundant cc example.
  • UPDATED: The assign_parameters, assumptions, cascade, delegates, inlining, metainterpreters, prototypes, and recipes example tests to use explicit assertions.
  • Tests:
  • CHANGED: Only run the log/2 arithmetic function tests when the function is implemented by the backend.
  • CHANGED: Splited the Unicode syntax tests in two sets, one for letter case and variables and one for escape sequences.
  • MOVED: Tests for the Logtalk implementation of the de facto Prolog standard conditional compilation directives from the cc example to the tests/logtalk/directives/conditional_compilation directory.
  • ADDED: Tests for the de facto Prolog standard conditional compilation directives.
  • ADDED: Additional tests for the Prolog standard call/1 and catch/3 control constructs.
  • ADDED: Additional tests for the Prolog call/2-N, open/3-4, setup_call_cleanup/3, and write_term/2 predicates.
  • ADDED: Tests for the evaluable_property/2 built-in predicate under discussion with Prolog system implementers.

New in Logtalk 3.66.0 (Jul 6, 2023)

  • Logtalk compiler and runtime:
  • ADDED: New parameter_variables, variable_names(Term), and singletons(Term) keys to the logtalk_load_context/2 built-in predicate.
  • ADDED: Two new meta-messages, [Stream,Prefix]>>Goal and [Stream]>>Goal, to the message printing mechanism. These new meta-messages allow calling a user-defined printing goal. The use of lambda expressions allow passing the message stream and prefix.
  • ADDED: Linter warning for predicates called as non-terminals from grammar rules.
  • ADDED: Linter warning for unclassified (but non-singleton and non-anonymous) variables in Free/Goal lambda expressions.
  • ADDED: Linter warning for object, predicate, and non-terminal aliases that are not distinct from the originals.
  • ADDED: Linter warning for (:)/2 goals when using a backend Prolog system that doesn’t support modules and when not compiling a module as an object. Thanks to Lindsey Spratt for the suggestion.
  • ADDED: Linter warning for use_module/1-2 file directives when using a backend Prolog system that doesn’t support modules.
  • ADDED: Linter warning for use_module/1-2 entity directives when using a backend Prolog system that doesn’t support modules and not compiling a module as an object.
  • IMPROVED: Reporting of calls to undefined predicates and unknown predicates from auxiliary clauses (e.g. generated while compiling lambda expressions).
  • FIXED: Ensure that the startup library alias is found before the runtime constructed pack library aliases.
  • FIXED: Linter warning for unknown entities to only report unknown Prolog modules when the backend system actually support modules.
  • FIXED: Linter warning for unknown messages to only report calls to unknown Prolog module predicates when the backend system actually support modules.
  • Prolog adapter and integration files:
  • UPDATED: The Trealla Prolog adapter file to require version 2.17.10 or later.
  • FIXED: The Quintus Prolog adapter file definition for the subsumes_term/2 standard predicate.
  • FIXED: The Scryer Prolog adapter filer to not declare module meta-predicates as built-in meta-predicates.
  • Documentation:
  • ADDED: Handbook description and examples of the new meta-messages.
  • IMPROVED: Handbook documentation of the dynamic/0, include/1, and mode/2 directives.
  • IMPROVED: Handbook documentation of the logtalk_library_path/2 predicate.
  • IMPROVED: Handbook documentation on definite clause grammars.
  • IMPROVED: Handbook documentation on disjunctions and conditionals linter flags.
  • IMPROVED: Documentation of the packs tool on requirements plus saving and restoring (virtual) environments.
  • IMPROVED: Documentation of the linter, lgtunit, and tutor tools.
  • Library:
  • CHANGED: The hook_objects library loader file to only load the prolog_module_hook/1 object when running on a backend Prolog system supporting modules.
  • ADDED: New ulid library for generating Universally Unique Lexicographically Sortable Identifiers.
  • REMOVED: The term library object definition for the deprecated and no longer declared vars/2 predicate.
  • CHANGED: Declare the termp library protocol variables/2 predicate deprecated.
  • IMPROVED: Simplify the term library object variant/2 predicate.
  • UPDATED: The os library for LVM to use the new date_time/7 built-in predicate when available.
  • FIXED: Delete dead code in the the csv and statistics libraries.
  • Tools:
  • IMPROVED: The dead_code_scanner tool no longer reports predicates listed in uses/2 or use_module/2 directives that are made available as scoped predicates by the object (or category) containing the directives.
  • IMPROVED: The dead_code_scanner tool no longer reports predicates defined in a complementing category when the complemented object contains or inherits a scope directive for the predicate.
  • IMPROVED: The tutor tool explanation for compiler errors when trying to redefine the meaning of predicates listed in uses/2 or use_module/2 directives.
  • UPDATED: The tutor tool to explain the new linter warnings.
  • UPDATED: The tutor tool to also explain the linter warning on missing else part in if-then-else and soft-cut control constructs.
  • FIXED: The packs tool describe/1-2 and directory/2 predicates when listing orphaned packs.
  • FIXED: Syntax error when loading the lgtdoc tool using the XSB backend.
  • FIXED: Bug in the validation code for the lgtdoc tool predicate entity_xsl_file and index_xsl_file options.
  • FIXED: Delete dead code in the the diagrams tool.
  • Examples:
  • IMPROVED: Documentation of the clustering, document_converter, and neo4j examples.
  • UPDATED: The errors example to illustrate lambda expression linter warnings and the new linter warnings.
  • UPDATED: The symbiosis example for Scryer Prolog.
  • FIXED: Example bench cases where predicates were called as non-terminals.
  • Tests:
  • ADDED: Additional tests for the Prolog standard op/3, number_chars/2 and number_codes/2 predicates.
  • ADDED: Additional tests for the de facto Prolog standard numbervars/3 predicate.
  • FIXED: Test for the current_op/3 predicate (compliance with the ISO/IEC 13211-1:1995(E) standard, section 8.14.4.1 NOTES).
  • Contributions:
  • UPDATED: Automate some of the xml_parser contribution original tests.
  • FIXED: Cases in the xml_parser contribution where predicates were called as non-terminals.
  • Installers and installation scripts:
  • FIXED: The Windows installer to write the Logtalk version to the registry DisplayVersion property. Fix contributed by the GitHub user SpecterShell.

New in Logtalk 3.65.0 (Apr 27, 2023)

  • Logtalk compiler and runtime:
  • CHANGED: Calls to unknown dynamic predicates in this from a category to throw an existence error instead of failing.
  • ADDED: Support to the (@)/1 control construct for calling a predicate in this from any category and from objects.
  • ADDED: Support for mode/2 directive zero_or_more_or_error and one_or_more_or_error number of proofs.
  • ADDED: Support for a info/2 directive since key to document the version that added a predicate.
  • Prolog adapter and integration files:
  • ADDED: LVM adapter file support for the new add_csv/3 built-in predicate introduced in version 6.0.0.
  • FIXED: The Scryer Prolog adapter file internal predicate for retrieving environment variable values. Thanks to Joe Taber for the bug report.
  • Documentation:
  • ADDED: Documentation for the (@)/1 control construct, which allows calling predicates in this from within categories.
  • IMPROVED: Handbook documentation on documenting predicates using the mode/2 directive.
  • Library:
  • IMPROVED: Reduced the number of atoms created when calling the atom::replace_sub_atom/4 library predicate.
  • FIXED: The git library when working with paths containing spaces.
  • FIXED: The os::date_time/7 library predicate for Scryer Prolog when the double_quotes flag is set to atom.
  • Tools:
  • CHANGED: The debugger tool notrace/0 predicate to only turn off tracing, thus allowing the debugger to continue to stop at defined spy points.
  • CHANGED: The lgtunit tool input/output testing predicates to always interpret relative paths as relative to the tests object path and to always open temporary files in the same directory as the tests object. This simplifies usage and improves reliability by not depending on the current working directory.
  • CHANGED: The lgtunit tool file_path/2 to also accept absolute file paths (further expanding them to resolve any remaining relative file path parts).
  • CHANGED: The lgtunit tool support for generating Allure reports now requires version 2.21.0 or later.
  • CHANGED: The lgtunit tool xunit_output and xunit_report formats to include as test case properties the test file, test lines, test URL, and test note (if any).
  • CHANGED: The lgtunit tool xunit_net_v2_output and xunit_net_v2_report formats now include the test note (if any) as a test trait for all outcomes.
  • CHANGED: The lgtunit tool run/1 predicate to also save and restore the current output stream and working directory when running tests. Moreover, the predicate now only fails when given a partial list of tests or when one of the test identifiers is not valid.
  • ADDED: New debugger tool port command N to turn off tracing.
  • ADDED: Support to the lgtdoc tool to output info/2 directive since keys.
  • ADDED: New lgtunit tool clean_directory/1 protected predicate to delete an empty directory if it exists.
  • IMPROVED: Reduced the number of atoms created when using the diagrams, lgtdoc, and lgtunit tools.
  • IMPROVED: The lgtunit tool now saves and restores the current working directory when running tests.
  • IMPROVED: The lgtunit tool file_path/2 and clean_file/1 utility predicates to expand the constructed absolute file path to resolve any remaining relative file path parts.
  • IMPROVED: The lgtunit tool documentation of the input/output testing predicates.
  • IMPROVED: The logtalk_allure_report scripts to check if Allure is installed and the required minimal version.
  • IMPROVED: The debugger tool debugging/0 predicate now also prints the maximum write depth for terms.
  • UPDATED: The logtalk_allure_report scripts to add a categories.json file to classify failed tests.
  • FIXED: The lgtunit tool xUnit format support to ensure that test URLs are correct when the suppressed path prefix ends with a slash.
  • FIXED: The logtalk_tester.ps1 script reporting of test sets with multiple or parametric test objects.
  • FIXED: The debugger tool to reset skipping and zapping state when tracing a new top-level query. Thanks to Lindsey Spratt for the bug report.
  • FIXED: The debugger tool notrace/0 and nodebug/0 predicates when the leap command as used before calling the predicates. Thanks to Lindsey Spratt for the bug report.
  • Examples:
  • FIXED: The tester.ps1 files for the clustering, document_converter, and neo4j Java examples to avoid PowerShell errors when running the logtalk_tester.ps1 automation script with options other than -p.
  • Tests:
  • ADDED: Tests for the (@)/1 control construct.
  • ADDED: Tests for the ISO Prolog standard line and block comment syntax.
  • IMPROVED: Add note/1 option to tests that are skipped due to being STO.
  • IMPROVED: Add note/1 option to tests that are skipped due the lack of a Prolog portable solution to specify text encoding.
  • UPDATED: The tests for the uses/2 directive for Scryer Prolog.
  • FIXED: The tests for the diagrams tool to use the Logtalk default scratch directory as the temporary directory for generated diagram files.
  • Installers and installation scripts:
  • ADDED: Preliminary support for Scryer Prolog to the Windows installer. Assumes a C:scryer-prologscryer-prolog.exe executable.
  • ADDED: Preliminary support for Trealla Prolog to the Windows installer. Assumes a C:tpl-windows-x64tpl.exe executable.

New in Logtalk 3.64.0 (Mar 28, 2023)

  • Logtalk compiler and runtime:
  • FIXED: Handling of dynamic/1 directives for predicates with no clauses in included files when using an include/1 argument in create_object/4 goals.
  • FIXED: Do not print a linter warning for a missing dynamic/1 directive when compiling a category if there isn’t a scope directive for the predicate.
  • FIXED: Performance issue where the compiler would not inline predicate definitions when the clause body goal uses parameter variables.
  • Prolog adapter and integration files:
  • CHANGED: The LVM adapter file to set the coinduction flag from the value of the unify_applies_occurs_check flag.
  • UPDATED: The LVM adapter file to expand calls to the open_db/2 built-in predicate from within objects and categories to ensure that all database predicates are visible.
  • UPDATED: All integration PowerShell scripts to require version 7.3 or later.
  • Library:
  • CHANGED: The csv library to throw error/2 exception terms and type-check the write_file/3 and write_stream/3 predicates.
  • ADDED: Experimental support for LVM to the java library.
  • ADDED: New java library array_to_list/2 and list_to_array/2 predicates. Unlike the now deprecated array_list/2 predicate, calls to these predicates can be inlined.
  • UPDATED: The java library to also abstract JPL jpl_map_element/2 and jpl_set_element/2 predicates for the SWI-Prolog and YAP backends.
  • FIXED: Description of the java library array_list/2 predicate.
  • Tools:
  • CHANGED: The logtalk_tester.sh script to only accept LVM long options for choosing between the standard and custom top-levels.
  • CHANGED: The lgtunit tool clean_file/1 predicate to always interpret relative paths as relative to the tests object path. This simplifies usage and improves reliability by not depending on the current working directory.
  • ADDED: New packs::installed/1 predicate to list all packs installed from a given registry.
  • IMPROVED: The registries::update/0 predicate to inform the user when no registry is defined.
  • UPDATED: All tool PowerShell scripts to require version 7.3 or later.
  • FIXED: The logtalk_tester.sh and logtalk_tester.ps1 scripts passing calling options to a sourced tester.sh and tester.ps1 scripts in the test set directories.
  • FIXED: The logtalk_tester.ps1 script handling of the -w option to avoid warnings when the scratch directories don’t exist.
  • Examples:
  • MOVED: Tests from the jpl example to the java library.
  • ADDED: New neo4j example of using the java library to interface with Neo4j.
  • ADDED: Tests for the document_converter example.
  • ADDED: Experimental support for LVM to the Java examples.
  • IMPROVED: Test set condition for the clustering example.
  • IMPROVED: The documentation of the bench example.
  • FIXED: The clustering and document_converter examples tester.sh scripts.
  • Tests:
  • ADDED: Additional tests for the Prolog standard bagof/3, findall/3, setof/3, (+)/1, call/1-N, and once/1, predicates.
  • ADDED: Additional tests for the de facto Prolog standard findall/4, format/2-3, and setup_call_cleanup/3 predicates.

New in Logtalk 3.63.0 (Feb 28, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Allow info/2 directive examples key examples to also use {true} and {false} for bindings.
  • FIXED: Spurious linter warnings of unknown calls to user predicates (and non-terminals) listed in uses/2 and use_module/2 directives when the predicates (and non-terminals) are also declared as dynamic or multifile in the same entity.
  • FIXED: Spurious suspicious call linter warnings when compiling calls to threaded meta-predicates. Thanks to Didier Garcin for the bug report.
  • FIXED: Linter warning for message-sending calls sent from an object to itself to check that it calls a locally defined predicate. Thanks to Paul Brown for the sample code.
  • FIXED: Compiler optimization for message-sending calls sent from an object to itself to only apply when calling a locally defined predicate.
  • Documentation:
  • ADDED: Handbook section on compiler formatting of errors, warnings, and comments.
  • Library:
  • IMPROVED: Documentation of the random library randomize/1 predicate. After feedback from Jonathon Doran.
  • Tools:
  • ADDED: GNU Prolog (1.5.1 or later version) support for the help tool experimental predicates for top-level inline browse and search of the Texinfo versions of the Handbook and APIs documentation.
  • IMPROVED: Performance of the diagrams tool when generating library dependency diagrams.
  • IMPROVED: The logtalk_tester.sh script to exit with an error code when the find command used to find test sets fails to recognize an option.
  • FIXED: The logtalk_tester.sh script -e option to work on Linux. Thanks to Lindsey Spratt for the bug report.
  • Examples:
  • ADDED: New units example, a Logtalk version of a GNU Prolog/CX parametric unit example.
  • FIXED: Unknown module predicate linter warnings in the constraints/sicstus example due to the length/2 and member/2 predicates being built-in.
  • Tests:
  • ADDED: Additional tests for the de facto Prolog standard format/2-3 predicates.
  • ADDED: Additional tests for the setup_call_cleanup/3 predicate adapted from the WG17 standardization proposal.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Syntax completion keywords for the jEdit, Sublime Text, TextMate, and Vim text editors.

New in Logtalk 3.62.0 (Feb 1, 2023)

  • Logtalk compiler and runtime:
  • ADDED: Message token tab(Expression) to the logtalk built-in object.
  • Prolog adapter and integration files
  • UPDATED: Simplify integration script for Trealla Prolog.
  • Documentation:
  • UPDATED: Man pages of integration scripts that accept a command-line option for silencing informative messages.
  • FIXED: Permanently redirected and broken hyperlinks in the Handbook and developer tools documentation.
  • Library:
  • ADDED: Preliminary version of sequence grammar rules to the grammars library.
  • IMPROVED: Documentation of the hook_objects library.
  • FIXED: Workaround issue with the SWI-Prolog implementation of the standard initialization/1 directive by skipping two tests of the timeout library.
  • Tools:
  • ADDED: Option to the logtalk_tester.sh and logtalk_tester.ps1 scripts for excluding directories using a regular expression.
  • ADDED: New debugger tool port option to skip debugging for the current goal but displaying all intermediate ports unleashed.
  • ADDED: New debugger tool port option to read and throw and exception term (as in the SICStus Prolog debugger).
  • ADDED: Experimental lgtenv.sh and lgtenv.ps1 scripts for creating packs virtual environments.
  • ADDED: New packs tool available/2 and versions/3 predicates.
  • ADDED: New update/1 option to the packs tool registry adding and pack installation predicates.
  • IMPROVED: The diagrams tool lgt2svg.sh and lgt2svg.ps1 scripts to alert the user when one or more files could not be converted (usually due to Graphviz crashes).
  • UPDATED: The update_svg_diagrams.sh script to exit with the same code as the called lgt2svg.sh script.
  • UPDATED: The packs tool to also recognize as a valid registry and pack readme file name case variations of NOTES with or without a .md or .txt extension.
  • FIXED: Document packs tool predicates possible exceptions.
  • FIXED: Missing type-checking of some arguments of some of the packs tool predicates.
  • FIXED: The debugger tool to consume any new-line code after the user answers a question at a leashed port to avoid an automatic creep when returning to the port after calling the goal.
  • Examples:
  • FIXED: Portability issue in the bench example that prevented running the flatten benchmark with some backend Prolog systems.
  • FIXED: Avoid a linter warning when loading the assumptions example.
  • Tests:
  • ADDED: Additional tests for the Prolog standard sub_atom/5 predicate. Contributed by Lindsey Spratt from the LVM development work.
  • ADDED: Additional test for the Prolog standard unify_with_occurs_check/2 predicate.
  • ADDED: Additional test for the de facto Prolog standard format/2-3 predicates for the ~0f format specifier. Test case contributed by Andrew Davison.
  • ADDED: Additional tests for the de facto Prolog standard format/2-3 predicates for the case where the number of arguments is larger than required by the format string.

New in Logtalk 3.61.0 (Dec 20, 2022)

  • Prolog adapter and integration files:
  • ADDED: PowerShell integration script for Trealla Prolog. Experimental.
  • UPDATED: The Trealla Prolog adapter file to require version 2.6.3 or later.
  • UPDATED: The GNU Prolog adapter file to set the Logtalk report flag to warnings when the --quiet command-line option is used by checking the new show_information flag introduced in version 1.5.1.
  • FIXED: The YAP adapter file to set the Logtalk report flag to warnings when the -q command-line option is used.
  • FIXED: The CxProlog adapter file to set the Logtalk report flag to warnings when the --quiet command-line option is used.
  • Library:
  • ADDED: New ids library for generating identifiers (Base64 encoded) with parametrizable text representation and number of bytes of randomness.
  • ADDED: New pairs library object key/2 and value/3 predicates. Also add tests for all the pairs library object predicates.
  • ADDED: Additional tests for the reader library line_to_chars/2 and line_to_codes/2 predicates.
  • Tools:
  • ADDED: Support for using git archive for installing packs to the packs tool. This simplifies pack installation and thus improves user experience when the packs registry server uses Single Sign-On (SSO) for authentication.
  • UPDATED: The packs::describe/1 predicate to also print the pack archive URL.
  • Ports:
  • FIXED: The metagol port examples loader to exclude loading the sorter example when using LVM as it doesn’t provide the required setarg/3 built-in predicate.
  • Tests:
  • ADDED: Additional tests for the standard mod/2 and rem/2 arithmetic functions.

New in Logtalk 3.60.0 (Nov 16, 2022)

  • Logtalk compiler and runtime:
  • ADDED: Linter check for the availability of predicates (and non-terminals) listed in uses/2 and use_module/2 directives. Controlled by the flag unknown_predicates.
  • IMPROVED: Readability of default flag values printed at startup.
  • FIXED: When reporting calls to non-standard arithmetic functions don’t describe them as built-in functions as most Prolog systems fail to provide reflection support to check or enumerate built-in functions.
  • Prolog adapter and integration files:
  • UPDATED: All backend adapter files to recognize .pro as a valid Prolog file name extension.
  • UPDATED: The Scryer Prolog adapter file to require version 0.9.1 or later.
  • Documentation:
  • ADDED: New lgtunit tool documentation section on working with test data files.
  • IMPROVED: The Handbook inheritance section on the predicate lookups order.
  • IMPROVED: The Handbook pages on some predicate directives by linking to the corresponding glossary definitions.
  • UPDATED: The manual installation instructions in the INSTALL.md file for zsh users.
  • Library:
  • ADDED: New json library parsing source line(Stream) to parse a single line from the given stream into a JSON term.
  • ADDED: Support for alternative term representations of JSON objects and JSON pairs to the json library.
  • FIXED: Bug in the json library handling of JSON escape sequences.
  • ADDED: Library reader::line_to_chars/2-3 predicates.
  • FIXED: Mode directives for the reader::line_to_codes/2-3 predicates.
  • FIXED: Also declare as synchronized the term_io predicates read_term_from_chars/4 and read_term_from_codes/4.
  • Tools:
  • CHANGED: Renamed the lgtdoc tool lgtdoc_missing_periods linter flag to lgtdoc_missing_punctuation and accept also exclamation and question marks.
  • ADDED: New linter warning to the lgtdoc tool for invalid dates in info/1 directives.
  • ADDED: New lgtunit tool file_path/2 protected predicate for computing absolute paths for file paths relative to test object paths.
  • IMPROVED: The lgtdoc tool linter warnings to include the file line number.
  • IMPROVED: More portable checking of the packs tool required command-line executables in POSIX systems.
  • FIXED: The logtalk_doclet.sh script when using a backend Prolog system that requires command-line passed queries to end with a period.
  • FIXED: The logtalk_tester.sh script to ensure that the searching for a tester.sh file to be sourced is restricted to the test set directory.
  • FIXED: The logtalk_tester.ps1 script sourcing of tester.ps1 files found in the test set directory.
  • FIXED: List of dependencies for the developer tools for Ubuntu.
  • Examples:
  • IMPROVED: Documentation of the people example.
  • FIXED: Test for the jpl example to correctly compare floats.
  • Tests:
  • ADDED: Additional tests for the Prolog standard atom_chars/2, atom_codes/2, number_chars/2, and number_codes/2 predicates.
  • UPDATED: Several Prolog compliance tests to use the new lgtunit tool file_path/2 predicate.
  • Installers and installation scripts:
  • IMPROVED: The logtalk_user_setup.sh and logtalk_user_setup.ps1 scripts to detect when the LOGTALKHOME and LOGTALKUSER environment variables point to the same directory and refuse to run.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Support for escape sequences inside double-quoted terms to most text editors and syntax highlighters.
  • UPDATED: Syntax highlighting test files to test escape sequences inside double-quoted terms.
  • FIXED: Deleted accidentally committed temporary files in the coding/tests directory.

New in Logtalk 3.59.0 (Oct 19, 2022)

  • Logtalk compiler and runtime:
  • CHANGED: The user pseudo-object to declare the before/3 and after/3 predicates multifile to avoid predicate existence errors when using this object as monitor without definitions for these predicates in user.
  • ADDED: Linter warning for predicate rules where the body is a naked meta-variable or contains a control construct where a cut-transparent argument is a naked meta-variable.
  • FIXED: The declared_in/2, defined_in/2, and redefined_from/2 predicate properties when the predicate is being declared or (re)defined in an included file.
  • FIXED: The compiler to avoid a trivial failure warning with some Prolog backends when checking the encoding_directive flag value.
  • Prolog adapter and integration files:
  • UPDATED: The Ciao Prolog adapter file to require version 1.22.0 or later.
  • UPDATED: All Bash shell integration scripts to also look into the /opt/homebrew/share directory (used by Homebrew on Apple Silicon) when the LOGTALKHOME environment variable is not defined.
  • UPDATED: All PowerShell integration scripts to check for and require version 7.2 or later.
  • Documentation:
  • ADDED: Glossary definitions for “meta-variable” and “naked meta-variable”.
  • IMPROVED: Handbook section on inline formatting in info/1-2 directives comments text.
  • IMPROVED: Handbook section on documenting entities and predicates.
  • IMPROVED: Handbook section on event-driven programming.
  • FIXED: Added missing Handbook and APIs documentation sphinx_highlight.js files.
  • Library:
  • ADDED: Predicates read_term_from_chars/4 and read_term_from_codes/4 to the term_io library.
  • IMPROVED: The documentation of the random and types libraries.
  • FIXED: Definition of the os::time_stamp/1 library predicate for Ciao Prolog.
  • Tools:
  • CHANGED: The lgtdoc tool to use its own linter flag to control warnings about missing documentation directives.
  • ADDED: Linter flags to the lgtdoc tool to warn on non-standard predicate exceptions and missing periods at the end of documentation text in info/1-2 directives.
  • IMPROVED: The packs tool checking for pack version arguments by defining a custom type.
  • UPDATED: All PowerShell tool scripts to check for and require version 7.2 or later.
  • UPDATED: The lgtunit tool to print a warning on invalid (non QuickCheck) test options instead of just ignoring them.
  • UPDATED: The tutor tool to explain the new linter warning on naked meta-variables in cut-transparent control constructs.
  • IMPROVED: Simplify the lgtdoc tool generated reStructuredText files.
  • FIXED: Missing new-line after index titles in the output of the lgtdoc tool logtalk_index_to_txt.xsl XSLT file.
  • FIXED: Cases in the lgtdoc tool where looking for properties of referenced but not loaded entities could result in current_protocol/1 or protocol_property/2 exceptions.
  • FIXED: The logtalk_tester.ps1 script to report the Logtalk and backend Prolog versions as expected when using the default verbose option.
  • FIXED: Missing implementation of logtalk_tester.ps1 script -i option.
  • Examples:
  • UPDATED: The errors tool to illustrate the new linter warning on naked meta-variables in cut-transparent control constructs.
  • FIXED: The constraints/sicstus example linter warnings on non-terminals called as predicates.
  • FIXED: The named_databases example to only load in supported backends.
  • Tests:
  • CHANGED: Skip stream_property/2 tests that check eof_action/1 for output streams as they are arguably non-sensical. Thanks to Per Mildner for feedback on these tests.
  • CHANGED: Test for the meta_predicate/1 directive to accept normal argument indicators other than * (e.g. ?) as common on some Prolog systems. Thanks to Per Mildner for feedback on these tests.
  • ADDED: Tests for the syntax and semantics of the discontiguous/1 Prolog standard directive.
  • ADDED: Additional tests for the Prolog standard current_predicate/1 and callable/1 predicates.
  • Ports:
  • IMPROVED: Documentation of the fcube port public predicates.
  • Installers and installation scripts:
  • UPDATED: The manual installation script to call install-info after adding the Handbook and Logtalk APIs info files to the info directory.
  • UPDATED: The Windows installation script to also detect SICStus Prolog 4.8.x versions.
  • UPDATED: All PowerShell embedding scripts to check for and require version 7.2 or later.

New in Logtalk 3.58.0 (Oct 19, 2022)

  • Logtalk compiler and runtime:
  • ADDED: Compilation warning when compiling a logtalk_load_context/2 goal with an invalid key.
  • ADDED: Linter warning for non-terminals called as predicates instead of via the phrase/2-3 built-in methods.
  • FIXED: Detect conflicts between dynamic/1 directives and uses/2 and use_module/2 directives.
  • FIXED: The compiler to not throw an instantiation error when the body of a clause is a variable; these clauses are conformant with the ISO Prolog Core standard and this fix also ensures consistency of the handling of naked variables in transparent control constructs.
  • Prolog adapter and integration files:
  • ADDED: Support for calling LVM disk predicate built-in predicates from categories.
  • UPDATED: The Trealla Prolog adapter file to require version 2.2.5 or later.
  • Documentation:
  • IMPROVED: Handbook documentation of the initialization/1 directive and the logtalk_load_context/2 built-in predicate.
  • UPDATED: List of required dependencies to build the Handbook final formats.
  • Library:
  • CHANGED: Use a portable os::is_absolute_file_name/1 predicate definition for all backends for consistency and improve the predicate documentation.
  • REMOVED: Support for the type clause_or_partial_clause from the types and arbitrary libraries.
  • ADDED: New [] and {} edge cases for atoms to the arbitrary library.
  • FIXED: The os library delete_directory/1, directory_files/2, environment_variable/1, and file_permission/2 predicates for YAP.
  • FIXED: The definition of the type clause in the types and arbitrary libraries to allow a naked variable body as per the ISO Prolog Core standard.
  • Tools:
  • CHANGED: The help tool to provide a dedicated entity/1 predicate for help on entities (objects, protocols, or categories).
  • CHANGED: The lgtunit::quick_check/3 predicate now uses reified error/4 and failed/3 results that include as last argument the test seed.
  • CHANGED: The lgtunit tool now reports an error on wrong QuickCheck options instead of silently using default option values.
  • ADDED: A convenient global list of most of the developer tool requirements per operating-system.
  • ADDED: Experimental support to the help tool to browse and search inline at the top-level interpreter the Texinfo versions of the Handbook and APIs documentation. Currently requires Ciao Prolog, ECLiPSe, LVM, SICStus Prolog, SWI-Prolog, Trealla Prolog, or XSB as the backend running on a POSIX system.
  • ADDED: The lgtunit QuickCheck test dialects and predicates now also accept a pb/2 option to show an ASCII progress bar.
  • IMPROVED: The lgtunit::quick_check/1-2 predicates now also print the test seed when a counter-example is found.
  • IMPROVED: The lgtunit tool documentation of the test/2-3 test dialect valid outcomes.
  • IMPROVED: The help tool feedback when the queried library or entity is not found.
  • IMPROVED: The tutor tool explanation for the linter warning on findall/3 goals used to backtrack over all solutions of a goal without collecting them.
  • UPDATED: The tutor tool for the new linter warning on non-terminals being called as predicates.
  • FIXED: Missing message tokenization in the packs tool when printing a pack/registry installation directory.
  • Examples:
  • UPDATED: Reorganize all Net-Clause Language (NCL) examples in the new examples/ncl directory, including the figures individual example.
  • UPDATED: The errors example to illustrate the new linter warning on non-terminals being called as predicates.
  • FIXED: Typo in the sample queries of the document_converter example.
  • FIXED: The adventure and bench examples linter warnings for non-terminals called as predicates.
  • Tests:
  • ADDED: Additional tests for the atom_concat/3, number_chars/2, number_codes/2, and setof/3 standard Prolog predicates.
  • ADDED: Additional test for the optional '|' infix operator for a compliant definition.
  • ADDED: Additional tests for double-quoted terms syntax (escaped double-quote).
  • Ports:
  • ADDED: Port of FCube: An Efficient Prover for Intuitionistic Propositional Logic by Mauro Ferrari, Camillo Fiorentini, and Guido Fiorino.
  • Contributions:
  • FIXED: The xml_parser contribution linter warnings for non-terminals called as predicates.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Code snippets for Emacs. Contributed by Paul Brown.
  • Installers and installation scripts:
  • ADDED: Experimental PowerShell version of the built_manuals.sh script.
  • ADDED: Experimental embedding script for Ciao Prolog.
  • IMPROVED: Documentation of the sample embedding scripts.
  • IMPROVED: Simplified embedding scripts for ECLiPSe.
  • UPDATED: The manual install script and the Linux RPM installer to create links to the .info versions of the Handbook and APIs documentation in the default info directory.
  • UPDATED: The release build script to include all final formats for the Handbook and APIs documentation in the generated archives and installers.
  • FIXED: The update_man_html_versions.sh, update_html_docs.*, and update_svg_diagrams.* scripts to allow running them from any directory.

New in Logtalk 3.57.0 (Jul 26, 2022)

  • Logtalk compiler and runtime:
  • CHANGED: When expanding the goal argument of an initialization/1, if/1, or elif/1 directive inside an entity, use any preceding, applicable uses/2 or use_module/2 directive. This is mainly useful when compiling Prolog modules as objects as the user can always write a (::)/2 or (:)/2 goal instead.
  • CHANGED: Separate linter warnings for conditionals from other suspicious calls warnings. Controlled by the new conditionals flag, whose default value is warning.
  • ADDED: Linter warnings for unknown messages sent to loaded objects (controlled by the unknown_predicates flag).
  • ADDED: Compile otherwise -> Goal and otherwise *-> Goal constructs as Goal when otherwise/0 is a built-in predicate, printing a deprecated linter warning instead of warning about a missing else part.
  • IMPROVED: Distinguish between duplicated and conflicting predicate references in multiple uses/2 or use_module/2 directives. The former are now reported as linter warnings (controlled by the duplicated_directives flag) instead of compilation errors.
  • IMPROVED: More informative permission errors for predicate conflicts in uses/2 or use_module/2 directives.
  • IMPROVED: Linter warnings for the (->)/2 and (*->)/2 control constructs.
  • IMPROVED: Text of warnings for missing predicate directives.
  • FIXED: Allow making a predicate (or non-terminal) listed in a uses/2 or a use_module/2 directive available as public, protected, or private predicate without requiring defining a protocol.
  • FIXED: Internal compiler predicate that retrieves the source file context when the compilation mode is runtime.
  • FIXED: Compiler optimization bug when calling the phrase/2-3 predicates with pre-compiled closure arguments. Thanks to Lindsey Spratt and Jacob Friedman for the bug report.
  • Prolog adapter and integration files:
  • UPDATED: The LVM adapter file to require version 4.1.0 or later.
  • UPDATED: The SICStus Prolog adapter file list of proprietary predicate properties.
  • FIXED: The CxProlog, SICStus Prolog, and XSB adapter files missing the meta-predicate property for the setup_call_cleanup/3 predicate when not built-in.
  • FIXED: The SWI-Prolog adapter file to recognize the new utf16le and utf16be text encoding names.
  • Documentation:
  • ADDED: A Handbook section on documenting predicate exceptions.
  • ADDED: Handbook sections on ports and contributions distributed with Logtalk.
  • IMPROVED: Handbook documentation of the if/1, elif/1, mode/2, and uses/2 directives.
  • IMPROVED: Handbook documentation of the logtalk::print_message/3 predicate.
  • IMPROVED: Handbook section on Prolog integration and migration.
  • IMPROVED: Handbook section on compiling Prolog modules as objects.
  • IMPROVED: The APIs documentation now include links to library descriptions in the Handbook.
  • UPDATED: The packs tool documentation section on pack signature checking.
  • UPDATED: Notes on the Windows installer.
  • Library:
  • CHANGED: The cvs/3 library object to use a default separator based on the extension of the file to be parsed/written when possible.
  • CHANGED: The csv library predicates read_file_by_line/2-3 to skip empty lines in CSV files.
  • CHANGED: The statistics library to depend on the types library.
  • ADDED: Library genint supporting application global and object local named generators for increasing positive integers.
  • ADDED: Predicates min_max/3 and modes/2 to the types and statistics libraries.
  • ADDED: Predicates fractile/3 and weighted_mean/3 to the statistics library.
  • ADDED: Predicate integer::sequence/4 to the types library.
  • ADDED: Support for LVM to the timeout library.
  • ADDED: Additional tests for the timeout library.
  • ADDED: Parametric objects write_to_file_hook/1-2 to the hook_objects library.
  • ADDED: Shortcut tsv object to the csv library for parsing TSV files.
  • IMPROVED: Tests for the csv library.
  • UPDATED: The gensym library to support both application global and object local generators.
  • FIXED: The arbitrary category shrink/3 predicate for number and compound types to fail instead of throwing an exception when the value to be shrink is not of the expected type.
  • FIXED: Bug in the csv library preventing parsing of TSV files in the presence of empty fields.
  • FIXED: Malformed TSV test file in the csv library.
  • Tools:
  • REMOVED: Support for the Sablotron XSLT processor from the lgtdoc tool.
  • CHANGED: The semantics of the packs tool directory/1 predicate for consistency with the directory/2 and readme/1-2 predicates. The old semantics are now available from the new prefix/1-2 predicates.
  • CHANGED: The packs tool restore/2 predicate to use by default the force(true) option, same as the restore/1 predicate.
  • CHANGED: The packs tool safety hooks to also accept underscores in URLs and file paths.
  • ADDED: Predicates registry_protocol::note/2 and pack_protocol::note/3 to the packs tool.
  • ADDED: Support to the packs tool for registry and pack archives using .tar.gz and .tar.bz2 extensions. Also list in documentation all valid archive formats.
  • ADDED: Support to the packs tool for passing extra command-line options to curl (e.g. for use with pack registry servers requiring authentication), bsdtar (e.g. for decrypting archives), and gpg.
  • ADDED: Support to the lgtdoc tool to generate links from library APIs to library descriptions. These links can be explicitly-qualified by using the lgt2rst scripts new -l option to pass the mapping name.
  • ADDED: Intersphinx mapping to the Logtalk APIs documentation to the Sphinx template file for the lgtdoc tool.
  • IMPROVED: The packs tool to check the availability of a new version of a pack before uninstalling the older version when updating.
  • IMPROVED: The tutor tool explanations for missing predicate directives.
  • UPDATED: The packs tool to also recognize readme files with .txt extensions to better support Prolog packs.
  • UPDATED: The tutor tool to give specific advise when the user is trying to use the common Prolog top-level shortcut for loading files as a directive.
  • UPDATED: The tutor tool for the use of deprecated (->)/2 and (*->)/2 programming idioms using a otherwise/0 built-in predicate.
  • FIXED: The packs::install/1-2 tool predicates to use all default options.
  • FIXED: Typo in two packs tool warning messages format.
  • FIXED: Workaround issues with operating-system file-systems that are not case-sensitive but are case-preserving in the implementation of the packs tool readme_file_path/2 predicate.
  • FIXED: The packs tool to only warn about a non-satisfied backend version dependency if running on that backend.
  • FIXED: Bug in the packs tool when installing a pack from a directory with some backends on Windows.
  • FIXED: Workaround ECLiPSe internal file path representation on Windows when running the packs tool tests.
  • FIXED: Workaround potential compilation issues in tools that use unification goals with ::/1-2 arguments due to user redefinition of the standard ::/1-2 Logtalk operators.
  • FIXED: Cases in the diagrams tool where excluded files would be included in generated diagrams.
  • Examples:
  • UPDATED: The diamonds example to illustrate using the alias/2 directive to access all inherited definitions for the same predicate.
  • Tests:
  • ADDED: Additional test for the meta_non_terminal/1 directive.
  • ADDED: Additional tests for the Prolog standard is/2 predicate.
  • UPDATED: Enable running the prolog/unicode/encodings test set when running on SWI-Prolog.

New in Logtalk 3.56.0 (Jun 14, 2022)

  • Logtalk compiler and runtime:
  • ADDED: Support for calls to the database and reflection built-in methods where the predicate argument is only bound at runtime and is listed in a uses/2 or use_module/2 directive.
  • ADDED: Support for using zero_or_error and zero_or_one_or_error number of proofs arguments in mode/2 directives.
  • ADDED: Linter warnings for missing parenthesis around if-then-else and disjunction control constructs in the presence of cuts in the first argument.
  • ADDED: Linter warnings for if-then-else and soft-cut control constructs where the test is a unification between a variable and a ground term.
  • ADDED: Linter warning for naming of files that define a single entity as per coding guidelines. Controlled by the naming linter flag.
  • IMPROVED: Generalized the linter check for findall/3 goals used in place of forall/2 goals.
  • FIXED: Cases where name conflicts between built-in methods and predicates listed in public/1, protected/1, private/1, uses/2 and use_module/2 directives would not be reported.
  • FIXED: Wrong arity in the compiler declaration of the forall/2 built-in method.
  • FIXED: Bugs in the implementation of the asserta/2 and assertz/2 built-in methods where the second argument would not be bound in all cases.
  • Prolog adapter and integration files:
  • ADDED: Experimental Scryer Prolog adapter file support for compiling Prolog modules as objects.
  • IMPROVED: The setup_call_cleanup/3 predicate definition for SICStus Prolog.
  • Documentation:
  • UPDATED: The lgtunit tool documentation sections on term-expansion of test objects, skipping tests, testing non-deterministic predicates, debugging tests, and backend timeout predicates.
  • FIXED: The arbitrary library documentation on defining new arbitrary term generators.
  • Library:
  • ADDED: Predicate numberlist::median/2 to the types library.
  • ADDED: Tests for custom generators to the arbitrary library category.
  • IMPROVED: Performance of the arbitrary library category generation of Unicode code points.
  • IMPROVED: API documentation of the meta_compiler, statistics, and term_io libraries.
  • IMPROVED: The expecteds and optionals libraries tests to use explicit assertions.
  • IMPROVED: The arbitrary library performance for several types.
  • FIXED: The arbitrary library to not generate empty atoms for the callable type.
  • FIXED: The arbitrary library category to not generate surrogate code points as edge cases for the unicode_full character set.
  • FIXED: The arbitrary library category generation of Unicode code points included the non-valid code points 65535 and 1114111 as edge cases.
  • FIXED: Typos in the mode/2 directives for the inorder/2 and postorder/2 predicates of the bintree library object.
  • FIXED: Typos in the mode/2 directives for the os library file_size/2, file_modification_time/2, and file_permission/2 predicates.
  • FIXED: Typo in the mode/2 directive for the remove_duplicates/2 predicate in the listp and varlistp library protocols.
  • FIXED: The definition of the os::cpu_time/1 predicate for Tau Prolog.
  • Tools:
  • CHANGED: The lgtunit::quick_check/3 predicate to report a broken/2 reified result when the user-defined testing setup is broken.
  • CHANGED: The lgtunit tool code coverage report format to enable reporting all test object parameterizations and files.
  • CHANGED: The lgtunit tool messages in case of failed tests or steps to take into account the suppress_path_prefix flag when printing file paths.
  • CHANGED: Renamed the code_metrics tool entity_score//2 non-terminal to format_entity_score//2.
  • CHANGED: The default value for the diagrams tool omit_path_prefixes/1 option from an empty list to a list with the user home directory.
  • ADDED: Linter warnings for missing documentation directives to the lgtdoc tool.
  • ADDED: Support for printing clause usage stats to the ports_profiler tool.
  • IMPROVED: API documentation of the debugger and lgtunit tools.
  • IMPROVED: Minimized use of the term_io library by the diagrams tool.
  • UPDATED: The lgtunit tool to explicitly handle and report QuickCheck test generation errors and failures.
  • UPDATED: The lgtunit tool to handle unexpected QuickCheck test errors due to backend bugs by printing an informative message instead of reporting an unknown error message term.
  • UPDATED: The tutor tool for the new linter warnings.
  • FIXED: Typo in the mode/2 directive for the debug_messages::disable/1 predicate.
  • FIXED: Typo in the mode/2 directive for the packs::save/2 predicate.
  • FIXED: The lgtunit tool QuickCheck implementation of the verbose option to also apply when a generated test case throws an error.
  • FIXED: If-then-else linter warning in the diagrams tool xref_diagram/1 object.
  • Examples:
  • IMPROVED: The aliases example tests to use explicit assertions.
  • UPDATED: Documentation and sample queries of the cc example.
  • UPDATED: The errors example to illustrate the linter warning for misuse of the standard findall/3 predicate and the new if-then-else, soft-cut, and disjunction linter warnings.
  • FIXED: The bench example to only load the boyer and chat_parser benchmarks when the backend provides statistics/2 as a built-in predicate.
  • FIXED: The benchmarks and module_aliases examples when using the Scryer Prolog backend.
  • FIXED: If-then-else linter warnings in the dcgs and searching examples.
  • Contributions:
  • FIXED: Bug in the verdi_neruda implementation of the semi-naive bottom-up interpreter for general (stratified) logic programs.
  • Ports:
  • FIXED: Several if-then-else linter warnings in the toychr port.
  • Tests:
  • ADDED: Additional tests for the database methods that take a clause reference.
  • ADDED: Additional tests for the ISO Prolog standard char_code/2, current_op/3, and op/3 built-in predicates.
  • ADDED: Additional tests for the atomic_list_concat/2-3 and atomic_concat/3 predicates.
  • UPDATED: The predicate_property/2 predicate tests to accept bagof/3 and setof/3 meta-predicate templates that use ^ instead of 0 for the meta-argument.
  • FIXED: Tests for the Logtalk {}/1 control construct when the expected error may contain a module-qualified term.
  • FIXED: Tests for the Prolog (,)/2, (;)/2, (->)/2-3, (*->)/2-3, abolish/1, bagof/3, call/1, call/2-N, catch/3, findall/3-4, if/3, once/1, and setof/3 control constructs and predicates when the expected error may contain a module-qualified term.

New in Logtalk 3.55.0 (Apr 28, 2022)

  • Prolog adapter and integration files:
  • ADDED: Experimental Windows PowerShell integration scripts for selected backend Prolog systems. Collaborative work with Hans N. Beck.
  • UPDATED: The Scryer Prolog adapter file to enable modules support.
  • Documentation:
  • ADDED: Handbook section on customizing term writing when using the debugger tool.
  • IMPROVED: Handbook sections on objects, inheritance, defining grammar rules, and defining meta-predicates.
  • IMPROVED: Handbook section on the {}/1 control construct.
  • IMPROVED: Handbook section on Prolog nomenclature.
  • IMPROVED: Documentation of the Windows installer.
  • Library:
  • ADDED: Library file packs_loader.lgt for loading all installed packs.
  • UPDATED: The os::copy_file/2 library predicate for Tau Prolog to use its native definition when available.
  • Examples:
  • ADDED: PowerShell scripts for setting the CLASSPATH environment variable to the clustering and document_converter examples.
  • UPDATED: The dcgs example to illustrate the definition and use of meta-non-terminals.
  • Tools:
  • CHANGED: The diagrams, lgtdoc, and wrapper tools to convert paths to internal path syntax when normalizing directories passed as options.
  • ADDED: Experimental PowerShell versions of the update_html_docs.sh, update_svg_diagrams.sh, logtalk_allure_report.sh, logtalk_doclet.sh, and logtalk_tester.sh scripts.
  • IMPROVED: Documentation of the issue_creator and packs tools.
  • UPDATED: Documentation of the lgtdoc tool for the new PowerShell scripts.
  • UPDATED: The lgtdoc tool lgt2pdf.sh script to support using the FOP 2.x processor.
  • FIXED: The lgtdoc Bash shell scripts help text content failed to list the version option.
  • FIXED: Broken lgtdoc tool logtalk_entity_to_txt.xsl file.
  • FIXED: The lgtdoc tool lgt2txt.sh script to use the correct XSLT files.
  • FIXED: The lgtdoc tool lgt2rst.sh script to generate correct index.rst files when indexing a directory of XML documenting files without any index XML file.
  • FIXED: The logtalk_doclet.sh script usage help function omission of the path suppress option.
  • FIXED: The logtalk_doclet.sh script spurious but harmless warnings when no doclets are found.
  • FIXED: The logtalk_tester.sh script to also detect timeouts using signal 124.
  • Tests:
  • ADDED: Basic tests for the new occurs_check flag that is becoming de facto standard.
  • ADDED: Additional tests for the Prolog unbounded integer arithmetic support.
  • ADDED: Additional tests for the Prolog standard (*)/2, (/)/2, (^)/2, (**)/2, and div/2 arithmetic functions.
  • ADDED: Sanity tests for Prolog standard (+)/1-2, (-)/1-2, and ()/1 arithmetic functions.
  • ADDED: Integer overflow tests for the succ/2 and plus/3 predicates.
  • ADDED: Additional tests for the Prolog standard retract/1, retractall/1, subsumes_term/2, and write_term/3 predicates.
  • IMPROVED: Tests for the Prolog standard (//)/2 arithmetic function.
  • FIXED: Portability of the Prolog de facto standard (*->)/2 control construct tests.
  • Installers and installation scripts:
  • CHANGED: The embedding scripts default values for the paths and settings files to, respectively, paths.pl and settings-embedding-sample.lgt.
  • CHANGED: The Windows installer and the logtalk_user_setup.ps1 script to no longer make available the deprecated .js JScript scripts and their corresponding .bat files in the system path (replaced by the PowerShell scripts).
  • ADDED: Experimental Windows PowerShell logtalk_user_setup.ps1 script. Collaborative work with Hans N. Beck.
  • ADDED: Experimental Windows PowerShell embedding scripts for selected backends. Collaborative work with Hans N. Beck.
  • IMPROVED: Sample embedding script examples and documentation.
  • UPDATED: Sample embedding scripts to allow specifying the temporary directory to be used for intermediate files. This option is required for some backends when running the scripts on windows.
  • UPDATED: The update_html_docs.sh and update_svg_diagrams.sh scripts to optionally generate packs documentation and diagrams.
  • UPDATED: The Windows installer to copy the PowerShell integration and setup scripts to the system directory.
  • FIXED: The Windows installer to detect additional YAP installations.
  • FIXED: The logtalk_user_setup.js script to avoid an error when creating the symbolic link to the lgt2svg.js script.
  • FIXED: Outdated but harmless commands in the logtalk_user_setup.sh script.
  • FIXED: Broken but not required sanity test in the update_html_docs.sh and update_svg_diagrams.sh scripts.
  • FIXED: The update_html_docs.sh and update_svg_diagrams.sh scripts when using some of the non-default backends.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Documentation of the Visual Studio Code text editor Logtalk plug-in.

New in Logtalk 3.54.0 (Mar 23, 2022)

  • Logtalk compiler and runtime:
  • ADDED: Linter warning for catch/3 goals that catch all exceptions by using an anonymous variable in the second argument. Controlled by the new catchall_catch flag, whose default value is silent.
  • ADDED: Linter warning for missing predicate scope directive when a info/2 directive exists.
  • ADDED: Support to user-defined linter warning messages for suspicious calls.
  • FIXED: Ensure that intermediate Prolog files are disregarded when reloading a file due to different compilation flags instead of timestamp differences when compiling with the clean flag turned off.
  • Prolog adapter and integration files:
  • UPDATED: The Ciao Prolog adapter file to require version 1.21.0 or later.
  • UPDATED: The LVM adapter file to require version 3.3.0 or later.
  • UPDATED: The Scryer Prolog adapter file to require version 0.9.0 or later.
  • UPDATED: The Tau Prolog adapter file to require version 0.3.2 or later.
  • UPDATED: The Trealla Prolog adapter file to require version 1.23.14 or later.
  • UPDATED: The ECLiPSe adapter file to suppress intermediate Prolog file compilation log messages when compiling and loading Logtalk source files.
  • Documentation:
  • ADDED: Handbook section on the logic and control built-in public methods.
  • ADDED: Handbook documentation for the new catchall_catch linter flag.
  • IMPROVED: Documentation of the git library.
  • IMPROVED: Documentation of the developer tools on applying them to plain Prolog code.
  • IMPROVED: Handbook documentation on the term-expansion mechanism.
  • UPDATED: The packs tool documentation on known issues.
  • FIXED: Mention the soft-cut control construct in the Handbook section on messages broadcasting.
  • FIXED: Portability notes in the documentation of the format library.
  • FIXED: The settings-sample.lgt sample code for handling third-party libraries to avoid an endless loop due to the packs support. Note that this sample code is deprecated by the packs tool. Thanks to Paul Brown for the bug report.
  • Library:
  • CHANGED: The set(_Type_) object now takes into account the comparingp protocol. Thanks to Adrián Arroyo Calle for his contribution.
  • CHANGED: The basic_types library loader to also load the comparingp protocol.
  • CHANGED: The types library termp protocol to extend the comparingp protocol and the term and number objects to provide implementations of the comparison predicates.
  • CHANGED: Implementation of the os::copy_file/2 library predicate for Trealla Prolog to use the new native built-in predicate introduced in version 1.23.14.
  • ADDED: New grammars library providing DCGs for common parsing tasks.
  • ADDED: New union_find library, a portable port of a Prolog library written by José Antonio Riaza Valverde.
  • ADDED: Predicates group_sorted_by_key/2 and group_consecutive_by_key/2 to the pairs library object. Deprecated the group_by_key/2 predicate.
  • ADDED: Linter checks for format/2-3 goals to the format library.
  • ADDED: Parametric object ` object_wrapper_hook/2 to the hook_objects` library.
  • ADDED: Implementation for the os::copy_file/2 library predicate for Ciao Prolog, ECLiPSe, JIProlog, and Tau Prolog.
  • ADDED: Types in_character, in_character(CharSet), in_character_code, in_character_code(CharSet), and in_byte to the arbitrary and types libraries.
  • IMPROVED: Performance of the csv library when parsing large CSV files.
  • IMPROVED: The type library object implementation of the atom(CharSet), atom(CharSet, Length), and non_empty_atom(CharSet) types to avoid using catch/3 goals.
  • FIXED: Two tests for the nested_dictionaries library that used unification goals as assertions.
  • FIXED: Implementation of the os::file_permission/2 predicate for Ciao Prolog to throw an exception on non-existing files.
  • FIXED: Implementation of the os library predicates change_directory/2 and directory_files/2 for Scryer Prolog to throw an exception on non-existing directories.
  • FIXED: Implementation of the os::change_directory/2 library predicate for YAP to throw an exception on a non-existing directory.
  • FIXED: The os library date_time/7 and operating_system_type/1 predicates for Scryer Prolog when the double_quotes flag is set to codes.
  • FIXED: Implementation of the os library shell/1 and sleep/1 library predicates for B-Prolog when running on Windows.
  • FIXED: The os::path_concat/3 library predicate to use the os::is_absolute_file_name/1 predicate to check for absolute paths.
  • FIXED: Tests for the json library to be run only once.
  • Tools:
  • CHANGED: The lgtunit tool to allow sharing variables between a test body and its setup/1 and cleanup/1 options. Thanks to Trystan Lapointe-Majumdar for the use case.
  • ADDED: A lgtunit tool lint check for the use of unification goals in test outcome assertions.
  • ADDED: Predicate packs::outdated/1 to list outdated packs from a registry.
  • IMPROVED: Performance of the ports_profiler tool.
  • UPDATED: The help tool for the new Handbook logic and control method pages.
  • UPDATED: The tutor tool to explain compiler warnings when using the new catchall_catch linter flag.
  • UPDATED: The Windows lgt2rst.js JScript to provide the same support for a user-defined custom.css file when called with the -s option to customize the Sphinx Read the Docs theme as found in the lgt2rst.sh Bash script.
  • IMPROVED: The performance of the ports_profiler tool.
  • IMPROVED: The lgtunit::run/1 predicate to print a warning on unknown tests.
  • FIXED: The lgtdoc tool lgt2rst scripts to avoid an error when called with the -s option due to changes in recent versions of the Sphinx sphinx-quickstart command.
  • FIXED: The lgtunit::run/1 predicate when the test defines setup/1 or cleanup/1 options. Thanks to Trystan Lapointe-Majumdar for the bug report.
  • FIXED: The logtalk_tester script to only setup and use the issue_creator tool when the -b option is used as per documentation.
  • FIXED: The packs tool tests that construct URLs to escape spaces.
  • FIXED: The packs tool to decode file URL encoded spaces when extracting directory paths.
  • Examples:
  • CHANGED: The tests for the metapredicates and metapredicates_compiled examples to not require setting the double_quotes flag.
  • UPDATED: The errors example to illustrate the new catch/3 lint check.
  • UPDATED: The roots example to use the existence_error/2 built-in method.
  • IMPROVED: The dcgs individual usage example of the meta_non_terminal/1 directive.
  • FIXED: Float comparison in test for the dcgs example.
  • Tests:
  • CHANGED: The number_codes/2 standard predicate tests to not require setting the double_quotes flag.
  • ADDED: Additional test for the Prolog standard catch/3 control construct. Suggested by Andrew Davison.
  • ADDED: Additional test for the Prolog de facto standard (*->)/2 control construct. Suggested by Andrew Davison.
  • ADDED: Additional tests for the Prolog standard arg/3, copy_term/2, keysort/2, sort/2, term_variables/2, unify_with_occurs_check/2, write_term/3, read_term/3, and (=..)/2 predicates.
  • ADDED: Additional test for the Prolog standard findall/3 predicate after a bug report and discussion with Jos De Roo and José Antonio Riaza Valverde.
  • ADDED: Additional tests for unbound integers when used in functor/3 and arg/3 predicate calls.
  • ADDED: Additional tests for the length/2 de facto standard predicate.
  • UPDATED: The tests for the setup_call_cleanup/3 predicate to also run using the Scryer Prolog backend.
  • FIXED: Tests for the bagof/3, term_variables/2, and write_term/3 standard predicates that used unification goals as assertions.
  • FIXED: Tests for the format/2-3 de facto standard predicates that used unification goals as assertions.
  • FIXED: Avoid a linter warning from the lgtunit tool in a Unicode test for variable unification.
  • Installers and installation scripts:
  • UPDATED: The build_release.sh script to use a HTTPS git clone URL.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Code completion support for the new catchall_catch flag to the jEdit, SubEthaEdit, Sublime Text, TextMate, and Vim text editors.

New in Logtalk 3.53.0 (Jan 21, 2022)

  • Logtalk compiler and runtime:
  • CHANGED: The clause/3 method support to allow the first two arguments to be unbound if the third argument is bound as per the de facto standard.
  • CHANGED: Shorter warning message when a possibly incompatible backend Prolog compiler version is detected.
  • ADDED: Support for using object aliases in the message delegation control construct.
  • IMPROVED: Simplified folding of left unifications when compiling clauses in optimized mode.
  • Prolog adapter and integration files:
  • ADDED: GNU Prolog adapter file support for inlining calls to foreign predicates.
  • UPDATED: The GNU Prolog adapter file table of proprietary predicate properties.
  • UPDATED: The LVM adapter file to require version 3.0.0 or later.
  • UPDATED: The SWI-Prolog adapter file tables of proprietary predicate properties and candidate tautology and falsehood goals.
  • UPDATED: The Trealla Prolog adapter file to require version 1.20.12 or later.
  • UPDATED: The Trealla adapter file table of candidate tautology and falsehood goals.
  • FIXED: Skipping of discontiguous predicate clauses warnings in the SICStus Prolog adapter file.
  • FIXED: Override the meta-predicate template for the current_op/3 built-in predicate in the SWI-Prolog adapter file.
  • Documentation:
  • ADDED: Handbook section on calling Prolog foreign predicates.
  • IMPROVED: Documentation of the options library.
  • IMPROVED: Documentation of the logtalk_tester automation script.
  • IMPROVED: Documentation of the phrase//1 built-in method.
  • FIXED: Sidebar links between the Handbook and the APIs from pages other than the root pages.
  • Library:
  • ADDED: Predicates option/2-3 to the options library.
  • ADDED: Support to the timeout library for the Trealla Prolog backend.
  • IMPROVED: Tests driver files for the arbitrary and random libraries to avoid reloading of files and and to explicit clean up intermediate files for the code being tested.
  • UPDATED: The dif and coroutining libraries for use with the LVM and Trealla Prolog backends.
  • UPDATED: The os library for fixes in the upcoming SICStus Prolog 4.7.1 version.
  • FIXED: The timeout library for the YAP backend.
  • FIXED: Deleted unused predicate in the git library.
  • FIXED: The intervals library f/2 shortcut for the finishes/2 predicate.
  • Tools:
  • CHANGED: The packs tool delete commands on Windows to use the force option.
  • ADDED: New experimental tool, issue_creator, for automatically creating bug report issues for failed tests in GitHub or GitLab servers.
  • ADDED: Command-line option to the logtalk_tester script to setup and use the new issue_creator tool.
  • IMPROVED: The packs tool handling of deleted registries.
  • UPDATED: Added git command to the requirements list for the packs tool.
  • UPDATED: The diagrams, lgtdoc, and packs tools to use the options library option/2 predicate.
  • UPDATED: The help tool to use the atomic_list_concat/2 predicate.
  • FIXED: The lgtunit tool error message for a failed test step.
  • Ports:
  • CHANGED: The metagol port to skip three long running tests when the tests are run automated.
  • UPDATED: The metagol port to run when using LVM as the backend compiler.
  • FIXED: Workaround Metagol port find_duplicate example portability issue to avoid failures when run on backends that type-check the second argument of the msort/2 predicate.
  • Examples:
  • UPDATED: The attvars example tests to use explicit assertions.
  • UPDATED: The figures example to run using the LVM and Trealla Prolog backends.
  • Tests:
  • CHANGED: Tests for Logtalk settings file to avoid issues with some backends where reloading files can be problematic.
  • ADDED: Additional test for the standard throw/1 control construct when the exception term is a cyclic term.
  • ADDED: Tests for invalid quoted atoms that contain layout characters.
  • ADDED: Tests for invalid double-quoted terms that contain layout characters.
  • ADDED: Tests for the Prolog lsb/1 and msb/1 built-in functions when available.
  • ADDED: Additional tests for the standard term comparison, bagof/3, compare/3, copy_term/2, findall/3, ground/1, length/2, numbervars/3, setof/3, and subsumes_term/2 predicates with cyclic term arguments.
  • ADDED: Additional tests for the standard get_byte/1-2, get_char/1-2, get_code/1-2, open/4, put_byte/1-2, put_char/1-2, put_code/1-2, sort/2, and write_term/3 predicates.
  • ADDED: Additional tests for the de facto standard predicate_property/2 and msort/2 predicates.
  • ADDED: Test set for the de facto standard Prolog built-in predicates that take a clause reference argument.
  • ADDED: Additional tests for the database built-in methods that take a clause reference argument.
  • IMPROVED: Simplify the tests driver file for the Logtalk use_module/2 directive.
  • UPDATED: The tests for the length/2 predicate to also check the Ciao Prolog library definition of the predicate.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Experimental vscode_message_streamer category for supporting the new version of the Visual Studio Code text editor Logtalk plug-in. Contributed by Jacob Friedman.
  • Installers and installation scripts:
  • ADDED: Trealla Prolog embedding script.

New in Logtalk 3.52.0 (Dec 7, 2021)

  • Logtalk compiler and runtime:
  • CHANGED: A partial list of terminals in the first argument of a grammar rule body to generate an instantiation error as per the standardization proposal.
  • IMPROVED: Generalized the linter checks for is/2 and (=:=)/2 goals to cases where the expression arguments are not ground but their type can be inferred.
  • FIXED: Processing of conditional compilation directives in included files.
  • FIXED: Duplicated linter warnings for some DEC-10 Prolog I/O predicates.
  • FIXED: The pack library paths to always end with a slash.
  • FIXED: Explicit messages to the user pseudo-object when the predicate being called is a meta-predicate.
  • FIXED: Avoid a warning when embedding Logtalk due to the definition of the forward/1 predicate in the user pseudo-object.
  • Prolog adapter and integration files:
  • UPDATED: The LVM adapter file to require version 2.0.0 or later.
  • UPDATED: The Trealla Prolog adapter file to require version 1.16.6 or later.
  • UPDATED: The Tau Prolog adapter file to require version 0.3.1 or later.
  • FIXED: The Trealla Prolog integration script to support “– Arguments” passed by other scripts (e.g. logtalk_tester script) that call it.
  • FIXED: The GNU Prolog adapter file to allow the consult/1 built-in predicate to be called from within objects and categories without requiring overriding its meta-predicate template.
  • FIXED: The YAP adapter file definition of the internal predicate '$lgt_load_prolog_file'/1.
  • Documentation:
  • ADDED: Section on creating and using virtual environments to the packs tool documentation.
  • IMPROVED: Documentation of the logtalk built-in object trace_event/2 and debug_handler/2 predicates.
  • IMPROVED: Man pages of the integration scripts.
  • IMPROVED: Documentation on using the lgtunit tool QuickCheck support.
  • UPDATED: The documentation of the logtalk_library_path/2 predicate for the logtalk_packs library alias.
  • UPDATED: The settings-sample.lgt with sample code for defining the new logtalk_packs library alias.
  • FIXED: The update_html_docs.sh and update_svg_diagrams.sh scripts to work with all supported backends.
  • Library:
  • FIXED: The type library object type-checking for the list, chars, and codes types to always throw instantiation errors whenever the term being checked is a partial list. Before, a type error would be throw if the term was a partial list but not a variable.
  • ADDED: Library format that abstracts how the different backends make available the de facto standard format/2-3 predicates.
  • ADDED: Library dif that abstracts how the different backends make available the dif/2 predicate when implemented.
  • ADDED: Parametric object object_wrapper_hook/1 to the hook_objects library.
  • ADDED: Partial support for XSB to the coroutining library.
  • ADDED: Additional tests for the coroutining library.
  • ADDED: Predicate copy_file/2 to the os library.
  • IMPROVED: Performance of the arbitrary library tests.
  • Tools:
  • CHANGED: The diagrams tool dot graph language export now uses the generic Monospace font name and output SVG files using the dot command -Gfontnames=svg option to avoid issues with text overflowing boxes.
  • CHANGED: The debugger tool loader file to also load the dump_trace object.
  • CHANGED: The packs tool save/1 and restore/1-2 predicates to save and restore pinning status.
  • CHANGED: The packs tool registries object predicate defined/3 to defined/4.
  • CHANGED: The packs tool lint/1-2 predicates to fail when specification errors are detected.
  • ADDED: Predicates text_output_contents/1-3 and binary_output_contents/1-2 to the lgtunit tool.
  • ADDED: Support for defining, saving, and restoring a simple form of packs virtual environments.
  • ADDED: Support for defining the packs tool directory used to store packs and registries using the logtalk_packs library alias (which can be defined e.g. in a settings file).
  • ADDED: Predicates logtalk_packs/0-1, readme/1, delete/0, pin/0, unpin/0, uninstall/0, and reset/0 to the packs tool.
  • IMPROVED: The packs tool to handle all dependency relations including range dependencies.
  • IMPROVED: The packs tool to print a warning if the pack being installed or updated requires a different backend from the one running the tool.
  • UPDATED: The packs::clean/0 predicate to not leave empty directories behind.
  • FIXED: The packs tool packs::dependents/1-3 predicates to avoid duplicated results.
  • FIXED: The packs tool registries::add/3 predicate to delete a registry prior to re-adding it when using the force(true) option to prevent a git cloning failure.
  • FIXED: The packs tool registries::clean/0 predicate to delete all registry archives instead of only of those registries that are defined.
  • FIXED: The packs tool logtalk_packs/1 predicate to return a path using the backend internal format instead of the operating-system format.
  • FIXED: Workaround packs tool portability issue with Ciao Prolog due to this system lack of supported for standard multifile predicate semantics.
  • FIXED: Adding a registry or installing a pack from a local archive using a URL with non-escaped spaces.
  • FIXED: Bug in the packs tool registries::defined/4 predicate report on how a registry is installed which could return directory for registries defined via archives.
  • FIXED: A packs tool typo in the identifier for the Trealla Prolog backend.
  • FIXED: Missing tutor tool explanation for non-tail recursive non-terminal definitions.
  • FIXED: The debugger tool dump_trace utility object to ensure that it’s always compiled in non-debug mode.
  • Examples:
  • CHANGED: The books example to avoid test failures due to irrelevant float printing issues.
  • UPDATED: The coinduction example tests to use explicit assertions.
  • UPDATED: The errors example to illustrate the generalized linter checks.
  • UPDATED: The figures example to use the new dif library instead of the coroutining library to allow running with some more backend Prolog systems.
  • Tests:
  • ADDED: Tests for the valid syntaxes of the Prolog standard dynamic/1, discontiguous/1, meta_predicate/1, multifile/1, and op/3 directives.
  • ADDED: Tests for the Prolog standard discontiguous/1, ensure_loaded/1, include/1, initialization/1, multifile/1, and op/3 directives.
  • ADDED: Tests for the Prolog standard compound term syntax.
  • ADDED: Additional tests for the writeq/2 predicate for atoms that require quoting to be input back correctly.
  • ADDED: Tests for the write_term/3 predicate for writing of compound terms with (,)/2 arguments.
  • ADDED: Additional test for the ::/2 message-sending control construct.
  • ADDED: Additional test for the use_module/2 Logtalk directive.
  • ADDED: Tests for the Logtalk predicate_property/2 method to check for predicate declaration and definition term position properties.
  • ADDED: Tests for the de facto standard format/2-3 predicates for using the back-quote character for specifying a table fill character in format strings.
  • UPDATED: Tests for the de facto standard format/2-3 predicates to also check format strings specified using a list of character codes or a list of characters.

New in Logtalk 3.51.0 (Oct 27, 2021)

  • Logtalk compiler and runtime:
  • CHANGED: The logtalk_make/0-1 predicates to avoid attempting to reload a source file that have been deleted after being loaded.
  • CHANGED: Moved the definition of the library library alias from the paths_core.pl file to the paths_libraries.pl file and added missing definition of the tests library alias to the paths_core.pl file.
  • FIXED: Changing the report flag default value using a settings file.
  • Prolog adapter and integration files:
  • CHANGED: The SICStus Prolog adapter file to disable by default redundant discontiguous predicate warnings and to suppress the messages printed for the compilation of the intermediate Prolog files generated by the Logtalk compiler.
  • ADDED: Definitions for the atomic_concat/3 and atomic_list_concat/2-3 predicates to all adapter files that don’t provide these built-in predicates. Joint work with Paul Brown.
  • ADDED: Internal '$lgt_directory_files'/2 and '$lgt_load_prolog_file'/1 predicates to all adapter files.
  • UPDATED: The LVM adapter file to require version 1.10.0 and allow the setup_call_cleanup/3 predicate to be seen as a built-in predicate.
  • UPDATED: The Trealla Prolog adapter file to require version 1.14.0 or later.
  • FIXED: The LVM lvmlgt integration script to suppress rlwrap warnings.
  • FIXED: The ECLiPSe adapter file to allow the setup_call_cleanup/3 predicate to be seen as a built-in predicate for 7.0#24 and later versions.
  • FIXED: Workaround clause indexing bugs in Trealla Prolog by changing the integration script to use the --noindex command-line option.
  • FIXED: The YAP adapter file expansion of use_module/1 directives when compiling modules as objects.
  • FIXED: Workaround XSB non-standard exceptions terms for procedure existence errors.
  • Documentation:
  • ADDED: CITATION.cff file.
  • ADDED: Additional examples to the logtalk_allure_report and logtalk_tester script man pages.
  • IMPROVED: The logtalk_allure_report script man page.
  • IMPROVED: The lgtunit tool documentation on testing generators and on creating Allure reports.
  • UPDATED: The update_html_docs.sh and update_svg_diagrams.sh scripts to exclude the packs directory.
  • FIXED: Text ordering typo in the Handbook section on the resource_error/1 built-in method.
  • Library:
  • ADDED: Predicates for reading and writing CSV streams (as an alternative to files) to the csv library.
  • ADDED: New epsilon/0 edge cases for the float and non_negative_float types to the arbitrary library.
  • ADDED: Additional tests for the os::absolute_file_name/2 predicate.
  • ADDED: Definitions for the os::shell/1-2 library predicates for the Scryer Prolog backend.
  • UPDATED: The os library object notes on predicates not supported when using the Scryer Prolog backend.
  • UPDATED: The library number object to also use the epsilon/0 arithmetic constant when using the Scryer Prolog backend.
  • FIXED: Bug in the os::make_directory_path/1 predicate when using a backend that doesn’t provide this functionality natively. Thanks to Paul Brown for the bug report.
  • FIXED: Workaround the lack of a predicate for converting between internal and operating-system file paths for several backends.
  • FIXED: Workaround B-Prolog bug on Windows where drives are not recognized as directories.
  • Tools:
  • ADDED: Beta version of the new packs tool.
  • ADDED: Support for exists(Assertion) and all(Assertion) test outcomes to the lgtunit tool.
  • ADDED: New input/output create_text_file/3, check_text_file/3, and text_file_assertion/4 testing predicates to the lgtunit tool.
  • ADDED: New exclude_prefixes/1 option to the lgtdoc tool to exclude from documentation any file or directory with one of the specified prefixes.
  • UPDATED: The debugger tool to use a get_unbuffered_char/1 built-in predicate when provided by the backend Prolog system (e.g. LVM or Trealla Prolog).
  • UPDATED: The debugger tool to use the charsio:get_single_char/1 predicate when using the Scryer Prolog backend.
  • IMPROVED: The logtalk_allure_report script to try to prevent data loss when the specified report directory exists, is not empty, and does not contain a previous report.
  • IMPROVED: The lgtunit tool no longer generates code that includes a list of all the test specifications when expanding objects. This avoids potential Prolog backend parsing issues when an object defines a large number of tests and results in more compact code.
  • FIXED: Workaround Allure ignoring the errors tag in xUnit.net v2 XML files so that crashed and broken test sets are listed in the reports.
  • FIXED: Bug in the lgtdoc tool when computing the inherited predicates of an instance that would result in an attempt to abolish a static object.
  • FIXED: Bug where the lgtdoc tool would fail to generate documentation when the predicate index is empty.
  • FIXED: The lgtdoc tool to not expand the paths in the exclude_files/1 and exclude_paths/1 options as per documentation.
  • Contributions:
  • IMPROVED: Tests for the pddl_parser contribution by using explicit assertions.
  • Ports:
  • UPDATED: The toychr port to use a get_unbuffered_char/1 built-in predicate when provided by the backend Prolog system (e.g. LVM or Trealla Prolog).
  • UPDATED: The toychr port to use the charsio:get_single_char/1 predicate when using the Scryer Prolog backend.
  • Examples:
  • CHANGED: The bench example chat_parser and sendmore benchmarks to not use failure-driven loops so that unexpected failures will make the benchmarks fail.
  • IMPROVED: Avoid printing expected warnings when running the lambdas_compiled example tests.
  • UPDATED: The symbiosis example to support the Trealla Prolog backend.
  • Tests:
  • ADDED: Tests for loading of settings files.
  • ADDED: tests for the atomic_concat/3 and atomic_list_concat/2-3 predicates.
  • ADDED: Additional tests for the bagof/3, copy_term/2, current_op/3, op/3, peek_byte/2, peek_char/2, and peek_code/2 predicates to verify properties specified in the ISO Prolog Core standard notes.
  • ADDED: Additional tests for the stream_property/2 predicate to verify properties for both text and binary streams open in all possible modes.
  • ADDED: Additional tests for the number_chars/2 and number_codes/2 predicates to verify their standard roundtrip property.
  • ADDED: Additional tests for the abolish/1, atom_concat/3, length/2, plus/3, setup_call_cleanup/3, sub_atom/5, and succ/2 predicates.
  • IMPROVED: Simplified tests for the format/3, nl/0-1, and write_term/3 predicates.
  • UPDATED: The Logtalk use_module/2 directive test set to support the Trealla Prolog backend.
  • IDEs, text editors, and syntax highlighters support:
  • FIXED: Vim Logtalk indent file failed to set set b:undo_indent. Thanks to Doug Kearns for the patch.
  • Installers and installation scripts:
  • UPDATED: The Windows installer script to require Inno Setup 6.0.2 Unicode or a later version.
  • FIXED: The Windows installer copying of the user settings file from the backup folder to the new Logtalk user folder. Thanks to Michael T. Richter for the bug report.

New in Logtalk 3.50.0 (Sep 1, 2021)

  • Logtalk compiler and runtime:
  • ADDED: Support for the see_also key to the info/2 predicate directive.
  • FIXED: The definition of the user built-in object to also create an object events queue when threaded engines are supported but not other multi-threading features.
  • Prolog adapter and integration files:
  • ADDED: Commented out code to the SICStus Prolog adapter file for disabling compilation messages for the intermediate Prolog files generated by the Logtalk compiler.
  • UPDATED: The LVM adapter file for its proprietary disk_predicate and spy predicate properties and to expand its disk_predicate/3 directive and define_disk_predicate/3 predicate.
  • UPDATED: The JIProlog adapter file to require 4.1.7.1 or later version.
  • UPDATED: The Trealla Prolog adapter file to require 1.11.25 or later version.
  • FIXED: The adapter files expansion code for directives to check that the directives argument is bound.
  • Documentation:
  • ADDED: An example to the lgtunit tool documentation on generating reports with links to the tests source files and line numbers.
  • IMPROVED: Handbook section on documenting applications.
  • IMPROVED: Handbook documentation of the use_module/1 and threaded/0 directives.
  • IMPROVED: Handbook documentation of the multi-threaded, threaded engines, logtalk_library_path/2 and logtalk_compile/1-2 predicates.
  • IMPROVED: Man page for the logtalk_tester shell script.
  • IMPROVED: The lgtunit tool documentation on suppressing tested predicates output and on generating Allure reports.
  • IMPROVED: The diagrams tool documentation and examples.
  • UPDATED: The man page for the lgt2svg shell script.
  • FIXED: Typo in the Handbook documentation of the phrase/2-3 built-in method exception conditions.
  • Library:
  • CHANGED: The library list object no longer uses the backend built-in length/2 predicate when available due to differences between backend implementations.
  • ADDED: Additional tests for the arbitrary and types libraries to check that the main predicates are deterministic.
  • FIXED: The meta_compiler library to include a copy of the meta library tests to avoid names clashes when generating Allure reports from test results.
  • FIXED: Workaround JIProlog file_attributes/7 predicate succeeding for non-existing files in the implementation of the os library predicates directory_files/2, file_modification_time/2, and file_size/2.
  • FIXED: Workaround JIProlog directory_files/2 predicate succeeding for non-existing directories in the implementation of the os::directory_files/2 library predicate.
  • Tools:
  • ADDED: Command-line option to the logtalk_tester script to pass a base URL for generating links to test files using the new tests_base_url user-defined flag that is created by the lgtunit tool test results export formats.
  • ADDED: Support for the Saxon XSLT processor to the lgtdoc tool lgt2rst, lgt2html, lgt2md, and lgt2txt scripts.
  • ADDED: A custom.css file to the lgtdoc tool for use with the lgt2rst scripts when called with the -s option to customize the Sphinx Read the Docs theme.
  • IMPROVED: The lgt2rst scripts now supports a -m option to generate Sphinx HTML files without requiring a separate step.
  • IMPROVED: The diagrams tool to also normalize URL prefixes in predicate options.
  • IMPROVED: Performance of the diagrams tool tests by generating diagrams for a smaller library.
  • UPDATED: The lgt2svg scripts provided by the diagrams tool to allow specifying the Graphviz command to use.
  • UPDATED: The lgt2svg scripts provided by the diagrams tool to use the dot command -ofile option for improved Windows compatibility.
  • UPDATED: The lgtunit tool xUnit.net v2 XML format report to generate links to test files when using the new logtalk_tester script command-line option to pass the base URL.
  • UPDATED: Mention the GNU coreutils package requirement for the timeout option in the help for the logtalk_tester script.
  • UPDATED: The lgtdoc tool to process the new see_also key for the info/2 predicate directive.
  • FIXED: The lgtunit tool xUnit.net v2 XML format report to append the tests object identifier to the test names to distinguish tests run with different parameterizations.
  • FIXED: Sample Sphinx template provided by the lgtdoc` tool for compatibility with recent Sphinx versions.
  • FIXED: Tests driver file for the arbitrary library to use the local source file.
  • Examples:
  • IMPROVED: Avoid printing expected errors and warnings when running the assumptions, lambdas, securemp, and closed_world_assumption example tests.
  • FIXED: Loading of the securemp example to actually load all the demo broken meta-predicate definitions.
  • FIXED: The lambdas_compiled and metapredicates_compiled examples to include copies of, respectively, the lambdas and metapredicates example tests to avoid names clashes when generating Allure reports from test results.
  • Tests:
  • REMOVED: Duplicated tests for the standard false/0 predicate.
  • ADDED: Additional tests for the de facto standard forall/2, format/2-3, and length/2 predicates.
  • ADDED: Additional tests for the standard atom_chars/2, atom_codes/2, atom_concat/3, number_chars/2, number_codes/2, stream_property/2, and sub_atom/5 predicates. Some of them taken or derived from the WG17 test suite.
  • ADDED: Additional tests for the standard keysort/2 and sort/2 predicates.
  • ADDED: Additional tests for the standard floating-point number syntax.
  • ADDED: Additional tests for the setup_call_cleanup/3 predicate.
  • ADDED: Additional unit tests for the 0’Char number notation.
  • ADDED: Additional tests for the de facto standard uXXXX and UXXXXXXXX syntax.
  • ADDED: Additional tests for the syntax of atoms, compound terms, and variables using Unicode glyphs.
  • IMPROVED: Avoid printing expected warnings when running the encoding/1 directive tests.
  • IMPROVED: Tests for the write_term/3 predicate option `variable_names/1.
  • UPDATED: The tests for the standard open/4 and write_term/2-3 predicates for the for the changes in the ISO/IEC 13211-1 Technical Corrigendum 3:2017 in options checking where an instantiation error is now expected instead of a domain error.
  • UPDATED: Allow the Unicode encodings test set to be run with Trealla Prolog.
  • RENAMED: Tests for the standard float/1 function and predicate to workaround tests with the same names clashing when generating an Allure report from test results using the xUnit.net v2 XML output format.
  • RENAMED: Tests for the set_logtalk_flag/2 directive and predicate to workaround tests with the sane names clashing when generating an Allure report from test results using the xUnit.net v2 XML output format.
  • FIXED: Tests for the threaded engine predicates to also run with ECLiPSe.
  • IDEs, text editors, and syntax highlighters support
  • FIXED: Parsing of compiler error and warning messages when building with the Sublime Text editor.
  • Installers and installation scripts:
  • UPDATED: The Windows installation script to also detect SICStus Prolog 4.7.x versions.

New in Logtalk 3.49.0 (Jul 27, 2021)

  • Logtalk compiler and runtime:
  • FIXED: When compiling with the clean flag turned on, also delete any intermediate Prolog files that may have been generated in previous runs for the same backend with the clean flag turned off.
  • FIXED: Generated intermediate Prolog file name conflicts when running with two backends that generate the same directory hashes and compiling with the clean flag turned off. Thanks to Andrew Davison for the bug report.
  • Prolog adapter and integration files:
  • UPDATED: The Trealla Prolog adapter file to require 1.9.38 or later version.
  • Documentation:
  • ADDED: Documentation to the lgtunit tool on automating testing on Windows operating-systems.
  • UPDATED: Handbook documentation of the clean flag.
  • Library:
  • CHANGED: The git library no longer wraps pretty print formats using double quotes to avoid portability issues when running on Windows operating-systems due to differences between the Prolog backends handling of shell commands.
  • CHANGED: Roundtrip tests for the csv and json libraries to not require the diff shell command.
  • CHANGED: The definition of the os::temporary_directory/1 predicate to expand the directory to an absolute path for a more consistent path representation on Windows operating-systems.
  • ADDED: Predicate internal_os_path/2 to the os library to convert between internal (backend dependent) paths and operating-system native paths Note that only a few backends provide this functionality.
  • ADDED: Definition for the os::shell/1-2 predicates for ECLiPSe when run on Windows operating-systems.
  • ADDED: Additional test for the os::file_permission/2 predicate.
  • ADDED: Experimental support for using the git library when running on Windows operating-systems.
  • IMPROVED: Handling of operating-system paths in the os library for ECLiPSe when run on Windows operating-systems.
  • UPDATED: The redis library tests to check for REDIS_HOST and REDIS_PORT environment variables as an alternative to the default localhost and 6379 values.
  • FIXED: Test for the csv library when run on Windows operating-systems.
  • FIXED: Workaround SICStus Prolog issue with the csv library when run on Windows operating-systems
  • FIXED: Tests for the csv, hook_objects, and reader libraries when run on Windows operating-systems using B-Prolog, GNU Prolog, or XSB.
  • FIXED: Tests for the reader library when run on Windows operating-systems.
  • FIXED: Tests for the os::shell/1-2 predicates to use a command available in both POSIX and Windows operating-systems.
  • FIXED: Definition of the os::operating_system_type/1 predicate for GNU Prolog would fail to detect Windows operating-systems.
  • FIXED: Definition of the os::file_permission/2 predicate for CxProlog.
  • FIXED: Definitions of the os::shell/1-2 predicates for SICStus Prolog and SWI-Prolog when running on Windows operating-systems.
  • FIXED: Definition of the os::shell/1 predicate for XSB.
  • FIXED: Definition of os library predicates for XSB that may report file or directory existence errors where the wrong exception term would be thrown.
  • Tools:
  • IMPROVED: The lgtunit default message when a test set is skipped to include the test object identifier to provide more detailed information when tests are skipped only for some parameterizations of a test object.
  • FIXED: The logtalk_tester script when running on Windows operating-systems using the Bash shell bundled with the Git for Windows installer.
  • FIXED: Tests for the help tool when using ECLiPSe on Windows systems.
  • Examples:
  • UPDATED: The notes and source code on the tcltk example to illustrate how to run it on Windows.
  • FIXED: Workaround a XSB parser bug that prevented loading the bench example.
  • FIXED: Tests for the around_methods, books, hailstone, hello_world, localizations, and patches examples when run on Windows systems using B-Prolog, GNU Prolog, or XSB.
  • FIXED: Tests for the slides example when run on Windows systems.
  • Tests:
  • ADDED: Additional test for the standard set_prolog_flag/2 predicate to check that it recognizes all flags, thus including read-only flags.
  • ADDED: Additional tests for the standard current_prolog_flag/2 predicate to check that all flag names are atoms and all flag values are bound.
  • IMPROVED: The tests for the standard read_term/3 predicate to avoid the tests hanging on Prolog backends that don’t check options validity before attempting to read a term.
  • IMPROVED: Tests for the logtalk_library_path/2 predicate.
  • FIXED: Tests for the format/2-3 and nl/0-1 predicates when run on Windows systems using B-Prolog, GNU Prolog, or XSB.
  • Installers and installation scripts:
  • UPDATED: Windows installer notes on using recent versions of Inno Setup.
  • FIXED: The Windows installer for the YAP 6.3.4 installer, which creates a cwd registry key instead of a home registry key as in previous installers.

New in Logtalk 3.48.0 (Jul 7, 2021)

  • Logtalk compiler and runtime:
  • CHANGED: The names generated by the compiler for the intermediate Prolog files now include the process identifier when the clean flag is turned on (its default value), helping preventing clashes when running multiple Logtalk processes in parallel (except when using the Quintus Prolog backend).
  • CHANGED: Revert compiler change to use internally the de facto standard between/3 predicate to avoid breaking XSB support.
  • CHANGED: The compilation of coinductive predicates to check if either if/3 or (*->)/2 are built-in predicates instead of relying in the adapter file declaration of proprietary built-in meta-predicates.
  • Prolog adapter and integration files:
  • IMPROVED: GNU Prolog adapter file workaround for non-standard format/3 predicate feature.
  • UPDATED: Require B-Prolog 8.1 or later version.
  • UPDATED: The LVM adapter file listing of proprietary built-in meta-predicates and candidate tautology and falsehood goals.
  • UPDATED: The Trealla Prolog adapter file to requite 1.8.75 or later version. Also updated the listings of proprietary built-in meta-predicates, proprietary predicate properties, and candidate tautology and falsehood goals.
  • FIXED: The Trealla Prolog adapter file definition of the internal predicate '$lgt_copy_term_without_constraints'/2.
  • FIXED: Change Ciao Prolog adapter file definition of the modules flag to unsupported.
  • Documentation:
  • ADDED: Handbook section on running parallel Logtalk processes.
  • ADDED: Handbook overview of the different stages of the multi-pass compiler.
  • IMPROVED: Handbook documentation on declaring and using public entity operators.
  • IMPROVED: Multiple Handbook glossary entries.
  • IMPROVED: Handbook documentation on the initialization/1 directive.
  • IMPROVED: Handbook section on writing and running applications.
  • IMPROVED: Documentation of the lgtunit tool on defining test driver files and running tests.
  • FIXED: Typo in the template for the catch/3 built-in method. Thanks to Camilo Correa Restrepo for the bug report.
  • FIXED: Typo in the Handbook section on calling Prolog module meta-predicates that require overriding the meta-predicate templates.
  • Library:
  • IMPROVED: Most cbor library tests for float encoding now use roundtrip testing instead of checking for the expected canonical encoding to avoid float precision representation issues making the tests fail.
  • IMPROVED: Tests of the random library.
  • Tools:
  • CHANGED: The logtalk_tester script test sets stats message to use the words timedout instead of timeouts and crashed instead of crashes for consistency plus singular and plural agreement.
  • IMPROVED: The logtalk_tester script test now prints the run time in seconds for each test set.
  • IMPROVED: Tests for the ports_profiler tool.
  • IMPROVED: Simplify cleanup step for the diagrams tool tests.
  • Examples:
  • ADDED: New tcltk example illustrating how to add a portable GUI to an application using Tcl and Tk. Contributed by Paul Brown.
  • IMPROVED: Tests for the blocks, bricks, dynpred, futures, hooks, hailstone, includes, laptops, logs, metaclasses, multifile, patches, patching, polygons, reflection, self_messages, scopes, and threads/functions examples.
  • FIXED: A benchmarks example portability issue with the Ciao Prolog and XSB backends.
  • Tests:
  • CHANGED: Tests for the log/1, log/2, and log10/1 arithmetic functions to allow any argument to the expected evaluation_error/1 exception when the argument or the base is zero as there’s a lack of consensus between backends.
  • ADDED: Additional test for the write_term/3 predicate variable_names/1 option.
  • ADDED: Additional tests for the set_prolog_flag/2 predicate.
  • ADDED: Tests for the Prolog popcount/1 built-in function when available.
  • ADDED: Additional tests for unbounded integer arithmetic.
  • IMPROVED: Skip the tests for the ISO Prolog standard open/3-4 built-in predicates permission error conditions when running on a POSIX system as root.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Sublime Text support for toggling comments when editing Logtalk source files.
  • FIXED: Sublime Text instructions for installing Logtalk support.
  • Installers and installation scripts:
  • ADDED: LVM embedding script.
  • FIXED: CxProlog and SWI-Prolog embedding scripts to use the correct directory to load the precompiled Logtalk compiler and runtime.
  • FIXED: The logtalk_backend_select script for the new LVM executable name.

New in Logtalk 3.47.0 (Jun 1, 2021)

  • Logtalk compiler and runtime:
  • CHANGED: The compiler to use internally the de facto standard between/3 predicate instead of its own version.
  • Prolog adapter and integration files:
  • IMPROVED: Scryer Prolog definition of the scratch_directory flag.
  • UPDATED: Scryer Prolog adapter file with support for reporting warning and error line numbers.
  • UPDATED: Require Trealla Prolog 1.8.71 or later version.
  • UPDATED: Trealla Prolog adapter file with experimental code for expanding use_module/1 Prolog directives.
  • UPDATED: The LVM adapter file to use the built-in decompose_file_name/4 and atom_number/2 predicates.
  • Library:
  • ADDED: Definitions for the os library delete_directory/2, date_time/7, pid/1, and rename_file/2 predicates for Scryer Prolog.
  • UPDATED: Definition of the os::make_directory_path/1 predicate for Trealla Prolog to use the new native definition.
  • FIXED: Path expansion in the os library for Scryer Prolog.
  • FIXED: Bug in the json library parser of JSON files when a string contains an escaped double-quote. Thanks to Paul Brown for the bug report.
  • FIXED: Templates for the term_io library read predicates. Thanks to Paul Brown for the bug report.
  • Tools:
  • CHANGED: The logtalk_tester script to ignore failed flaky tests when setting the exit status.
  • CHANGED: The lgtunit tool tests_results_summary/6 and tests_skipped/2 messages to, respectively, tests_results_summary/7 and tests_skipped/3 to better support flaky tests and skipped test sets.
  • ADDED: Predicates text_file_assertion/3 and binary_file_assertion/3 to the lgtunit tool to generate assertions that a given file have the expected text or binary contents.
  • IMPROVED: The lgtunit tool support for reporting flaky tests.
  • UPDATED: The lgtunit tool to also use the de facto standard epsilon/0 arithmetic constant with Scryer Prolog.
  • UPDATED: The dead_code_scanner and code_metrics tools tests to use assertions.
  • FIXED: The logtalk_tester script report of skipped and failed tests when using the lgtunit::run_test_sets/1 predicate to list the correct file for each reported test.
  • FIXED: A logtalk_tester script regression (introduced with the support for flaky tests) in the test results stats when there are skipped test sets.
  • Examples:
  • CHANGED: The benchmarks example to use the de facto standard between/3 predicate instead of its own version.
  • IMPROVED: Tests for the complements and hailstone examples.
  • IMPROVED: Simplified the logs example which illustrates how to define category predicates that handle a dynamic predicate in the context of “this”.
  • FIXED: Comment out non-standard (and non-required) operator definitions in the bench example that would prevent loading it with some backends.
  • FIXED: The encodings example to not try to load files or run tests that require up-to-date UTF-16 support when using CxProlog or SICStus Prolog.
  • Tests:
  • CHANGED: Skip test for the Prolog catch/3 control construct from the ISO standard as as systems should be allowed to compile both goal arguments, which in this case would result in a callable type error instead of success as in the original test definition.
  • ADDED: Additional test for the Prolog catch/3 control construct after a suggestion by Andrew Davison.
  • ADDED: Additional test for the Prolog char_code/2 built-in predicate.
  • ADDED: Additional Unicode support tests to check that the stream_property/2 predicate doesn’t return bom/1 or encoding/1 properties for binary streams.
  • ADDED: Unit tests for the ISO Prolog standard (+)/1-2, (-)/1-2, (*)/2, (/)/2, and (//)/2 built-in functions.
  • IMPROVED: Tests for the Logtalk initialization/1, multifile/1, and set_logtalk_flag/2 directives.
  • IMPROVED: Tests for the Logtalk {}/1 control construct.
  • IMPROVED: Tests for the Prolog asserta/1, assertz/1, atom_chars/2, atom_codes/2, bagof/3, between/3, findall/3-4, length/2, halt/1, and retractall/1 built-in predicates.
  • FIXED: The test set for the Logtalk encoding/1 directive to only run on backends that support US-ASCII, ISO-8859-1, and UTF-8 text encodings.

New in Logtalk 3.46.0 (May 6, 2021)

  • Logtalk compiler and runtime:
  • IMPROVED: The compiler handling of errors when reading the first term of a source file to ensure that the errors are reported even if the input stream cannot be retrieved.
  • Prolog adapter and integration files:
  • ADDED: Experimental support for Scryer Prolog (0.8.128 or later version).
  • UPDATED: Require Ciao Prolog 1.20.0 or later version (due to backward incompatible changes in its libraries).
  • UPDATED: Require LVM 1.6.0 or later version.
  • UPDATED: Require Trealla Prolog 1.8.41 or later version.
  • FIXED: The value of the unicode read-only flag for Trealla Prolog.
  • Documentation:
  • IMPROVED: Manual installation instructions for POSIX systems.
  • IMPROVED: Man page for the logtalk_tester script.
  • FIXED: Expired link in the documentation of the assignvars library. Thanks to kaiser185 for the bug report and alternative link.
  • Library
  • CHANGED: The dictionaries library objects now extend term instead of compound as empty dictionaries are not always compound terms.
  • CHANGED: Mark the termp protocol ground/1 and subsumes/2 predicates as deprecated as both ground/1 and subsumes_term/2 are nowadays standard Prolog predicates.
  • ADDED: Preliminary version of a nested_dictionaries library. Joint work with Paul Brown.
  • ADDED: Preliminary version of a html library to generate HTML content from a term representation. Joint work with Paul Brown.
  • ADDED: Predicates as_curly_bracketed/2 and intersection/2-3 to the dictionaries library.
  • ADDED: Predicates numbervars/3, numbervars/1, and varnumbers/2-3 to the library term` object.
  • FIXED: Definition of the os::is_absolute_file_name/1 predicate for XSB.
  • FIXED: Portability issue in the csv library.
  • FIXED: Definitions of the check/1 predicate for the dictionaries library objects. Thanks to Paul Brown for the bug report.
  • FIXED: The rbtree::insert/4 predicate to fail when the key is a variable as in the other dictionary implementations. Thanks to Paul Brown for the bug report.
  • FIXED: Tests for the dictionaries library to allow alternative user-defined implementations where the order pairs are returned from lookup predicates is not necessarily ascending order by key. Thanks to Paul Brown for the report.
  • FIXED: Test for the os::temporary_directory/1 predicate to use the os::path_concat/3 predicate.
  • FIXED: The arbitrary library generation of Unicode code points to exclude high and low surrogate, non-character, and private use code points.
  • Tools:
  • CHANGED: The logtalk_tester.sh and logtalk_doclet.sh scripts to require specifying the backend instead of using a default backend.
  • ADDED: Support for reporting tests as flaky tests to the lgtunit tool.
  • ADDED: Predicates check_text_output/3 and text_output_assertion/4 to the lgtunit tool.
  • IMPROVED: The logtalk_tester.sh script and the lgtunit tool TAP, xUnit, and code coverage reports to allow overriding the directory where tests reports are created (e.g. when running tests defined in a directory different from the directory that contains the tests driver file). Thanks to Paul Brown for the use case.
  • FIXED: The logtalk_tester.sh and logtalk_doclet.sh scripts to exit with an error when passed an unknown option.
  • FIXED: The lgtunit tool xUnit and xUnit.net v2 XML format exporters to escape special XML characters in common cases such as the heaps library.
  • FIXED: The lgtunit tool set_text_input/3 and set_binary_input/3 predicates to also use the options argument when creating the input contents.
  • Contributions:
  • IMPROVED: Documentation of the xml_parser contribution public predicates.
  • FIXED: Two conversion bugs between numbers and atom as their corresponding list of codes in the xml_parser contribution.
  • Examples:
  • ADDED: Additional tests for the encodings example, including for full UTF-16 support.
  • FIXED: The tests driver file for the encodings example to show all test results with automated testing.
  • Tests:
  • ADDED: A unicode test suite for checking backends support for Unicode.
  • ADDED: Tests for the open/4 Prolog standard predicate to check for the expected permission error when the file doesn’t have the necessary read or write permissions.

New in Logtalk 3.45.0 (Mar 24, 2021)

  • Distribution:
  • REMOVED: Deprecated library loader files (predating library restructuring).
  • ADDED: SPDX short-form identifiers to most of the files in the distribution.
  • Prolog adapter and integration files:
  • IMPROVED: Simplified the SWI-Prolog integration files.
  • UPDATED: Require LVM 1.5.0 or later version (due to new os library requirements).
  • UPDATED: Require Trealla Prolog 1.7.64 or later version (due to critical bug fixes).
  • FIXED: Syntax typo in the Trealla Prolog adapter file. Thanks to Andrew Davison for the bug report.
  • Documentation:
  • IMPROVED: Documentation of the term_io library.
  • FIXED: Typo in the Handbook nomenclature section. Thanks to David Tonhofer for reporting.
  • Library:
  • CHANGED: Move the random library seed predicates to a separate protocol. This change doesn’t require changes to applications using this library.
  • ADDED: A base64 library for encoding and decoding binary data in the Base64 and Base64URL formats.
  • ADDED: A uuid library for generating Universally Unique Identifiers (UUIDs). Currently supports version 1 and version 4 UUIDs.
  • ADDED: A json library for encoding and decoding JSON data. Joint work with Jacinto Dávila.
  • ADDED: A cbor library for encoding and decoding data in the Concise Binary Object Representation (CBOR) format. Currently requires a backend supporting unbounded integer arithmetic.
  • ADDED: Predicates file_to_bytes/2-3 and stream_to_bytes/2-3 to the reader library.
  • ADDED: Library predicate term_io::with_output_to/2 predicate.
  • ADDED: Library predicate list::append/2 linter check for redundant calls.
  • ADDED: Support for new hex_char and hex_code types to the arbitrary and types libraries.
  • ADDED: Library predicate os::is_absolute_file_name/1.
  • ADDED: New types file(Extensions,Permissions) and directory(Permissions) to the os library.
  • FIXED: Library os::file_permission/2 predicate for SICStus Prolog when the first argument is a directory.
  • FIXED: Library os predicates file_permission/2 and rename_file/2 for YAP.
  • FIXED: Exceptions for the os library predicates for ECLiPSe.
  • FIXED: Test for the os::path_concat/3 predicate to work on both POSIX and Windows systems.
  • FIXED: Workaround issue with directories like c: not being recognized when running with the SICStus Prolog backend on Windows operating-systems.
  • FIXED: Library csv round-trip tests to only run when the diff command is available.
  • FIXED: Syntax error while loading the csv library with GNU Prolog.
  • Tools:
  • CHANGED: The lgtunit tool to report individual tests execution time. Code that intercepts the tool messages may need to be updated as several messages now have an additional argument to carry execution time data (in seconds).
  • CHANGED: The lgtunit tool to report tests that succeeded or failed instead of throwing an error to also include the expected error. Code that intercepts the tool messages may need to be updated as the corresponding messages now have an additional argument to carry the expected error.
  • CHANGED: The test automation support to also list, when possible, all the skipped tests for skipped test sets.
  • ADDED: New lgtunit public predicates test/1 and number_of_tests/1.
  • IMPROVED: Better reporting of tests results from running a set of test suites as a single unified suite when using the xUnit formats.
  • UPDATED: Tools documentation on testing.
  • FIXED: Bug where the lgtunit tool would print duplicated code coverage stats for parametric entities when using multiple test sets. Thanks to Jacinto Dávila for the bug report.
  • FIXED: The cleanup step for the lgtdoc tool unit tests.
  • Examples:
  • UPDATED: Most examples that use parametric entities to use parameter variables.
  • Tests:
  • ADDED: Tests for unbounded integer arithmetic using standard functions and predicates.
  • Installers and installation scripts:
  • FIXED: The manual install.sh script to use mkdir -p when creating the Logtalk installation directory. Thanks to Jeremy Vickery for the bug report.

New in Logtalk 3.44.0 (Feb 4, 2021)

  • Logtalk compiler and runtime:
  • ADDED: Lint check for clauses whose body is a disjunction as per coding guidelines. Controlled by a new flag, disjunctions, with a default value of warning.
  • IMPROVED: Startup message when the backend version is older than the recommended version.
  • UPDATED: Lint check for entity, predicate, and variable names to also check for digits in the middle of a name as per coding guidelines.
  • Prolog adapter and integration files:
  • ADDED: Default value for the new disjunctions flag to all adapter files.
  • REMOVED: Integration files for Qu-Prolog as this backend memory model limits prevent loading the current version of the Logtalk compiler/runtime.
  • REMOVED: Integration files for XSB-MT as this backend support for threads is too buggy to be usable.
  • UPDATED: LVM support and minimum required version to 1.2.0.
  • UPDATED: Trealla ProLog support and minimum required version to 1.6.8.
  • FIXED: The SWI-Prolog and YAP adapter files to not optimize top-level interpreter message-sending goals when the object receiving the message is compiled in debug mode.
  • Documentation:
  • ADDED: Handbook nomenclature section highlighting the differences between Logtalk and Prolog.
  • ADDED: Handbook documentation for the new disjunctions flag.
  • ADDED: Handbook glossary entries for predicate calling context, predicate definition context, predicate execution context, and top-level interpreter shorthand.
  • ADDED: Man page for the new logtalk_allure_report script.
  • IMPROVED: Documentation of the logtalk::loaded_file_property/2 predicate.
  • IMPROVED: Handbook glossary definition of “parameter variable”.
  • IMPROVED: Documentation on using the embedding scripts.
  • FIXED: Overflow line the Event-driven programming chapter in the PDF version of the Handbook. Thanks to Jacinto Dávila for the bug report.
  • FIXED: Handbook documentation on entity properties and the entity property predicates for the public/1, protected/1, and private/1 properties.
  • Library:
  • ADDED: Library csv for reading and writing CSV files. Contributed by Jacinto Dávila.
  • ADDED: Library term_io for term input/output from/to atom, chars, and codes.
  • ADDED: Library options providing predicates for managing developer tool and application options.
  • ADDED: New non_quoted_atom type to the arbitrary and types libraries.
  • ADDED: Implementation for the os::directory_files/2 predicate for Trealla ProLog.
  • FIXED: Implementation for the os::delete_directory/1 predicate for Trealla ProLog.
  • FIXED: Warnings with the new disjunctions flag for the arbitrary library.
  • IMPROVED: The gensym and random library to only declare predicates as synchronized when compiled with a backend that supports threads.
  • FIXED: The types library check for a public object predicate to explicitly check that the object exists.
  • Tools:
  • CHANGED: Remove the lgtdoc tool option/2 and set_option/2 predicates and refactored option handling to use the new options library, including for type-checking user options.
  • CHANGED: The specification and implementation of the lgtunit::assertion/1-2 predicates to prevent further instantiation of the assertion goal argument.
  • ADDED: Support to the debugger tool for specifying non-terminal spy points directly.
  • ADDED: Shell script for generating Allure reports (logtalk_allure_report).
  • ADDED: New lgtunit documentation section on generating Allure reports.
  • ADDED: Support for exporting test results using the xUnit.net v2 XML format.
  • IMPROVED: The logtalk_tester script now generates a minimal report file when using the -f option so that tools that process and display test results may also be able to display broken, timed out, and crashed test sets.
  • IMPROVED: More informative lgtunit tool report of failed variant/2 and subsumes/2 test outcomes.
  • UPDATED: The logtalk_tester script to support the -f xunit_net_v2 option.
  • UPDATED: The diagrams tool to use the new options library, including for type-checking user options.
  • UPDATED: The tutor tool to provide advice for the new clause disjunctions lint check and for the updated entity, predicate, and variable names lint checks.
  • UPDATED: The diagrams tool to use the new term_io library for escaping text when generating DOT files.
  • FIXED: Workaround limitations of the xUnit XML formats for reporting skipped test sets.
  • FIXED: Warnings with the new disjunctions flag for the code_metrics tool.
  • FIXED: The debugger tool handling of the leap option to restore the current trace or debug mode if necessary for the next top-level query.
  • FIXED: The assertions tool to prevent calls to the assertion/1-2 predicates from further instantiating the assertion argument as per documentation.
  • FIXED: Implementation of the lgtunit::stream_position/1 predicate for SICStus Prolog.
  • FIXED: Two debugger tool tests to not fail when run in batch with other test sets that compile entities in debug mode.
  • Examples:
  • ADDED: Port of the Amzi! Inc “Nani search” adventure game to the adventure example.
  • UPDATED: The errors example to illustrate the new disjunctions lint check and the update entity, predicate, and variable names checks.
  • FIXED: Warnings with the new disjunctions flag for the assumptions and searching examples.
  • FIXED: Library alias for the figures example. Thanks to Jacinto Dávila for the bug report.
  • FIXED: Deleted library aliases for non existing examples (due to renaming).
  • FIXED: Library alias for the logs example.
  • FIXED: Non-ASCII character in comment in the dcgs/morse.lgt source file.
  • Contributions:
  • FIXED: Warnings with the new disjunctions flag for the verdi_neruda and xml_parser contributions.
  • Ports:
  • ADDED: Fibonacci sequence, prime numbers, and finite domain constraint solver examples to the ToyCHR port.
  • IMPROVED: Tests for the ToyCHR port.
  • FIXED: Copyright information on the ToyCHR documentation.
  • FIXED: Bug in the ToyCHR port test_guard/2 predicate.
  • Tests:
  • ADDED: Additional test for the de Prolog standard function exp/1.
  • ADDED: Additional tests for the de facto standard functions log/2 and log10/1.
  • ADDED: Tests for the de facto standard hyperbolic functions.
  • ADDED: Additional test for the logtalk_library_path/2 built-in predicate.
  • UPDATED: Tests for most of the arithmetic functions to use assertions.
  • FIXED: Warnings with the new disjunctions flag for the set_logtalk_flag/2 directive and the goal_expansion/2 method tests.
  • Installers and installation scripts:
  • CHANGED: Renamed the scripts/macosx directory to scripts/macos.
  • ADDED: Windows installer experimental support for creating a shortcut for Tau Prolog. Tested with the help of José Antonio Riaza Valverde.
  • ADDED: A macOS command-file for Trealla ProLog.
  • ADDED: A update_man_html_versions.sh shell script for updating the HTML versions of the man pages.
  • UPDATED: The macOS installer to also set system-wide default values for the LOGTALKHOME and LOGTALKUSER environment variables for the zsh shell.
  • REMOVED: Install actions for Qu-Prolog as this backend memory model limits prevent loading the Logtalk compiler/runtime.
  • REMOVED: Install actions for XSB-MT as this backend support for threads is too buggy to be usable.

New in Logtalk 3.43.0 (Dec 23, 2020)

  • Logtalk compiler and runtime:
  • ADDED: Lint check for redundant use of the call/1 control construct as argument to the +/1 built-in predicate.
  • ADDED: Also check correctness of variable_names/1 options in calls to the write_term/2-3 Prolog standard predicates.
  • IMPROVED: Compiler performance for protocols.
  • IMPROVED: More efficient compiler checking for parameter variables.
  • FIXED: Using a overriding meta-predicate template for predicates defined in user listed in uses/2 directives.
  • FIXED: Bug in the logtalk_make/0-1 predicates when reloading a main file due to an updated included file when the clean flag is turned off and the reload file is set tp changed where the main file would not be recompiled to include the new contents of the included file.
  • FIXED: Bug in the asserta/1 built-in method when the argument is only know at runtime.
  • Prolog adapter and integration files:
  • ADDED: Adapter file for Trealla Prolog. Experimental. With the help of Andrew Davison.
  • IMPROVED: Adapter files definition of the {}/1 top-level interpreter shortcut for loading files to use a single call to the logtalk_load/1 built-in predicate.
  • UPDATED: The LVM adapter file to take advantage of indexing support for the internal runtime tables and of the new atom_hash/2 built-in predicate.
  • UPDATED: The LVM integration script to select the standard-top-level.
  • UPDATED: The Tau Prolog and Trealla ProLog adapter files for Unicode support.
  • Documentation:
  • ADDED: Man page for the Trealla ProLog integration script, tplgt.
  • FIXED: Mention of settings file possible locations in the integration script man pages.
  • Library:
  • ADDED: Support for Trealla ProLog to the os and random libraries.
  • ADDED: Library git with predicates for accessing a git project current branch and latest commit data.
  • ADDED: Definition for the os::wall_time/1 predicate for Tau Prolog.
  • ADDED: New jump_all_block/3, append/3, and map/2-3 predicates to the queues library.
  • ADDED: Tests for the os library wall_time/1 and shell/1-2 predicates.
  • UPDATED: The hook_objects library object_wrapper_hook object to set the context_switching_calls flag to allow for the generated objects, enabling calling the wrapped predicates using the

New in Logtalk 3.42.0 (Oct 26, 2020)

  • Logtalk compiler and runtime:
  • ADDED: New logtalk_load_context/2 predicate variables and singletons keys for accessing the variables and the singleton variables of the term being compiled.
  • IMPROVED: Generalize linter checks for tautologies and falsehoods in non-ground var/1, nonvar/1, and ground/1 goals to check for singleton variables.
  • FIXED: Increment the warnings counter when reporting term-expansion and goal-expansion errors.
  • FIXED: Bug in the logtalk_make/0-1 predicates when reloading a failed file or a main file due to an updated included file that could result in multiple entries for the runtime table of loaded files.
  • FIXED: The user.lgt file to workaround embedding errors with GNU Prolog.
  • Prolog adapter and integration files:
  • ADDED: Experimental support for LVM as a backend compiler.
  • ADDED: Double-clickable *.command Terminal.app files for starting Logtalk with LVM or Tau Prolog backend compilers on macOS.
  • UPDATED: The list of candidate goals for tautologies and falsehoods linter checks for GNU Prolog, SWI-Prolog, and YAP.
  • FIXED: Set the encoding_directive flag to unsupported for Tau Prolog as its implementation of the standard open/4 predicate doesn’t support setting the stream encoding.
  • FIXED: The GNU Prolog adapter file to provide dummy definitions for the Prolog database predicates that take a reference argument to avoid embedding errors.
  • Documentation
  • IMPROVED: Handbook description of entity and predicate properties that include line numbers information.
  • IMPROVED: Man pages formatting of script options.
  • IMPROVED: The man page for the logtalk_tester shell script.
  • UPDATED: Handbook documentation of the logtalk_library_path/2 predicate.
  • Library
  • ADDED: Support for LVM to the os, random, and redis libraries.
  • ADDED: New tests for the os library to check that its predicates that require a file or a directory to exist throw an error when that is not the case.
  • ADDED: Tests for the os library predicates file_modification_time/2 and file_permission/2.
  • FIXED: Description of osp library protocol predicates that are expected to throw an error when a fie or directory does not exist.
  • FIXED: Workaround an issue with some backend Prolog systems such as ECLiPSe and Tau Prolog where reloading a file defining clauses for a multifile predicate results in the duplication of the clauses when testing the arbitrary and os libraries.
  • FIXED: The arbitrary library tests for backend Prolog systems that don’t support Unicode.
  • FIXED: Support for the os and random libraries for Tau Prolog.
  • FIXED: Workaround GNU Prolog embedding errors with the hook_objects library.
  • FIXED: The os::directory_files/2-3 predicates for SICStus Prolog to throw an exception when the directory does not exist.
  • FIXED: The os library predicates for B-Prolog, CxProlog, ECLiPSe and XSB to throw an error when a file or a directory does not exists as per the osp protocol.
  • Tools:
  • CHANGED: The logtalk_tester shell script to use a SIGKILL signal for the timeout option.
  • CHANGED: The lgtunit tool stream_position/1 utility predicate to not require the backend Prolog system to support repositioning of streams.
  • ADDED: Support for a variant/2 outcome for test/2-3 test dialects to the lgtunit tool.
  • ADDED: Option -w to the logtalk_tester shell script to wipe default scratch directories (./.lgt_tmp and ./lgt_tmp) before running a test set.
  • ADDED: LVM support to the logtalk_doclet and logtalk_tester scripts.
  • ADDED: LVM support to the debugger, diagrams, and lgtunit tools.
  • IMPROVED: The lgtunit tool handling of shared variables between a test and its options.
  • FIXED: Tool files to workaround embedding errors with GNU Prolog.
  • FIXED: The ports_profiler tool to avoid a spurious warning for a missing meta_predicate/1 directive for the call_goal/2 predicate with some backend compilers.
  • FIXED: The lgtunit tool messages for test outcome format errors.
  • FIXED: The testing automation report to also list tests failures caused by non-deterministic success.
  • FIXED: The logtalk_tester shell script spurious “clause coverage” text in case of a skipped or broken test set.
  • FIXED: Cleanup step for the lgtdoc tool tests.
  • Examples:
  • FIXED: Compatibility of the benchmarks, dcgs, module_aliases, and symbiosis examples with Tau Prolog.
  • FIXED: Compatibility of the poem example with LVM.
  • FIXED: Modify the books example to avoid a test failure when using GNU Prolog as the backend compiler due to an issue with a float computation.
  • FIXED: Replaced use of legacy tell/1 Prolog predicate in the constraints example.
  • FIXED: Set the double_quotes flag to codes unconditionally in the dcgs example loader files.
  • Contributions:
  • FIXED: Set the double_quotes flag to codes unconditionally in the xml_parser loader file.
  • FIXED: Skip condition for the pddl_parser test sokoban, which requires a backend Prolog compiler with either unbound term arity or a maximum arity of at least 2048.
  • Ports:
  • FIXED: Added missing | operator declaration to the toychr port.
  • Tests:
  • ADDED: Tests for the new logtalk_load_context/2 predicate keys.
  • ADDED: Tests for the standard Prolog predicate write_term/3 option variable_names/1.
  • ADDED: Tests for the standard Prolog predicate op/3 to check for a permission error when trying to declare the empty list as an operator.
  • ADDED: Tests for the standard Prolog predicate write_term/3 to check using the quoted(true) option for writing atoms that start with % or /*.
  • ADDED: Tests for the standard Prolog predicate write_term/3 to check using the quoted(true) option for writing the [] and {} atoms.
  • ADDED: Tests for the standard Prolog predicate write_term/3 to check using the quoted(true) option for writing escape sequences.
  • ADDED: Additional tests for the at_end_of_stream/1, arg/3, number/1, compound/1, current_predicate/1, predicate_property/2, atom_chars/2, atom_codes/2, get_byte/2, get_char/2, and get_code/2, peek_byte/2, peek_char/2, peek_code/2, put_byte/2, put_char/2, put_code/2, sub_atom/5, number_chars/2, number_codes/2, read_term/3, close/1-2, write_term/3, and arithmetic comparison standard Prolog predicates.
  • ADDED: Additional tests for the catch/3 Prolog standard control construct.
  • ADDED: Tests for single quote representation in quoted atoms.
  • ADDED: Additional tests for curly terms syntax.
  • ADDED: Additional tests for the set_logtalk_flag/2 predicate.
  • IMPROVED: Tests for the predicate_property/2, put_byte/2, put_char/2, and put_code/2 Prolog predicates.
  • IMPROVED: Tests for the call/N, findall/3-4, ignore/1, once/1, and setof/3 Logtalk built-in methods.
  • IMPROVED: Tests for the threaded_engine_create/3, threaded_engine_next/2, threaded_engine_next_reified/2, and threaded_engine_destroy/1 Logtalk built-in predicates.
  • FIXED: Deleted two repeated tests for the abolish/1 standard Prolog predicate.
  • FIXED: Test for the | operator for the ISO/IEC 13211-1:1995/Cor.2:2012(en) standard.
  • FIXED: Test for the char_code/2 standard Prolog predicate with backend compilers that only support the US-ASCII character set.
  • FIXED: Test for the char_code/2 standard Prolog predicate that is expected to either succeed or throw an error depending on the backend Prolog compiler character set representation.
  • Installers and installation scripts:
  • UPDATED: The logtalk_backend_select script for Ciao Prolog, LVM and Tau Prolog.

New in Logtalk 3.41.0 (Sep 1, 2020)

  • Logtalk compiler and runtime:
  • CHANGED: Deleted the no longer used read-only prolog_conformance flag.
  • ADDED: Convenience error throwing built-in method uninstantiation_error/1.
  • ADDED: Linter checks for tautologies and falsehoods in non-ground var/1, nonvar/1, and ground/1 goals.
  • Prolog adapter and integration files:
  • UPDATED: The Tau Prolog adapter file to use the new stream_position_data/3 built-in predicate.
  • UPDATED: The taulgt shell script to accept -g and --goal command-line options. Changes contributed by José Antonio Riaza Valverde.
  • FIXED: The Fix Tau Prolog and template adapters for the internal predicate '$lgt_logtalk_prolog_encoding'/3.
  • Documentation:
  • ADDED: Documentation for the new uninstantiation_error/1 built-in method.
  • UPDATED: The man page of the Tau Prolog integration script, taulgt for the new command-line options to specify an initialization goal.
  • UPDATED: The man page of the logtalk_doclet and logtalk_tester shell scripts for the added support for using Tau Prolog as the backend compiler.
  • FIXED: Generate Handbook and API documentation using Sphinx 3.2.0 as it includes a fix for a bug where invalid ePub files would be generated.
  • Library:
  • ADDED: Definition for the os library predicates pid/1, date_time/7, directory_files/2, and file_permission/2 for Tau Prolog.
  • FIXED: Definition of the os::sleep/1 predicate for Tau Prolog.
  • FIXED: Definition of the os::file_permission/2 predicate for Quintus Prolog and SICStus Prolog.
  • Tools:
  • UPDATED: The debugger, diagrams, lgtunit, and ports_profiler tools for Tau Prolog support.
  • UPDATED: The logtalk_doclet and logtalk_tester shell scripts to support using Tau Prolog as the backend compiler.
  • UPDATED: The help tool for the new use_module/1 directive and the new uninstantiation_error/1 method.
  • Tests:
  • ADDED: Tests for the new uninstantiation_error/1 built-in method.
  • ADDED: Additional tests for the (=..)/2 Prolog standard predicate.
  • ADDED: Additional tests for the current_input/1 and current_output/1 Prolog standard predicates.
  • ADDED: Additional tests for Prolog standard list syntax.
  • ADDED: Additional tests for Prolog standard character input/output predicates for checking calls with a bound argument.
  • ADDED: Additional tests for the close/1 Prolog standard predicate for checking that the standard input/output streams are restored after closing redirections.
  • ADDED: Additional tests for the write_term/3 Prolog standard predicate for checking output of lists with elements that are conjunctions.
  • IMPROVED: Tests for the catch/3 and cut control constructs.
  • IMPROVED: Tests for the bagof/3, setof/3, and read_term/3 Prolog standard predicates.
  • FIXED: Test for the keysort/2 Prolog standard predicate.
  • FIXED: Some tests for the atomic/1 Prolog standard predicate.
  • FIXED: Duplicated test for the atom_concat/3 Prolog standard predicate.
  • FIXED: Test for the Prolog standard get_byte/2 built-in predicate.
  • FIXED: Tests for the Prolog standard number_codes/2 built-in predicate to set the double_quotes flag to codes as required. Thanks to José Antonio Riaza Valverde for the bug report.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Syntax highlighter support to the new uninstantiation_error/1 built-in method.

New in Logtalk 3.40.0 (Jul 29, 2020)

  • Logtalk compiler and runtime:
  • ADDED: Entity use_module/1 directive to support the declaration of module aliases. The aliased modules can be parameter variables when using the directive in a parametric object or a parametric category.
  • FIXED: The compilation of file level ensure_loaded/1 and use_module/1-2 directives when using backend Prolog compilers such as Tau Prolog that don’t support calling them as predicates.
  • Prolog adapter and integration files:
  • FIXED: The Qu-Prolog adapter file definition of the '$lgt_format'/2 internal predicate.
  • Documentation
  • IMPROVED: The documentation of the create_object/4 and create_category/4 built-in predicates.
  • FIXED: Include the developer tool and library overviews on the PDF version of the Handbook.
  • Library:
  • FIXED: The definition of the os::operating_system_type/1 predicate for Tau Prolog.
  • FIXED: Workaround the lack of support for static multifile predicates in Qu-Prolog in the list library object.
  • Tools:
  • CHANGED: The doclet tool integration with the make tool to run all the loaded doclets instead of requiring that a single doclet is loaded.
  • IMPROVED: Simplify the zoom_doclet doclet example by using the lgt2svg script.
  • IMPROVED: The lgtdoc tool no longer changes the current working directory when generating documenting XML files.
  • Tests:
  • CHANGED: Moved tests for arithmetic functions abs/1, ceiling/1, div/2, float/1, float_fractional_part/1, float_integer_part/1, floor/1, mod/2, rem/2, round/1, and truncate/1 from the is/2 predicate test set to their own test sets.
  • ADDED: Additional tests for Prolog control constructs for better coverage of expected exceptions when testing Prolog systems under development.
  • ADDED: Missing test for an error condition of the Prolog standard predicate current_op/3.
  • ADDED: Missing tests for an error condition of the Prolog standard predicate stream_property/2.
  • ADDED: Missing tests for the properties of standard Prolog streams.
  • ADDED: Tests for the Prolog standard predicate is/2 when the first argument is bound.
  • ADDED: Tests for the de facto standard log/2 and log10/1 arithmetic functions.
  • Examples:
  • ADDED: Simple example, module_aliases, illustrating the use of module aliases.
  • Installers and installation scripts:
  • UPDATED: The Windows installer notes on how to change the default system installation directory.

New in Logtalk 3.39.0 (Jun 17, 2020)

  • Logtalk compiler and runtime:
  • CHANGED: The logtalk built-in object to call the portability abstraction for the format/2-3 predicates.
  • ADDED: Linter hook predicate, logtalk_linter_hook/8, enabling libraries to define linter warnings. Experimental.
  • IMPROVED: Linter checks for tautologies and falsehoods in is/2 goals.
  • UPDATED: The logtalk_make/1 predicate check target to also scan for library paths not ending with a slash.
  • UPDATED: The compiler internal table of standard predicates to include the call/2-8 predicates.
  • Prolog adapter and integration files:
  • CHANGED: Lean Prolog is no longer supported due to unfixed bugs and lack of standards compliance.
  • CHANGED: Abstract the calls to the format/2-3 predicates to workaround portability issues with Tau Prolog and Scryer Prolog.
  • UPDATED: Support for Ciao Prolog. Experimental. Contributed by José Morales.
  • UPDATED: Support for Tau Prolog. Experimental. With contributions from José Antonio Riaza Valverde.
  • Documentation:
  • IMPROVED: Documentation of the scratch_directory compiler flag.
  • UPDATED: The QUICK_START.md file to mention the tutor tool.
  • FIXED: Broken Handbook links do API documentation. Thanks to Paul Brown for the bug report.
  • Library:
  • CHANGED: The behavior of the library nth0/4 and nth1/4 list predicates to match the same behavior found in Prolog libraries where the last argument returns all other elements instead of just those after the selected element.
  • ADDED: New path_concat/3, temporary_directory/1, and null_device_path/1 predicates to the os library. The path_concat/3 predicate specification is taken from Ciao Prolog.
  • ADDED: New dif/1 predicate to the coroutining library to set dif/2 constraints between all terms in a list.
  • ADDED: More type edge cases to the arbitrary category for atomic and list terms.
  • ADDED: New hook object suppress_goal_hook to the hook_objects library to support suppressing a goal in a clause body by prefixing it with the -- operator.
  • ADDED: Support for Ciao Prolog and Tau Prolog to the portable os and random libraries.
  • ADDED: Support for Tau Prolog to the types library.
  • UPDATED: The list library object to illustrate the new experimental linter hook predicate.
  • Tools:
  • ADDED: Support for Ciao Prolog to the debugger, lgtunit, and ports_profiler tools.
  • ADDED: Support for Tau Prolog to the lgtunit tool.
  • ADDED: Support for the subsumes/2 outcome for test/2-3 test dialects to the lgtunit tool.
  • ADDED: Option to the logtalk_tester shell script to specify an alternative name for the tests driver and sourced files (minus the file name extensions).
  • UPDATED: The help tool for the new logtalk_linter_hook/8 predicate.
  • UPDATED: The QuickCheck implementation to also print counter-example shrink steps when using the v(true) option.
  • FIXED: The QuickCheck implementation to also use the pc/1 option when shrinking counter-examples.
  • FIXED: Interference between QuickCheck ec/1 and v/1 options.
  • FIXED: Bug in the logtalk_tester shell script where running the same test with two different backends in a row would result in the wrong results being reported for the second run if it resulted in the tests being skipped.
  • FIXED: Warnings when the logtalk_tester shell script finds no test sets.
  • FIXED: The diagrams tool tester.lgt file to avoid reloading the types(pairs) library dependency in non-optimized mode.
  • Tests:
  • ADDED: Preliminary version of tests for the compiler translation of DCGs.
  • ADDED: Tests for the get_seed/1 and set_seed/1 predicates and for most of the parametric types defined by the arbitrary library category.
  • IMPROVED: Goal-expansion tests for the hook_set/1 library object.
  • FIXED: Generate code coverage data for the arbitrary library category.
  • Examples:
  • ADDED: New example, figures, with an implementation using parametric objects of the network modeling example for recognizing polyhedra represented as graphs described in the paper “A framework for network modeling in Prolog” by Zdravko I. Markov.
  • ADDED: New example, process_modeling, of using parametric objects to represent and restore shared variables between sets of constraints that are stored in different objects.
  • UPDATED: The dcgs example to illustrate how to use the call//1 built-in non-terminal and a lambda expression to access the input list of a grammar rule without breaking DCGs abstraction.
  • UPDATED: The errors example for the updated linter checks for falsehoods and tautologies in is/2 goals and for the new experimental linter hook predicate.
  • Installers and installation scripts:
  • CHANGED: Make Ciao Prolog and Tau Prolog support available by default in POSIX systems.
  • UPDATED: The Windows installation script to also detect SICStus Prolog 4.6.x versions.

New in Logtalk 3.38.0 (Apr 28, 2020)

  • Logtalk compiler and runtime:
  • ADDED: Compiler lint check for non-tail recursive predicate definitions.
  • ADDED: New compiler flag, tail_recursive, with possible values warning and silent (the default value).
  • ADDED: Compiler deprecated warning for DEC-10 Prolog I/O, fail_if/1 and prolog_flag/2 built-in predicate calls.
  • IMPROVED: Compile calls to deprecated prolog_flag/2-3 as calls to one of the current_prolog_flag/2 or set_prolog_flag/2 predicates when safe and the flags are standard ISO Prolog flags.
  • IMPROVED: Compile calls to deprecated name/2 predicate when the first argument is bound as calls to one of the atom_codes/2, number_codes/2, or char_code/2 predicates.
  • IMPROVED: Compile calls to deprecated current_predicate/2 predicate when the second argument is bound and references a local predicate as calls to the current_predicate/1 predicate.
  • Prolog adapter and integration files:
  • ADDED: Default definition for the new tail_recursive flag to all adapter files.
  • Documentation:
  • UPDATED: The Handbook compiler flags section to include a description of the new tail_recursive flag.
  • Library:
  • CHANGED: Switch the arbitrary category to use the fast_random generator.
  • ADDED: Predicates get_seed/1 and set_seed/1 to the arbitrary category.
  • ADDED: Support for generating arbitrary values and edge cases for the partial_list and list_or_partial_list types to the arbitrary category.
  • ADDED: Support to generate edge cases for pair, pair(KeyType,ValueType), non_empty_list, non_empty_atom, and non_empty_atom(CharSet) types to the arbitrary category.
  • UPDATED: Documentation of the arbitrary library.
  • UPDATED: The arbitrary category to also generate surrogate code points as edge cases for the character_code(unicode_full) type.
  • FIXED: Deleted wrong edge_case/2 clauses for the type list(Type,Length) from the arbitrary category.
  • FIXED: The documentation of the arbitrary category omitted the support for the atom(CharSet,Length) type.
  • FIXED: The arbitrary category edge cases for the atom(CharSet,Length) and list(Type,Length,Min,Max) types.
  • FIXED: The edcg library to write warning message arguments using ~q.
  • FIXED: The library parallel_logtalk_processes_setup.pl file when using SWI-Prolog as the backend compiler to use the tmp_dir flag instead of a fixed /tmp path.
  • Tools:
  • CHANGED: Switch the lgtunit tool to use the fast_random generator in its QuickCheck implementation.
  • CHANGED: The lgtunit tool quick_check/3 predicate reified results to include the random generator starting seed used to generate the tests.
  • CHANGED: The lgtunit tool QuickCheck test dialects printed messages in case of errors and failures to include the starting seed used to generate the random tests.
  • ADDED: Support to the logtalk_tester shell script to set the random generator starting seed used to run QuickCheck tests.
  • ADDED: QuickCheck rs(Seed) option to the lgtunit tool to allow passing the random generator starting seed to be used to generate the random tests.
  • ADDED: QuickCheck ec(Boolean) option to the lgtunit tool to control use of edge cases when generating random arguments. Default is true.
  • ADDED: QuickCheck pc(Closure) option to the lgtunit tool to allow defining a pre-condition closure for filtering generated tests (no default).
  • ADDED: QuickCheck l(Closure) option to the lgtunit tool to allow defining a label closure for classifying the generated tests (no default).
  • ADDED: QuickCheck v(Boolean) option to the lgtunit tool to allow verbose reporting of generated random tests. Default is false.
  • UPDATED: Documentation of the lgtunit tool for the improved QuickCheck implementation.
  • UPDATED: The tutor tool to explain the new non-tail recursive predicate definition warnings.
  • IMPROVED: Documentation of the assertions and dead_code_scanner tools.
  • IMPROVED: The lgtdoc tool generated reStructuredText layout for predicate remarks.
  • IMPROVED: The diagrams tool now uses a diagrams.css file to style generated diagrams in SVG format. This file is automatically copied to the diagrams output directory when using the lgt2svg scripts.
  • IMPROVED: The diagrams tool generated SVG diagrams now highlight links on mouse over events.
  • IMPROVED: The solution used by the code_metrics tool tests to suppress the metrics normal output when run.
  • IMPROVED: Simplified the errors reported by the lgtunit tool QuickCheck predicates and QuickCheck test dialects.
  • FIXED: Bug in the lgtunit tool expansion of discontiguous/1 directives when the argument is a singleton list.
  • Examples:
  • UPDATED: The errors example to illustrate the new tail recursive lint warnings.
  • IDEs, text editors, and syntax highlighters support
  • ADDED: Instructions for installing or updating Logtalk support for the Kate text editor when running on macOS or Windows.
  • FIXED: Bump version of Kate syntax highlighter support to allow overriding old versions bundled with Kate binaries.

New in Logtalk 3.37.0 (Apr 3, 2020)

  • Logtalk compiler and runtime:
  • ADDED: New meta message Format+Arguments for use with the message printing mechanism. See the logtalk built-in object API documentation for details.
  • ADDED: Compiler optimization for the special case where an object sends a message to itself. The practical case is a parametric object where one of more parameters are updated by the object predicates.
  • ADDED: Support for using the user pseudo-object as an event monitor by defining before/3 and after/3 plain Prolog predicates.
  • FIXED: Avoid duplicated or redundant entity operator properties, which may result from e.g. included files or when compiling modules (as objects) that reexport other modules.
  • Prolog adapter and integration files:
  • CHANGED: The SWI-Prolog adapter file to only load generated intermediate Prolog files with the derived_from/1 property when the Prolog flag logtalk_source_location_data is true.
  • CHANGED: The SWI-Prolog hooks file to call logtalk_make/0 from make/0 when the Prolog flag logtalk_source_location_data is false.
  • ADDED: SWI-Prolog adapter support for all the syntax variants of the dynamic(Predicates as Properties) proprietary directive. Requested by James Cash.
  • IMPROVED: The SWI-Prolog adapter file now deletes tests when compiling a module as an object to avoid compilation errors.
  • IMPROVED: YAP adapter file expansion of use_module/1-2 and reexport/1-2 directives.
  • UPDATED: The SWI-Prolog and YAP files to support expanding reexport/1 directives when the argument is a list of files.
  • FIXED: SWI-Prolog adapter file expansion of use_module/1-2 and reexport/1-2 directives to include exported operators.
  • Documentation:
  • CHANGED: Consolidated Handbook listing of flags in the programming section.
  • ADDED: Handbook section on redefining built-in predicates.
  • ADDED: Handbook section on sending messages from Prolog modules.
  • ADDED: Handbook section on debugging expansions.
  • ADDED: Handbook glossary entry for predicate shorthand.
  • IMPROVED: Handbook sections on messages, reflection, error handling, documenting, inheritance, term-expansion, performance, and writing and running applications.
  • IMPROVED: Handbook glossary definition of steadfastness.
  • IMPROVED: Handbook documentation of the include/1 directive.
  • IMPROVED: Handbook documentation of the logtalk_make/1, logtalk_load/1-2, and logtalk_compile/1-2 built-in predicates.
  • IMPROVED: Handbook documentation of the error handling built-in methods.
  • UPDATED: Handbook section on debugging using the term-expansion mechanism.
  • FIXED: Typo in Handbook section on the parametric objects in the description of the built-in method this/1. Thanks to David Tonhofer for the bug report.
  • Library:
  • ADDED: Predicates update/3 and lookup/2 to the dictionaries library.
  • ADDED: New hook object print_goal_hook to the hook_objects library to print entity predicate goals before, after, or before and after calling them.
  • ADDED: New hook object object_wrapper_hook to the hook_objects library to wrap the contents of a plain Prolog file as an object named after the file. Can be used to apply Logtalk developer tools to plain Prolog code.
  • FIXED: The edcg library to avoid defining the -->> infix operator as a global when expanding files defining EDCGs.
  • Tools:
  • ADDED: Notes on applying the code_metrics, dead_code_scanner, diagrams, lgtunit, and ports_profiler tools to Prolog code.
  • IMPROVED: The lgtunit tool automation support now prints the test object identifier when listing failed and skipped tests after the test name.
  • FIXED: The diagrams tool generation of module diagrams when using SWI-Prolog as the backend compiler to include exported operators.
  • Examples:
  • ADDED: Simple example, aspects, of Aspect-Oriented Programming using hot patching and event-driven programming support.

New in Logtalk 3.36.0 (Mar 3, 2020)

  • Distribution:
  • CHANGED: Version data in info/1 directives in all source files to use the compound term Major:Minor:Day format.
  • CHANGED: Date data in info/1 directives in all source files to the ISO 8601 standard format, Year-Month-Day.
  • Logtalk compiler and runtime:
  • CHANGED: Accept versions in info/1 directives using the compound term format Major:Minor:Day.
  • CHANGED: Accept dates in info/1 directives in ISO 8601 standard format (Year-Month-Day).
  • ADDED: Deprecated warning for info/1 directives with a version value not in the Major:Minor:Day format.
  • ADDED: Deprecated warning for info/1 directives with a date value in the old Year/Month/Day format.
  • ADDED: Lint check for unification goals that will succeed creating a cyclic term.
  • ADDED: Lint check for float comparison in ==/2, ==/2, =:=/2, and ==/2 goals.
  • ADDED: Also search for settings files on the %APPDATA%Logtalk directory when running on Windows operating-systems.
  • ADDED: Experimental @/1 goal annotation to allow calling from a complementing category a predicate definition in the patched object that is being replaced by a new definition in the category.
  • ADDED: Support the | infix operator as an alternative for disjunction in grammar rules.
  • IMPROVED: Mention the tutor tool in the startup help message output.
  • IMPROVED: Detect more cases of unification goals that are always true or always false.
  • IMPROVED: Decompilation of exception terms for top-level interpreter ::/2 and

New in Logtalk 3.35.0 (Jan 30, 2020)

  • Logtalk compiler and runtime:
  • ADDED: New compiler lint warning for redefined Logtalk operators and standard Prolog operators. These redefinitions can break term parsing causing syntax errors or change how terms are parsed introducing bugs.
  • ADDED: New compiler lint flag redefined_operators (with its default value set to warning).
  • ADDED: Support for using parameter variables in the second argument of uses/2 and use_module/2 directives.
  • ADDED: Support for declaring predicate and non-terminal aliases in reexport/2 directives.
  • IMPROVED: Refactoring of compilation and runtime execution of meta-calls and lambda expressions, simplifying the implementation and also providing a small performance improvement.
  • IMPROVED: Simplified check for valid meta-predicate definitions.
  • IMPROVED: Inlining of calls to the this/1 execution context method.
  • FIXED: Don’t cache message sending dynamic binding lookups that are only valid when the sender unifies with the predicate scope container as the cache entry would be too general while only valid in that specific condition.
  • FIXED: Don’t inline predicate definitions with variable aliasing in the clause head as this can result in optimization bugs when compiling predicate calls due to compile time variable bindings propagating to previous goals in the same clause body.
  • FIXED: The default value of the deprecated flag was not displayed at startup.
  • Prolog adapter and integration files:
  • ADDED: Support for using SWI-Prolog gspy/1 predicate to spy object and category predicates specified as Entity::Functor/Arity using the graphical tracer.
  • IMPROVED: Support for the SWI-Prolog graphical profiler by hiding all the compiler and runtime internal predicates (their computation time is added to the user level predicates).
  • IMPROVED: Support for the SWI-Prolog graphical profiler by hiding entity internal tables predicates when the logtalk_source_location_data flag is true (their computation time is added to the user level predicates).
  • UPDATED: The SWI-Prolog and YAP adapter files to support predicate aliases in module/2 directives when compiling modules as objects.
  • FIXED: Integration bug with the SWI-Prolog graphical tracer where variable bindings for user defined predicates would not be displayed in some cases.
  • FIXED: Integration bug with the SWI-Prolog graphical tracer where execution context variable bindings and grammar rules implicit difference lists would not be displayed in some cases.
  • Documentation:
  • ADDED: Documentation on the new compiler lint flag redefined_operators.
  • ADDED: Overview of the developer tools and libraries to the Handbook.
  • ADDED: Handbook section on the compiler linter.
  • ADDED: Library notes to the Handbook.
  • ADDED: First version of a Handbook section on Python nomenclature.
  • IMPROVED: Handbook section on Java nomenclature.
  • IMPROVED: Documentation of the logtalk_make/1 built-in predicate.
  • IMPROVED: Handbook section on defining meta-predicates.
  • UPDATED: Handbook developer tools documentation links to API documentation to not require an Internet connection when browsed locally.
  • UPDATED: Handbook and API documentation cross-links to not require an Internet connection when browsed locally.
  • UPDATED: The settings-sample.lgt file initialization code for using the SWI-Prolog graphical profiler.
  • UPDATED: Compatibility notes on SWI-Prolog support.
  • FIXED: Missing Handbook documentation on the deprecated flag.
  • Libraries:
  • ADDED: Notes on testing to all libraries that include unit tests.
  • IMPROVED: The documentation of the arbitrary, coroutining, queues, dictionaries, and sets libraries.
  • FIXED: Harmless warning when running the redis library tests using XSB as the backend compiler.
  • Tools:
  • UPDATED: The tutor tool to provide explanations and suggestions for recently introduced linter warnings and improve explanations for reference to unknown entity warnings.
  • UPDATED: Documentation of the profiler tool.
  • FIXED: The logtalk_tester shell script to not count twice failed tests with assertion failed messages.
  • Tests:
  • ADDED: Tests for the ::/1-2 control constructs for runtime bound messages using the call/N control constructs.
  • ADDED: Tests for predicate shortcuts defined in uses/2 and use_module/2 directives that make use of parameter variables in the second argument.
  • UPDATED: Tests for the Logtalk current_op/3 method to avoid warnings with the new lint warning for redefined standard operators.
  • Examples:
  • UPDATED: The metapredicates example with additional didactic definitions of meta-predicates.
  • FIXED: The encodings example tests to collect code coverage results.
  • IDEs, text editors, and syntax highlighters support
  • UPDATED: Logtalk setup instructions for ctags 5.8. Thanks to Paul Brown for the pull request.

New in Logtalk 3.34.0 (Jan 8, 2020)

  • Logtalk compiler and runtime:
  • CHANGED: Allow a local operator to also be declared in a scope directive to simplify compilation of included files and compilation of modules as objects.
  • CHANGED: Throw a representation error instead of failing if it is not possible to convert an entity prefix to an entity template. The error is highly unlikely to occur in practice, however, and only affects the runtime error handler code that attempts to convert exception terms for readability.
  • ADDED: Support for defining predicate shorthands to the uses/2 and use_module/2 directives where some or all arguments may be instantiated.
  • ADDED: Support for the legacy Prolog database built-in predicates that take a clause reference argument when supported by the backend Prolog compiler.
  • ADDED: Report calls to deprecated character input/output built-in Prolog predicates get0/1-2, get/1-2, skip/1-2, put/1-2, and tab/1-2.
  • ADDED: Report calls to deprecated TTY input/output built-in Prolog predicates ttynl/0, ttyflush/0, ttyget0/1, ttyget/1, ttyskip/1, ttyput/1, and ttytab/1.
  • ADDED: Detect and report legacy on_exception/3, raise_exception/1, abolish/2, otherwise/0, and prolog_flag/2-3 Prolog predicates.
  • IMPROVED: Only report legacy Prolog predicates as deprecated when they are built-in and not defined by the user in the entity where they are called.
  • IMPROVED: Refactoring of the compiler code that reports calls to deprecated Prolog built-in predicates.
  • IMPROVED: Take into account foreign and auto-loaded predicates when compiling a module as an object also when compiling arbitrary goals used as directives.
  • IMPROVED: Avoid spurious choice-points during source file compilation when using some backend Prolog compilers.
  • FIXED: Possible instantiation error when running logtalk_make(check) while checking for missing predicates when there are dynamic or multifile predicates with no local clauses.
  • FIXED: Duplicated warnings on missing multifile/1 directive.
  • FIXED: Typo in permission error when compiling scope directives and checking for duplicated operator declarations.
  • FIXED: Duplicated arithmetic function portability warnings for the Prolog legacy use of a list with a single character to represent the code of the character.
  • Prolog adapter and integration files:
  • UPDATED: The SWI-Prolog adapter file to support finding predicates that are visible in a module via an imported module.
  • FIXED: ECLiPSe, SWI-Prolog, and YAP adapter file expansion of reexport/1 directives.
  • FIXED: YAP adapter file internal predicate for module qualification of calls to Prolog meta-predicates to not depend on the term-expansion mechanism.
  • Documentation:
  • ADDED: Handbook section on asserting and retracting clauses for Prolog dynamic predicates from objects and categories.
  • ADDED: Missing Handbook reference to the core_messages built-in category.
  • ADDED: Handbook section on the debugging API.
  • ADDED: Handbook glossary definition of closure.
  • IMPROVED: The settings-sample.lgt file now advises on placement of sample initialization code that changes the code_prefix default value.
  • IMPROVED: The lgtunit tool documentation.
  • IMPROVED: Handbook section on performance regarding inlining and compiler automatic expansion of selected built-in methods.
  • IMPROVED: Documentation of the built_in/0, encoding/1, use_module/2, uses/2, public/1, protected/1, and meta_predicate/1 directives.
  • IMPROVED: Documentation of the built-in logtalk_make_target_action/1 and logtalk_library_path/2 predicates.
  • UPDATED: Handbook Prolog migration section on handling and converting reexport/1 module directives.
  • UPDATED: Handbook reference pages on the database methods to mention the support for module qualified arguments.
  • FIXED: Missing reference to the synchronized/1 directive in the Handbook section on predicate declarations.
  • Library:
  • CHANGED: The exception terms throw by the expecteds library predicates expected/1, unexpected/1, and or_else_get/2 for clarity.
  • ADDED: Non-deterministic constructors to the expecteds and optionals libraries.
  • ADDED: Predicates if_expected_or_else/2 and either/3 to the expecteds/1 library object.
  • FIXED: The expected::from_goal/3 predicate to match its description when computing the expected value throws an exception.
  • Tools _____
  • CHANGED: The lgtunit tool now also prints code coverage information for entities declared as covered but with no calls to locally defined predicates.
  • IMPROVED: The lgtunit tool now prints a warning when code coverage is requested for a protocol.
  • Tests:
  • ADDED: Tests for the de facto Prolog standard succ/2 and plus/3 built-in predicates.
  • ADDED: Tests for the legacy Prolog database built-in predicates that take a clause reference argument.
  • ADDED: Tests for the legacy Prolog blackboard built-in predicates.
  • UPDATED: Tests for the goal_expansion/2 predicate to check the case where a goal to be expanded resulted from a previous expansion of the same goal.
  • UPDATED: Tests for Prolog term_variables/2 and numbervars/3 built-in predicates to use assertions to simplify debugging.
  • Examples:
  • CHANGED: Full rewrite of the testing example to illustrate all the test dialects supported by default by the lgtunit tool.
  • ADDED: New example, defaulty, comparing defaulty and tagged data representations.
  • IMPROVED: The recipes hot patching example to better illustrate adding clauses to patched objects.
  • IMPROVED: Documentation of the cascade example.
  • IMPROVED: Unit tests of the hailstone example.
  • UPDATED: The complements/allow example to also illustrate abolishing a dynamic complementing category.
  • Installers and installation scripts:
  • IMPROVED: The Debian installer to define default values for the Logtalk environment variables.

New in Logtalk 3.33.0 (Dec 4, 2019)

  • Logtalk compiler and runtime:
  • ADDED: Support for overriding (or providing if absent) the meta-predicate template of a Prolog built-in predicate.
  • IMPROVED: Wording of the lint warning for all-solution predicates that may share no variables between the template and the goal arguments.
  • FIXED: Actually load settings files silently (although errors will be still reported but otherwise ignored).
  • Prolog adapter and integration files:
  • CHANGED: The SWI-Prolog definition of the internal compiler predicate that checks for auto-loaded module predicates when compiling a module as an object to use the predicate property imported_from/1 instead of the buggy property implementation_module/1.
  • ADDED: Support to the SWI-Prolog and YAP adapter files to expand Prolog reexport/2 directives with an except/1 second argument.
  • ADDED: Some more proprietary built-in predicates that can be used to check for tautology and falsehood goals to the adapter files.
  • ADDED: Declaration for the timed_call/2 built-in meta-predicate to the XSB adapter file.
  • Documentation:
  • ADDED: Usage example to the debug_messages tool documentation.
  • ADDED: Prolog backend specific portability notes to the os library API documentation.
  • IMPROVED: Documentation of the code_metrics, dead_code_scanner, lgtdoc, and ports_profiler tools.
  • IMPROVED: The diagrams tool documentation section on generating diagrams with links sub-diagrams, source code, and API documentation.
  • IMPROVED: The lgtunit tool documentation section on testing input/output predicates.
  • IMPROVED: Documentation of the expecteds and optionals libraries.
  • UPDATED: The settings-sample.lgt file with sample code for easy loading of personal projects and third-party libraries without having to first define a library alias for each project or library.
  • Library:
  • CHANGED: The timeout::call_with_timeout/2 predicate to throw a timeout(Goal) exception instead of error(timeout(Goal),Context).
  • ADDED: Predicate timeout::call_with_timeout/3.
  • ADDED: Support for XSB to the timeout library.
  • ADDED: Predicates ensure_directory/1 and ensure_file/1 to the os library.
  • ADDED: Predicate from_goal/2 to the expecteds and optionals libraries.
  • ADDED: Predicates if_present_or_else/2, or/2, and or_else_throw/2 to the optionals library.
  • ADDED: Convenience predicate random::enumerate/2.
  • FIXED: Predicates map/2 and flat_map/2 of the optionals library to also return an empty optional when calling the closure argument throws an error.
  • FIXED: The predicate expected::from_goal/4 which would not use the given error argument when calling the goal generates an exception.
  • FIXED: Predicate backend_random::random/1 when using XSB as the backend compiler.
  • FIXED: The coroutining library freeze/2 and when/2 predicates when using ECLiPSe as the backend compiler.
  • FIXED: The timeout::call_with_timeout/2 library predicate when using ECLiPSe as the backend compiler.
  • FIXED: The predicate atom::split/3 when given an empty atom as delimiter. Thanks to Paul Brown for the bug report.
  • Tools:
  • ADDED: Support for detecting duplicated library aliases when calling the logtalk_make/1 predicate with the check target.
  • ADDED: A boolean option, sort_predicates/1, to lgtdoc tool for writing predicate index lists sorted by predicate name (default value is false).
  • IMPROVED: The lgtdoc tool to list inherited public predicates in entity documentation.
  • IMPROVED: The lgtunit tool compatibility of the generated xUnit reports with xUnit output processors.
  • IMPROVED: The lgtunit tool generated xUnit reports now include the contents of the note/1 test option for skipped tests.
  • FIXED: Invalid code coverage XML report when the source code defines clauses for multifile predicates.
  • FIXED: Generating a code coverage report when using a parametric test object to test multiple implementations of the same protocol.
  • FIXED: The lgtunit tool to report a predicate clause coverage percentage of 100% when no predicate clauses exist instead of 0%.
  • FIXED: The lgtunit tool would write single line number information on failed tests or steps as “between lines” instead of as “at or above line”.
  • FIXED: Loading of the logtalk_index.dtd file when running the lgt2txt.sh script.
  • Tests:
  • ADDED: Unit tests for the atom library object replace_sub_atom/4 and split/3 predicates.
  • IMPROVED: Convert unit tests for the ISO Prolog standard is/2 built-in predicate to use assertions to simplify debugging.
  • FIXED: Unit tests for the lgtunit tool support for testing predicates that perform input/output operations to close the temporary files they use.
  • Examples:
  • ADDED: Simple multi-threaded implementation of a ping-pong game, threads/ping_pong.
  • ADDED: Threaded engine implementation of a priority message queue, engines/pmq.
  • ADDED: Simple Java-based GUI interface to the questions example.
  • IMPROVED: The books example of using the optionals library.
  • FIXED: The loader file of the persistency example to load the required os library and create the saved state file if it doesn’t exist.
  • FIXED: Missing unit tests cleanup in the serialization example.
  • IDEs, text editors, and syntax highlighters support:
  • FIXED: Pygments Logtalk lexer syntax error in the analyse_text function.

New in Logtalk 3.32.0 (Nov 5, 2019)

  • Logtalk compiler and runtime:
  • IMPROVED: Refined the compiler warning on unknown objects to detect when a loaded module may be being referenced as an object (which is also a potential portability issue).
  • IMPROVED: Don’t print portability warnings on Prolog dialect term-expansion when the term is expanded to itself.
  • IMPROVED: Simplify lint warning for using the sub_atom/5 predicate instead of the atom_concat/3 predicate. Thanks to Peter Ludemann for the suggestion.
  • UPDATED: The search for a settings file at startup now also looks into the $HOME/.config directory as a last resort.
  • FIXED: Running embedded applications on systems other than the one used to create the embedding files. Notably, running embedded applications created on a POSIX system in a Windows system.
  • FIXED: Meta-call context when a predicate is declared as both a multifile predicate and a meta-predicate.
  • FIXED: Don’t print a warning for a missing meta_predicate/1 directive for multifile predicate definitions in entities other than the one providing the primary declaration.
  • Documentation:
  • IMPROVED: Handbook sections on event-driven programming, multi-threading programming, and question asking.
  • UPDATED: The lgtunit tool documentation to include links to xUnit report converters that generate HTML files.
  • FIXED: Installation instructions on setting Logtalk environment variables.
  • Tools:
  • CHANGED: The lgtunit tool xUnit reports to list the test results using the test order.
  • IMPROVED: The lgtunit tool compatibility of the generated TAP reports with TAP output processors.
  • IMPROVED: The lgt2rst.sh POSIX script now supports passing additional options to the sphinx-quickstart script when using the -s option.
  • UPDATED: The lgtdoc tool POSIX scripts for converting XML documentation files now accept a -v option for returning the script version.
  • UPDATED: The tutor tool for the refined unknown object warning.
  • UPDATED: The logtalk_tester shell script to accept common aliases for the backend name in order to simplify use in GitHub actions and workflows.
  • FIXED: Bug in the diagrams tool where a spurious entity node would be generated for a related parametric entity with a bound parameter.
  • FIXED: Bug in the diagrams tool when generating edges between entities for cross-referencing predicate calls where the called entity is only know at runtime.
  • FIXED: Bug in the lgtunit tool XSLT script that converts XML code coverage reports to HTML where the prefix parameter would not be used to shorten the test suite file path.
  • Tests:
  • ADDED: Tests for multifile meta-predicates.
  • ADDED: Tests for the de facto standard Prolog arithmetic functions gcd/2 and sign/1.
  • Examples:
  • ADDED: Sample implementations of the “many worlds” design pattern using the inheritance and parametric solutions.
  • ADDED: New questions example illustrating the question asking mechanism.
  • UPDATED: The lazy example of threaded engines to use the coroutining library.
  • Installers and installation scripts:
  • IMPROVED: The GNU Prolog embedding script now supports setting the name of the generated executable and passing additional options to gplc.
  • IMPROVED: The SICStus Prolog, SWI-Prolog, and YAP embedding scripts now also support generating standalone saved states with a given name and startup goal.
  • FIXED: SWI-Prolog packs download/1 predicate to use an URL pattern instead of a version specific URL to allow upgrading. Thanks to Peter Ludemann for the bug report.
  • FIXED: The Dockerfile to include the path to the diagrams tool scripts in the system path.

New in Logtalk 3.31.0 (Oct 16, 2019)

  • Logtalk compiler and runtime:
  • ADDED: Support for using the predicate_property/2 method to query proprietary predicate properties that result from proprietary predicate directives that are supported by the adapter files.
  • ADDED: Support for using encoding/1 directives in included files, which may specify encodings different from the encoding of the main file.
  • ADDED: Lint check for findall(_, Goal, _) goals which misuse findall/3 to backtrack into all solutions of Goal.
  • ADDED: Lint check for redundant uses of the +/1 control construct.
  • ADDED: Support for compiling Prolog modules as objects when the modules export built-in predicates.
  • FIXED: Generate a compiler error when an entity parameter is not a variable. Thanks to Paul Brown for the bug report.
  • FIXED: The lint check on call/1 wrappers to skip warnings when the wrapped goal is a cut-transparent control construct.
  • Prolog adapter and integration files:
  • ADDED: Internal predicate to all adapter files to declare additional, proprietary predicate properties.
  • ADDED: Support to the SWI-Prolog and YAP adapter files to expand Prolog use_module/2 directives with an except/1 second argument.
  • ADDED: Support to the SWI-Prolog and YAP adapter files to expand Prolog use_module/2 directives that specify predicate aliases.
  • ADDED: Support to the ECLiPSe adapter file to expand module/1 directives to allow compiling modules as objects.
  • FIXED: Workaround lack of a foreign predicate property in SICStus Prolog.
  • Documentation:
  • IMPROVED: Handbook section on parametric objects.
  • IMPROVED: Handbook section on Prolog integration and migration. Includes a discussion on how to use hook objects to deal with Prolog term-expansion mechanisms when compiling modules as objects.
  • IMPROVED: Documentation of the lgtunit tool on checking test goal results.
  • IMPROVED: Documentation of the logtalk_compile/1-2 and logtalk_load/1-2 built-in predicates.
  • Library:
  • FIXED: The mode/2 directive for the difflist predicate as_list/2.
  • Tools:
  • CHANGED: The code_metric::sub_library/2 protected predicate to return sub-library names instead of sub-library paths.
  • CHANGED: The code_metric::process_rlibrary/1 protected predicate to take as argument a library name instead of a library path.
  • FIXED: Missing scope directive for the code_metric::process_library/1 protected predicate.
  • FIXED: The code_metrics tool processing of predicates rdirectory_score/2 and rlibrary_score/2 for the noc_metric, nor_metric, size_metric, and upn_metric metrics.
  • FIXED: Missing additional mode/2 directives for the lgtunit object set_text_input/1-3, set_text_output/1-2, and create_text_file/2 predicates which also accept a list of atoms.
  • FIXED: Sample code in the lgtunit tool documentation on user-defined test dialects.
  • CLEANUP: Dead code in the diagrams tool.
  • Tests:
  • ADDED: Tests for encoding/1 directives in included files.
  • IMPROVED: Rewritten the ISO Prolog standard read_term/3 predicate tests to use assertions for easier debugging.
  • Examples:
  • FIXED: The clustering and document_converter Java examples when using YAP as the backend Prolog compiler.
  • Ports:
  • ADDED: Port of ToyCHR by Gregory J. Duck. Experimental.
  • Installers and installation scripts:
  • UPDATED: The Windows installer to allow passing the installation directory using the command-line option /DIR=path.
  • FIXED: The Windows installer to find a GNU Prolog 1.4.5 installation, which uses a registry key different from the one used in previous versions.
  • IDEs, text editors, and syntax highlighters support
  • UPDATED: Textadept editor syntax highlighting support. Contributed by Michael T. Richter.
  • UPDATED: Syntax test files to allow detecting highlighting flaws where an atom would be mistaken for a built-in predicate or a built-in directive. After a suggestion by Michael T. Richter.

New in Logtalk 3.30.0 (Sep 18, 2019)

  • Logtalk compiler and runtime:
  • ADDED: Lint warning for missing scope directives for dynamic predicates declared in standalone categories.
  • ADDED: Lint warning for a common case of misusing the atom_concat/3 built-in predicate where using the sub_atom/5 built-in predicates would be more efficient.
  • ADDED: Lint warning for non-ground =/2 and unify_with_occurs_check/2 goals that will succeed without binding any variables.
  • ADDED: Lint warnings for two other cases of misusing the =../2 built-in predicate where using the arg/3 or functor/3 built-in predicates would be more efficient.
  • ADDED: Lint warnings for use of non-standard options in calls to the open/4, read_term/2-3, and write_term/2-3 predicates.
  • ADDED: Support for compiling Prolog module meta_predicate/1 directives (when compiling a module as an object) where the templates are explicitly qualified.
  • IMPROVED: Duplicated directive, clause, and grammar rule lint warnings now also print the location of the first occurrence.
  • IMPROVED: Compiler linter to distinguish between missing meta_predicate/1 directives and missing meta_non_terminal/1 directives.
  • IMPROVED: Simplify lint warnings on conditionals missing the else part.
  • IMPROVED: Compiler lint reports of missing directives to print the directives ready to copy to the source code.
  • IMPROVED: Take into account foreign and auto-loaded predicates when compiling a module as an object.
  • IMPROVED: Accept Prolog encoding/1 directives when compiling a Prolog source file as a Logtalk source file.
  • FIXED: Compilation of reexport/2 directives regression when compiling a Prolog module as an object.
  • FIXED: Source file start and end lines reported by the reflection API when compiling a module as an object.
  • Prolog adapter and integration files:
  • UPDATED: The SICStus Prolog adapter file to suppress is/2 predicate directives when compiling a module as an object.
  • UPDATED: The SWI-Prolog adapter file to term-expand thread_local/1 directives to both thread_local/1 and dynamic/1 directives to prevent spurious lint warnings about missing dynamic/1 directives when compiling a module as an object.
  • UPDATED: All adapter files with auxiliary predicate to locate auto-loaded module predicates when supported.
  • Documentation:
  • IMPROVED: Handbook section on inheritance.
  • FIXED: Links from the make tool documentation to the make built-in predicates. Thanks to Michael T. Richter for the bug report.
  • FIXED: Link anchors in API documentation links in the documentation of the debug_messages and ports_profiler tools.
  • FIXED: Crosslinks between Handbook and APIs documentation cannot be relative due to nesting of the Handbook pages.
  • FIXED: URLs in the HTML versions of the man pages.
  • Library:
  • FIXED: Syntax error running the assignvars library tests with some backend Prolog compilers.
  • Tools:
  • CHANGED: The debugger tool semantics of context spy points to trigger the debugger when the spy point subsumes (instead of unifying with) the current goal and its execution context.
  • IMPROVED: The tutor tool explanations for several compiler lint warnings.
  • IMPROVED: The tutor tool coverage of compiler error messages.
  • Examples:
  • UPDATED: The errors example to illustrate new and improved lint warnings.
  • IDEs, text editors, and syntax highlighters support:
  • IMPROVED: Support for the Textadept editor (version 10.0 or later required). Thanks to Michael T. Richter.

New in Logtalk 3.29.0 (Sep 3, 2019)

  • Logtalk compiler and runtime:
  • ADDED: New compiler lint warning for lambda expression parameter variables that are used elsewhere in a clause.
  • ADDED: New compiler lint warning for bagof/3 and setof/3 where the goal argument contains singleton variables.
  • ADDED: New compiler lint warning for redundant uses of the call/N control construct.
  • ADDED: New compiler lint warning for Logtalk or Prolog top-level shortcuts used as directives.
  • ADDED: New compiler lint warning for calls to the deprecated name/2 and current_predicate/2 Prolog built-in predicates.
  • ADDED: New compiler lint warning for duplicated entity clauses and grammar rules.
  • ADDED: New compiler flag, duplicated_clauses, with possible values warning and silent (the default value).
  • FIXED: When a source file contains an encoding/1 directive, open any included files using the same text encoding.
  • FIXED: Bug in the processing of multiple initialization/1 directives in create_object/4 goals where the first directive could be ignored.
  • FIXED: Reporting of non-portable built-in predicate calls when the predicates are being redefined.
  • FIXED: Instantiation error when compiling a Prolog module as an object that contains a meta-call in user where the goal is only know at runtime.
  • FIXED: Typo in the settings-sample.lgt sample code for loading the new tutor tool. Thanks to Michael T. Richter for the bug report.
  • Prolog adapter and integration files
  • UPDATED: The SWI-Prolog adapter file to support dynamic/1 directives with as/2 arguments for incremental tabling.
  • IMPROVED: The SICStus Prolog adapter file now uses the stream_position/2 predicate to retrieve the stream position in case of error instead of the standard stream_property/2 predicate property position/1 that is not always available.
  • FIXED: Harmless dynamic predicate warning in the SICStus Prolog adapter file.
  • FIXED: Missing meta-predicate directive for the definition of the de facto standard forall/2 predicate in the ECLiPSe and SICStus Prolog adapter files.
  • FIXED: Begin line in compiler warning and error messages for ECLiPSe.
  • FIXED: Workaround Qu-Prolog bug where the read_term/3 predicate returns singletons/1 and variable_names/1 option lists with variable-name pairs instead of standard name-variable pairs.
  • Documentation:
  • ADDED: Cross-links between Handbook and APIs documentation.
  • ADDED: Handbook section on the Logtalk multi-pass compiler and its implications when writing source files.
  • IMPROVED: Handbook description of the code_prefix and clean flags.
  • IMPROVED: Glossary entry on “entity” and added “static entity” and “dynamic entity” aliases.
  • UPDATED: Handbook description of lambda expression lint checks.
  • Library:
  • FIXED: Avoid reporting the coroutining and timeout libraries as broken when testing while running on backend Prolog systems that don’t support them.
  • Tools:
  • UPDATED: The tutor tool to explain the new duplicated clauses and lambda expression lint checks plus the domain error generated when trying to use the set_prolog_flag/2 directive as an entity directive.
  • FIXED: Deleted two duplicated clauses in the help tool.
  • Tests:
  • ADDED: Unit test for multiple initialization/1 directives in dynamically created objects.
  • Examples:
  • UPDATED: The errors and lambdas examples to illustrate the new lint warnings.
  • FIXED: Workaround Qu-Prolog lack of support for static multifile predicates and discontiguous predicates when loading the errors example.
  • FIXED: Lambda expression examples and tests in the lambdas example to use fresh variables for all lambda expression parameters.

New in Logtalk 3.28.0 (Aug 14, 2019)

  • Logtalk compiler and runtime:
  • CHANGED: The compiler missing_scope_directive/5 warning message term to missing_scope_directive/6 to pass the name of the directive that triggers the warning.
  • CHANGED: The compiler ignored_directive/3 warning message term to ignored_encoding_directive/2.
  • ADDED: Support parametric object arguments in uses/2 directives where one or more parameters are parameter variables of the object (or category) that contains the directive.
  • ADDED: Compiler check for calls to the deprecated not/1 Prolog built-in predicate.
  • IMPROVED: When reporting a deprecated predicate, also report its replacement when applicable.
  • IMPROVED: Detect and report as a permission error any attempt to declare another entity static predicate (or static non-terminal) as dynamic during the compilation first stage. In previous versions, the predicate (or non- terminal) would remain static but, depending on the backend Prolog compiler, a loading error could be raised.
  • IMPROVED: The exception term used by the compiler to report attempts to make another entity predicate (or non-terminal) multifile now include the entity.
  • FIXED: Reporting of singleton variables in included files would wrongly report the main file and the line of the include/1 directive instead of the actual location.
  • FIXED: Line spacing issue when printing errors without a source file context.
  • Prolog adapter and integration files:
  • IMPROVED: Report an instantiation error when calling the {}/1 top-level interpreter shortcut with an unbound argument.
  • UPDATED: The SWI-Prolog adapter file to support tabling directives with table property declarations.
  • UPDATED: The SWI-Prolog adapter file to support its new proprietary dynamic/2 directive.
  • Documentation:
  • ADDED: Glossary definition of hook predicate.
  • IMPROVED: Handbook sessions on multifile predicates and lambda expressions.
  • UPDATED: Manual installation instructions for Windows users.
  • FIXED: Missing loops library API documentation.
  • FIXED: The category opening directive can have up to arity four. Thanks to Anton Danilov for the bug report.
  • Tools:
  • ADDED: New developer tool, tutor, aimed to help new users in understanding and acting on compiler warning and error messages. The tool adds explanations and fix suggestions for selected compiler messages.
  • FIXED: The help tool reported the category opening directive to have a maximum arity of three instead of four.
  • Tests:
  • ADDED: New unit tests for the uses/1 directive for improved coverage.
  • ADDED: New unit test for the uses/2 directive where the object argument is a parametric object where a parameter is a parameter variable of the object containing the directive.
  • ADDED: New unit test for the ISO Prolog standard read_term/3 predicate to check the variables/1, variable_names/1, and singletons/1 options when reading the end_of_file term.
  • Installers and installation scripts:
  • ADDED: AppVeyor script to build a Windows installer per commit.
  • UPDATED: The Windows installer to allow running in silent mode when using the command-line options /SILENT or /VERYSILENT.
  • UPDATED: The Windows installer to print instructions on how to manually create integration shortcuts when a backend Prolog compiler installation cannot be found.
  • FIXED: Workaround recent SWI-Prolog Windows installers no longer writing registry keys with its home directory by checking for the default installation directory as the last resort.
  • FIXED: Add UTF-8 BOM to Inno Setup script to avoid text display glitches.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Syntax highlighting test files to test representing a single quote inside a quoted atom using an escape sequence.
  • FIXED: Kate and SubEthaEdit 4.x/5.x syntax coloring of escape sequences in quoted atoms.
  • FIXED: GeSHi, Pygments, and Rouge support for the 0’Char number notation.

New in Logtalk 3.27.0 (Aug 14, 2019)

  • Logtalk compiler and runtime:
  • ADDED: Object and category uses/1 directive to support the declaration of object aliases. The aliased object can be a parameter variable when using the directive in a parametric object or a parametric category.
  • ADDED: The object argument in a uses/2 directive and the module argument in a use_module/2 directive can now be a parameter variable when using the directives in a parametric object or a parametric category.
  • ADDED: Compiler lint check for Logtalk built-in predicates being used as directives.
  • FIXED: Bug in the compilation of module meta-predicate calls in debug mode where the module prefix would be missing.
  • FIXED: Compiler warning and error messages when the reported issue is in the first line to print “at line 1” instead of “at or above line 1”.
  • FIXED: Compilation of secondary auxiliary clauses and initialization directives that are generated during the compilation of an initial set of auxiliary clauses (e.g. when using hook pipelines).
  • Prolog adapter and integration files:
  • ADDED: SWI-Prolog adapter file declarations for the recently added tnot/1 built-in meta-predicate plus table/1 and untable/1 built-in predicates.
  • Documentation
  • ADDED: The developer tools documentation is now included in the Handbook.
  • ADDED: Experimental support for generating Texinfo versions of the Handbook and the APIs.
  • IMPROVED: Handbook index cross-referencing.
  • IMPROVED: Entity protocol navigation in API documentation when using Sphinx.
  • FIXED: Workaround Sphinx HTML builder bug where it fails to escape special characters for the sole case of the < character in hyperlinks.
  • Library:
  • CHANGED: Moved most of the individual libraries to their own directories and renamed their loader files to loader.lgt for uniformity and simplicity.
  • CHANGED: The now deprecated library loader files to load the individual libraries from their new directories.
  • CHANGED: Renamed the setp protocol length/2 predicate to size/2 for naming consistency with other libraries. Added length/2 as an alias to the size/2 predicate to the set object for backwards compatibility.
  • MOVED: The heaps implementation from the types library to a separate heaps library.
  • MOVED: The queues implementation from the types library to a separate queues library.
  • MOVED: The sets implementation from the types library to a separate sets library.
  • MOVED: The dictionary protocol and implementations from the types library to a separate dictionaries library.
  • ADDED: Types list(Type,Length), list(Type,Length,Min,Max), and atom(CharSet,Length) with support for generating and shrinking arbitrary values.
  • ADDED: Additional edge cases for numbers when using a backend Prolog compiler with bounded arithmetic. Additional edge cases for the callable type.
  • ADDED: Edge cases for the ground, ground(Type), types(Types), and var_or(Type) types.
  • ADDED: Predicate values/2 to the dictionaries library protocol.
  • ADDED: Port of the SWI-Prolog assoc library under the name avltree and complying with the dictionaries library protocol.
  • FIXED: Missing definition of predicate bintree::valid/1.
  • FIXED: Bug where the bintree::as_dictionary/2 predicate would return an invalid tree.
  • FIXED: Bug where the bintree::apply/4 predicate would return an invalid tree.
  • FIXED: Bug where the bintree::delete/4 predicate that would succeed when the lookup key was not found.
  • FIXED: Bug in the rbtree::map/3 predicate that could result in pairs with a wrong value.
  • FIXED: Bug in the heap/1::merge/3 predicate that resulted in failed merges.
  • FIXED: Bug in the set::delete/3 predicate that could result in a missing element in the resulting set.
  • FIXED: Bug in the interval::overlaps/2 predicate where it could succeed for non-overlapping intervals.
  • FIXED: Off-by-one bug in the definition of the statistics predicates mean_deviation/2, media_deviation/2, and average_deviation/3.
  • FIXED: Broken definition of the statistics::range/2 predicate.
  • FIXED: Typo in the definition of the arbitrary generator for character codes.
  • FIXED: Updated the arbitrary category to workaround backend Prolog compilers that either don’t support the null character or provide buggy results when calling char_code/2 with a code of zero.
  • FIXED: Missing documentation and diagram for the cloning protocol.
  • FIXED: Workaround B-Prolog atom size limitation in the arbitrary library.
  • FIXED: JIProlog implementation of the java/2::invoke/2 predicate.
  • Tools:
  • CHANGED: The lgtdoc tool XML output specification removing the deprecated calls tag and updating the uses tag to include a functor tag for use with Sphinx output.
  • IMPROVED: The lgtdoc tool generated XML documenting files now include information about uses relations.
  • UPDATED: The help tool to open the library documentation index when calling the library/1 predicate with a valid library name.
  • UPDATED: The logtalk_tester shell script to also print the tests object identifier after the test results.
  • FIXED: The lgtunit tool QuickCheck implementation now ensures that generated values for ++Type arguments are indeed ground.
  • FIXED: The lgtunit tool QuickCheck implementation check for @Type arguments to actually check that the generated values are not modified by the property being tested.
  • FIXED: The lgtdoc tool XSLT files that generate final documentation formats ignored complements category relations.
  • FIXED: The lgtdoc tool processing of mode/2 directives for non-terminals.
  • FIXED: The assertions tool to prevent accidental expansion of ::/2 goals with unbound arguments.
  • Tests:
  • MOVED: All library tests from tests/logtalk/library to the individual library directories.
  • ADDED: Unit tests for the assignvars, coroutining, dictionaries, gensym, heaps, hierarchies, hook_flows, intervals, java, loops, meta, meta_compiler, queues, and sets libraries.
  • ADDED: Unit tests for the new object and category uses/1 directive.
  • ADDED: Unit tests for the ISO Prolog standard arithmetic function div/2.
  • IMPROVED: Unit tests for the statistics library.
  • IMPROVED: Unit tests for the forward/1 built-in method.
  • Examples:
  • RENAMED: The assignvars, expecteds, java, logging, and optionals are renamed to, respectively, assign_parameters, missing_data, jpl, logs, and books.
  • MOVED: The redis example, which only contains tests, to the tests/logtalk/library/redis directory.
  • ADDED: Simple example, object_aliases, illustrating the use of object aliases.
  • UPDATED: The errors example to illustrate warnings and errors when declaring object aliases.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Syntax highlighting test files for the new uses/1 directive.

New in Logtalk 3.26.0 (May 8, 2019)

  • Logtalk compiler and runtime:
  • FIXED: Decompilation of exceptions thrown by the

New in Logtalk 3.25.0 (Apr 2, 2019)

  • Logtalk compiler and runtime:
  • CHANGED: Prevent goal-expansion resulting in an infinite loop when the goal to be expanded resulted from a previous expansion of the same goal (checked using term equality). After a discussion with Peter Ludemann and Jan Wielemaker on the SWI-Prolog public forum.
  • CHANGED: Print an empty line after a compiler error or compiler warning for better readability.
  • ADDED: Lint check for ->/2 and *->/2 calls without an else part.
  • ADDED: Lint check for redundant uses of the {}/1 compiler bypass control construct (controlled by the suspicious_calls compiler flag).
  • ADDED: Lint check for cuts in clauses for multifile predicates.
  • ADDED: Lint check for bagof/3 and setof/3 calls with existentially qualified variables not occurring in the qualified goal.
  • ADDED: Lint check for bagof/3, setof/3, and findall/3-4 calls with a non-ground template and no shared variables between template and goal.
  • ADDED: Lint check for forall/2 calls with non-ground arguments with no shared variables.
  • ADDED: Lint check for redundant uses of the call/1 control construct.
  • ADDED: Lint check for redundant uses of the =../1 standard predicate.
  • ADDED: Lint check for redundant uses of the ::/2 message sending control construct to call predicates in user.
  • ADDED: Lint check for is/2 goals that are always false due to the first argument being a term other than a variable or a number.
  • ADDED: Lint check for is/2 goals where a variable occurs in both arguments.
  • ADDED: Lint check for missing cut after a call to the standard repeat/0 predicate.
  • ADDED: Lint check for entity names, predicate names, and variable names as per official coding guidelines.
  • ADDED: Lint check for variable names that differ only on case.
  • ADDED: Lint check for possible non-steadfast predicate and non-terminal definitions.
  • ADDED: Compiler option naming to control output of predicate name and variable name warnings. Default value is silent due to the the curent limitation to ASCII names and the computational cost of the checks.
  • ADDED: Compiler option steadfastness to control output of steadfast predicate warnings. Default value is silent due to the possibility of false positives.
  • UPDATED: Include the standard atomic term processing plus term creation and decomposition predicates in the list of predicates for the lint check for goals that are always true or false.
  • UPDATED: The coinductive/1 directive to also accept non-terminal indicators.
  • FIXED: The lint check for unclassified variables in lambda expressions to avoid spurious warnings when compiling in optimized mode and using lambda expressions with currying as meta-predicate arguments.
  • FIXED: Compiler bug when checking for a discontiguous predicate in the presence of two clauses for the same predicate with heads whose unification would create a cyclic term.
  • Prolog adapter and integration files:
  • ADDED: Unsupported adapter file for Tau Prolog.
  • UPDATED: GNU Prolog definition of the hook predicate for candidate tautology or falsehood goals to include non-standard type testing built-in predicates.
  • UPDATED: SICStus Prolog definition of the hook predicate for candidate tautology or falsehood goals to include non-standard type testing and unification built-in predicates.
  • UPDATED: The SWI-Prolog and YAP hooks files for the recently added threaded_cancel/1 built-in predicate.
  • FIXED: SWI-Prolog and YAP adapter file definitions for expanding top-level and module calls to the ::/2 message sending control construct to reject expanding a variable goal.
  • Documentation:
  • ADDED: Handbook documentation about the new naming and steadfastness compiler options.
  • ADDED: Handbook glossary entry for “steadfastness”.
  • IMPROVED: Handbook session on calling Prolog module meta-predicates.
  • UPDATED: Handbook session on performance with an overview of compilation modes and debug mode overhead.
  • UPDATED: The Handbook conf.py file for compatibility with Sphinx 2.x.
  • FIXED: Spurious and empty index section in the PDF version of the Handbook.
  • FIXED: Hyperlinks to compiler flags in the PDF version of the Handbook.
  • Library:
  • CHANGED: Specification fo the arbitrary category shrink/3 hook predicate to allow for generating multiple solutions for improved shrinking of failed goals by the QuickCheck implementation in the lgtunit tool.
  • CHANGED: Generation of arbitrary values for the types character_code and character to default to the ascii_full character set.
  • CHANGED: Generation of arbitrary values for the entity, predicate, and non-terminal identifier types plus compound and callable types to default to an ascii_identifier functor.
  • ADDED: Multifile predicate shrinker/1 to the arbitrary category to support declaring shrinkers for new types.
  • ADDED: Multifile predicate edge_case/2 to the arbitrary category to support defining edge cases for new and existing types.
  • ADDED: Type and arbitrary support for the ascii_identifier character set.
  • ADDED: Type definitions for atom(CharSet), non_empty_atom(Charset), character_code(CharSet), and character(CharSet).
  • ADDED: Type definitions for the common type abbreviations codes, codes(CharSet), chars, chars(CharSet), code, code(CharSet), char, and char(CharSet).
  • ADDED: Generation of arbitrary values for the character(CharSet), qualified_callable, operator_priority, and operator_specifier types.
  • ADDED: Generation of arbitrary values for the common type abbreviations codes, codes(CharSet), chars, chars(CharSet), code, code(CharSet), char, and char(CharSet).
  • ADDED: Support for shrinking values of types nonvar, atomic, var_or/1, atom(CharSet), non_empty_atom(CharSet),probability, qualified_callable, types/1, negative_number, non_positive_number, negative_float, non_positive_float, negative_integer, and non_positive_integer.
  • IMPROVED: Shrinking of lists by the arbitrary category now generates multiple solutions by incrementally reducing the generated list size and shrinking the list elements between each reduction.
  • IMPROVED: Shrinking of compound terms by also replacing a compound by any of its arguments.
  • FIXED: Shrinking of integer and non_negative_integer type values to fail when the value is zero.
  • FIXED: Bug when generating arbitrary values for the compound type where an atom could be produced.
  • FIXED: Add to the numberlistp protocol declarations for the max/2 and min/2 predicates as these override inherited declaration from the listp protocol to use arithmetic order instead of standard order.
  • FIXED: Non-steadfast flatten/2 predicate definition in list, varlist and hook_pipeline/1 objects.
  • FIXED: Non-steadfast bintree object min/3, max/3, delete_min/4, and delete_max/4 predicate definitions.
  • FIXED: Non-steadfast heap/1 object insert/4 and top_next/4 predicate definitions.
  • FIXED: Non-steadfast zlist::zip_index/4 predicate definition.
  • FIXED: Warnings printed by the new lint checks while compiling the libraries.
  • Tools:
  • CHANGED: The lgtunit tool QuickCheck implementation to print a failure instead of an error message when the test goal output arguments do not conform to the template signature.
  • ADDED: The lgtunit tool QuickCheck test idioms and predicates now supports a s/1 option for specifying the maximum number of shrink operations.
  • IMPROVED: The lgtunit tool QuickCheck implementation to try common edge values (e.g. empty atom, empty list, or zero) before generating arbitrary values for common types.
  • IMPROVED: The lgtunit tool QuickCheck implementation to support shrinking predicates that can generated multiple solutions, allowing finding simpler counter-examples when shrinking a failed goal.
  • IMPROVED: The lgtunit tool QuickCheck implementation to print the test number and the number of shrinks operations in failed test messages.
  • FIXED: The QuickCheck implementation in the lgtunit tool to prevent accidental binding of goal variables when shrinking it.
  • FIXED: Warnings printed by the new lint checks while compiling the wrapper tool.
  • Tests:
  • ADDED: New unit tests for the expand_goal/2 and goal_expansion/2 methods to check the changes to the goal-expansion mechanism.
  • UPDATED: Unit tests for the coinductive/1 directive.
  • Examples:
  • UPDATED: The errors example to illustrate the new compiler lint checks.
  • UPDATED: The aliases example to use parameter variables and improved test coverage.
  • UPDATED: The proxies example to use parameter variables. Also added sample benchmark calls.
  • FIXED: Warnings printed by the new lint checks while compiling the examples.
  • FIXED: Deleted lambdas example sample queries and unit tests that used unclassified variables in the lambda expressions.
  • CHANGED: Moved the lambdas example object used to illustrate lint checks of lambda expressions to a separate source file.
  • Contributions:
  • CHANGED: The verdi_neruda contribution loader file to enable reporting of compilation warnings and to require a manual start to not interfere with the automation scripts for generating API documentation.
  • FIXED: Harmless bug in the verdi_neruda contribution in a bagof/3 call with a existentially qualified variable not occurring in the qualified goal.
  • FIXED: Warnings printed by the new lint checks while compiling the PDDL parser.
  • Ports:
  • FIXED: Warnings printed by the new lint checks while compiling a Metagol example.
  • IDEs, text editors, and syntax highlighters support
  • FIXED: Kate and Pygments highlighting of directives with no arguments to not colorize the ending dot for consistency with other directives coloring.

New in Logtalk 3.24.0 (Mar 1, 2019)

  • Logtalk compiler and runtime:
  • ADDED: Built-in predicate threaded_cancel/1 to allow cancelation of asynchronous calls started using the threaded_call/2 and threaded_once/2 predicates.
  • IMPROVED: Allow the compiler linter to suggest more than one alternative for a suspicious call.
  • IMPROVED: Only print a warning about a debug handler provider already being loaded when the old and new provider are not the same object due to reloading.
  • FIXED: The compiler now throws a permission error when attempting to create an entity that would be both built-in and dynamic.
  • Prolog adapter and integration files:
  • UPDATED: The SWI-Prolog hooks file, swihooks.pl, now includes a definition for the prolog:message//1 multifile predicate that prints Logtalk runtime exceptions with full execution context details. This is a workaround for the issue of the SWI-Prolog top-level intercepting those exceptions but printing only the culprit goal.
  • FIXED: Workaround problematic SWI-Prolog declaration of the ISO standard op/3 predicate as a meta-predicate.
  • Documentation:
  • ADDED: Handbook section on Smalltalk nomenclature, comparing its concepts to Logtalk counterparts.
  • ADDED: Glossary entries for “predicate declaration”, “predicate definition”, “scratch directory”, “library alias”, “library notation”, “message lookup”, “component”, and “polymorphism”.
  • ADDED: Handbook sections on generating exceptions and type-checking terms.
  • IMPROVED: Documentation of the call//1-N built-in non-terminal and of the threaded_engine_next/2 and threaded_engine_next_reified/2 built-in predicates.
  • IMPROVED: Handbook section on performance now includes a subsection on the size of the code generated by the compiler.
  • IMPROVED: Handbook cross-referencing.
  • IMPROVED: The Handbook ePub version cover now includes the release data.
  • UPDATED: Handbook and APIs documentation are now generated using sphinx 1.8.4 and sphinx-rtd-theme-0.4.3.
  • UPDATED: Man pages for the lgtdoc scripts.
  • Library:
  • ADDED: Library reader object with predicates for reading text file and text stream contents to lists of terms, characters, or character codes.
  • Tools:
  • IMPROVED: When using the lgt2rst documentation script with the -s option, the sphinx-quickstart interactive script is now called with a conf.py_t template file using the $LOGTALKUSER/tools/lgtdoc/xml directory as the templates directory. The provided conf.py_t template results in similar output to the Logtalk own API documentation.
  • IMPROVED: Simplify the ports_profiler::data(Entity) predicate to omit the entity column.
  • Tests:
  • ADDED: Unit tests for the new threaded_cancel/1 built-in predicate.
  • ADDED: Unit tests for the built_in/0 directive.
  • ADDED: Unit tests for the new reader library object.
  • Examples:
  • ADDED: Logic design pattern “threading state” to the design_patterns example.
  • ADDED: An alternative implementation of the cascade example using DCGs.
  • ADDED: Simple example of working with “futures”, a common concurrent programming idiom, using the high-level multi-threading predicates.
  • IMPROVED: The source code comments of the roles and scopes examples.
  • UPDATED: Enable code coverage for the planets example tests.
  • IDEs, text editors, and syntax highlighters support
  • ADDED: Syntax coloring support for the new threaded_cancel/1 built-in predicate.
  • ADDED: SubEthaEdit 4.x/5.x text editor support.

New in Logtalk 3.23.0 (Jan 31, 2019)

  • Logtalk compiler and runtime:
  • IMPROVED: The compiler now suppresses logtalk::print_message/3 calls for debug and debug(Group) messages when the optimize flag is turned on.
  • IMPROVED: Detection of missing meta-predicate directives when compiling closures.
  • IMPROVED: The question asking mechanism when using SICStus Prolog or SWI-Prolog as the backend compiler by avoiding the intrusion of the default read prompt.
  • IMPROVED: Allow inlining of meta-predicate definitions in safe cases.
  • FIXED: A case are predicate definition inlining would give wrong results when meta-calling the predicate from bagof/3 or setof/3 goals due to the presence of anonymous variables in the predicate definition.
  • FIXED: Enable message sending static binding optimization when the message is an alias of a meta-predicate.
  • FIXED: Misspelling of instantiation_error in some exceptions throw by the compiler.
  • Prolog adapter and integration files:
  • FIXED: O-Prolog adapter file definition of the '$lgt_compile_prolog_code'/3 internal predicate.
  • Documentation:
  • ADDED: Handbook section on reflection support.
  • IMPROVED: Handbook sections on debugging and the term-expansion mechanism.
  • IMPROVED: Handbook reference page on the current_predicate/1 built-in method.
  • IMPROVED: Glossary definitions of entity and parametric entity identifiers.
  • IMPROVED: Clarify definitions of object and category number of clauses and number of rules properties regarding definitions of multifile predicates.
  • FIXED: HTML favicon bug that resulted in a non-valid ePub version of the Handbook.
  • Library:
  • CHANGED: The list library object will use the backend Prolog system native implementation of the de facto standard length/2 predicate when available.
  • ADDED: Coroutining library supporting ECLiPSe, SICStus Prolog, SWI-Prolog, and YAP as backend Prolog systems. Provides a portable abstraction over how the coroutining predicates are made available by each Prolog system.
  • ADDED: Library zipper protocol, zipperp, and list zipper object, zlist.
  • ADDED: Predicate remove_duplicates/2 to the library list entities.
  • ADDED: New optional term constructor, from_goal/3.
  • ADDED: New expected term constructors, from_goal/3 and from_goal/4.
  • ADDED: New expected term or_else_throw/1 predicate.
  • IMPROVED: Descriptions of the optional and expected library predicates.
  • IMPROVED: Documentation cross-referencing for library entities.
  • UPDATED: The instructions on the parallel_logtalk_processes_setup.pl sample code for SICStus Prolog to take into account the changes in the new 4.5.0 release.
  • FIXED: Bug in the implementation of the either::partition/3 library predicate.
  • Tools:
  • CHANGED: The lgtunit tool now considers multifile predicates defined for other entities when reporting entity and predicates code coverage results. This change may result in lower percentages of code coverage than reported in previous versions for entities defining multifile predicates for other entities.
  • RENAMED: The ports tool to ports_profiler. The ports library alias is now used for the directory containing ports of third-party software.
  • ADDED: A debug_messages tool supporting enabling and disabling of debug and debug(Group) messages for code compiled in normal mode.
  • ADDED: Sample Sphinx configuration file, conf-sample.py, to the lgtdoc tool.
  • Ports:
  • ADDED: Port of metagol, an inductive logic programming (ILP) system based on meta-interpretive learning.
  • Tests:
  • ADDED: Library alias tests to the paths/paths.pl file.
  • ADDED: Unit tests for the new library list zipper predicates.
  • ADDED: Unit tests for the de facto Prolog standard length/2 predicate.
  • IMPROVED: Unit tests for the entity creation built-in predicates.
  • IMPROVED: Unit tests for the optional library.
  • IMPROVED: Unit tests for the expected library.
  • IMPROVED: Unit tests for the os library.
  • Examples:
  • ADDED: Descriptions of “state-space search”, “many worlds”, and “expert system “ AI design patterns to the design_patterns example.
  • ADDED: Simple example, serialization, of serializing objects to a file.
  • ADDED: Simple example, slides, of using the library list zipper support.
  • ADDED: Simple example, cascade, of using expected terms as an alternative to the traditional catch/throw mechanism to call a conjunction of goals where any of them may cause an error condition.
  • ADDED: Unit tests for the metaclasses and msglog examples.
  • IMPROVED: Implementation of the hill climbing search method found in the searching example.
  • UPDATED: The optionals example to use the new from_goal/3 constructor.
  • UPDATED: The expecteds example to use the new from_goal/4 constructor.
  • Installers and installation scripts:
  • UPDATED: The Windows installation script to also detect SICStus Prolog 4.5.x versions.
  • IDEs, text editors, and syntax highlighters support
  • CHANGED: The source code for the IntelliJ IDEA plugin is now available from its own repository.
  • ADDED: EditorConfig root file, .editorconfig, to set the indentation preferences as per coding guidelines.
  • FIXED: GtkSourceView syntax highlighting of the as infix operator.

New in Logtalk 3.22.0 (Jan 31, 2019)

  • Logtalk compiler and runtime:
  • IMPROVED: Caching of default flags at runtime initialization is now more robust to file assembling order issues when embedding Logtalk or a Logtalk application.
  • FIXED: When compiling uses/2 and use_module/2 directives, don’t try to create a local definition for specified predicates that would clash with built-in methods, which cannot be overridden.
  • Prolog adapter and integration files:
  • IMPROVED: The adapter files for ECLiPSe, SICStus Prolog, SWI-Prolog, XSB, and YAP to better support expansion of Prolog module directives when used within objects and categories.
  • UPDATED: The adapter files for B-Prolog, SWI-Prolog, XSB, and YAP to support using grammar rule non-terminal indicators in table/1 directives.
  • Documentation:
  • ADDED: User manual section on declarative object-oriented programming.
  • IMPROVED: User manual sections on the structured message printing, question asking, and term expansion mechanisms.
  • IMPROVED: Using of favicons in mobile and desktop browsers for the HTML versions of the Handbook and APIs documentation.
  • IMPROVED: Readability of Handbook PDF version by using more readable fonts.
  • IMPROVED: Formatting of inline code fragments in the HTML versions of the Handbook and APIs documentation.
  • UPDATED: Warn about the portability issues of using operator notation with some predicate directives such as dynamic/1.
  • FIXED: Typo in the description of the equivalent calls to the error throwing built-in methods.
  • FIXED: Handbook link to the generated index from the sub-sections.
  • FIXED: Workaround lack of character escaping in Sphinx preventing correct display of parametric entity names with two or more arguments in the index.
  • Library:
  • FIXED: The parallel_logtalk_processes_setup.pl sample code to account for the operating-system reusing process identifiers.
  • Tools:
  • FIXED: The logtalk_tester script to pass the default backend when sourcing a tester.sh script when called without any arguments.
  • Examples:
  • ADDED: New set of examples, design_patters, with sample implementations of 28 object-oriented behavioral, creational, and structural design patters.
  • ADDED: Simple example, document_converter, of using a Java library for converting documents to text.
  • UPDATED: The pardicts example to avoid instantiation errors when compiled in optimal mode due to SWI-Prolog different semantics for clauses that contain ./2 terms when the clauses are asserted versus compiled from a source file.
  • Installers and installation scripts:
  • IMPROVED: The sample embedding scripts to create and use a temporary directory for the intermediate files.
  • FIXED: A file order bug in the sample embedding script for GNU Prolog, gprolog_embed_logtalk.sh, could result in multiple values being returned for some flags.
  • UPDATED: The build_release.sh script to also build the experimental pack for SWI-Prolog.
  • REMOVED: The unused build_release.sh script option to pass a custom version string.
  • IDEs, text editors, and syntax highlighters support
  • ADDED: CodeMirror mode supporting syntax highlighting, code folding, and code completion.

New in Logtalk 3.21.0 (Nov 6, 2018)

  • Logtalk compiler and runtime:
  • CHANGED: Allow a complementing category to add a predicate scope directive but no predicate definition allowing any definitions in complemented objects (compiled with the complements flag set to allow) to be found and used.
  • Prolog adapter and integration files:
  • REMOVED: Unsupported/non-functional adapter file for Jekejeke Prolog as requested by its developer who claims that Jekejeke Prolog license forbids using it to run Logtalk.
  • Documentation:
  • CHANGED: HTML, PDF, and ePub versions of the documentation (which includes the User Manual, Reference Manual, FAQ, and Glossary) are now generated from reStructuredText sources using Sphinx and the Read the Docs theme.
  • CHANGED: The manual userman.pdf and refman.pdf files have been replaced by TheLogtalkHandbook-3.21.0.pdf and TheLogtalkHandbook-3.21.0.epub files. These files are not bundled in the distribution but can be downloaded from the Logtalk and Read the Docs websites.
  • ADDED: Contributor Covenant code of conduct.
  • IMPROVED: Fixes and improvements to the contents of the manuals and tutorial.
  • IMPROVED: Manuals and APIs documentation cross-referencing.
  • FIXED: Several typos and also some outdated information in the manuals, tutorial, and APIs documentation.
  • Library:
  • CHANGED: The HTML version of the library, tools, and contributions APIs are now generated from reStructuredText intermediate files (themselves generated with the new lgt2rst script) using Sphinx and the Read the Docs theme.
  • ADDED: Types operator_specifier and operator_priority to the type library object.
  • UPDATED: The parallel_logtalk_processes_setup.pl Prolog file with sample code for ECLiPSe and SICStus Prolog and usage alternatives.
  • Tools:
  • ADDED: Support for converting the XML documentation files generated by the lgtdoc tool to reStructuredText files for conversion to final formats with Sphinx using the new lgt2rst script.
  • UPDATED: The structure of the entity XML documentation files generated by the lgtdoc tool with additional information.
  • UPDATED: The logtalk_tester script to check for and source a tester.sh file found in the tests directory before running the tests. The tester.sh file is sourced with all the parameters passed to the logtalk_tester script.
  • ADDED: Note on tokei (an open-source command-line program for counting blank lines, comment lines, and lines of source code) support for Logtalk.
  • FIXED: Cleanup goal for the lgtdoc tool tests.
  • FIXED: Conversion of the library_index.xml file by the lgt2html.js and lgt2md.js scripts.
  • Examples:
  • IMPROVED: The source code comments of the errors example and renamed some entities for clarity.
  • UPDATED: The patching example to illustrate how to use a complementing category to add a missing predicate scope directive to an object.
  • UPDATED: The clustering example now includes a tester.sh file that is sourced by the logtalk_tester script and that sets the CLASSPATH environment variable for the used backend Prolog compiler.
  • FIXED: Issue running the birds example when using a recent SWI-Prolog version as the backend compiler (which now requires flushing output before reading a term).
  • Installers and installation scripts:
  • FIXED: Issue in the Windows installer where the Start Menu shortcuts to the APIs documentation and the sample settings file could be invalid.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Sublime Text syntax file using the new .sublime-syntax format.
  • ADDED: Note on bat, a cat clone that supports syntax highlighting and can be easily customized for displaying Logtalk and Prolog source files.

New in Logtalk 3.20.0 (Sep 5, 2018)

  • Logtalk compiler and runtime:
  • IMPROVED: Avoid spurious missing `meta_predicate/1` directive warnings when the actual meta-call don't share variables with the clause head.
  • IMPROVED: Allow using lambda expressions in grammar rules without requiring a `call//1` wrapper.
  • FIXED: Optimization bug in the compilation of a closure meta-argument when the resulting goal is a call to a Prolog built-in predicate due to inlining of a user predicate definition.
  • FIXED: Optimization bug in the compilation of a closure meta-argument when the resulting goal is a call to a Prolog `:/2` control construct.
  • Documentation:
  • IMPROVED: Reference manual description of the `^^/1` control construct.
  • Library:
  • ADDED: Support for describing registered meta-types using the new multifile predicate `type::meta_type/3`.
  • ADDED: Type `type` for checking type specifications.
  • ADDED: Predicates `maybe_call/1-2` to the `random` library.
  • ADDED: Predicates `as_set/2` and `as_list/2` to the sets library.
  • IMPROVED: Performance of the Java library when using JPL as the backend.
  • UPDATED: The meta-compiler to also process closures that are explicitly module qualified.
  • FIXED: Term-expansion cleanup actions for the `edcgs` and `meta_compiler` library objects. Due to the compiler being a multi-pass compiler, cleanup actions should be performed when an open entity directive is found instead of when expanding the ending entity directive.
  • Examples:
  • CHANGED: Compile the `lambdas` and `lambdas_compiled` examples with the `optimize` flag turned on so that the benchmarks best reflect the overheads of meta-predicates and lambda expressions.
  • ADDED: Examples and tests of using lambda expressions in grammar rules to the `dcgs` example.
  • ADDED: Simple example, `scopes`, illustrating predicate scope semantics.
  • ADDED: Simple example, `self_messages`, illustrating the semantics of messages to "self".
  • ADDED: Simple example, `super_calls`, illustrating that "super" calls preserve the value of "self".
  • ADDED: Simple example, `elephants`, illustrating the concept of prototype.
  • ADDED: Simple example, `planets`, illustrating the concepts of protocol and category.
  • ADDED: Simple example, `roles`, illustrating the different roles that an object can play.
  • ADDED: Simple example, `clustering`, of using a Java library for performing clustering of a set of numbers.
  • UPDATED: The `metapredicates` and `metapredicates_compiled` examples to help visually illustrate the differences between left and right folds.
  • UPDATED: The `xpce` example loader files to detect if XPCE is available.
  • IMPROVED: Simplified the `pardicts` example by using parameter variables.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Support for the 0'Char number notation to most text editors and syntax highlighters.
  • ADDED: Note on the Vis multi-platform text editor support for Logtalk syntax highlighting.

New in Logtalk 3.19.0 (Aug 2, 2018)

  • Logtalk compiler and runtime:
  • ADDED: Support for defining additional Prolog built-in predicates for lint checks of goals that are always true or false to the adapter files using the hook predicate `'$lgt_candidate_tautology_or_falsehood_goal_hook'/1`.
  • ADDED: Object property `module` for objects that result from the compilation of Prolog modules.
  • ADDED: Convenience error throwing built-in methods `syntax_error/1` and `system_error/0`. These methods throw standard `error/2` exception terms and are equivalent to a sequence of `context/1` and `throw/1` method calls.
  • REMOVED: Support for deprecated Logtalk 2.x `calls/1`, `uses/1`, and `alias/3` directives.
  • REMOVED: Support for deprecated Logtalk 2.x `:/1` control construct.
  • REMOVED: Support for deprecated Logtalk 2.x `unknown`, `singletons`, `tmpdir`, and `version` compiler flags.
  • CHANGED: The user-defined default compiler hooks are now compiled using the default value of the `events` flag.
  • IMPROVED: Simplified and faster runtime initialization.
  • FIXED: Processing of the `include/1` directive when the included file contains `op/3` directives.
  • FIXED: Performance bug that prevented using static-binding optimizations for meta-arguments of meta-predicate messages sent from `user`.
  • FIXED: Load the core entity source files using the `reload(skip)` option.
  • FIXED: The `logtalk_make/1` predicate no longer tries to reload files that were loaded using the `reload(skip)` option.
  • FIXED: Detection of instantiation errors when compiling entity relations crafted using an entity argument list with a variable tail.
  • FIXED: The `retract/1` method would allow retracting clauses for a local dynamic predicate without a scope directive from objects other than the object containing the predicate.
  • FIXED: Bug in the `abolish/1` method when abolishing a dynamic predicate with a dynamic declaration with no clauses where a subsequent call to the predicate using the `

New in Logtalk 3.18.0 (Jul 16, 2018)

  • Logtalk compiler and runtime:
  • UPDATED: The `user` object now also implements the `expanding` protocol by defining `term_expansion/2` and `goal_expansion/2` as multifile and dynamic predicates. This change avoids predicate existence errors when compiling source files with the `hook` flag to `user` as the expansion predicates are only natively declared in some of the supported backend Prolog compilers.
  • ADDED: Compiler option `suspicious_calls/1` to control printing of suspicious call warnings.
  • ADDED: Compiler lint check and warning for `::/2` calls that send a message to _self_ instead of using the `::/1` control construct.
  • ADDED: Compiler lint check and warning for `::/2` calls in objects that send a message to _this_ instead of simply calling the local predicate.
  • IMPROVED: Suspicious call lint warnings now also print the recommended alternative call.
  • IMPROVED: Entity compilation and dynamic entity creation performance improvement (up to ~2% for objects, ~5% for categories, and ~18% for protocols).
  • FIXED: Enable inlining of linking clauses that call Prolog module predicates.
  • FIXED: Reporting of singleton variables using parameter variable syntax for backend Prolog systems with the `underscore_variables` compiler option set to `dont_care`.
  • Prolog adapter and integration files:
  • CHANGED: Deleted the `portray/1` hook for Logtalk goals execution context from the `swihooks.pl` file.
  • UPDATED: The SWI-Prolog adapter file by adding to the `prolog_loader/1` flag definition the new `load_files/2` option `optimise(true)`. Requires SWI-Prolog 7.7.17 or later version (the option is silently ignored in previous versions).
  • UPDATED: The SWI-Prolog adapter file to detect the recent ISO standard compliance fix to the `read_term/3` predicate `singletons/1` option and set the `underscore_variables` flag accordingly.
  • UPDATED: SWI-Prolog experimental hack to get a top-level stack trace for errors generated from message sending calls. Commented out by default in the `swihooks.pl` file. Thanks to Jan Wielemaker for his clarifications about the stack trace mechanism.
  • UPDATED: Support for SWI-Prolog `edit/1` predicate to also locate source files (without forcing library notation), included files, entities, and object public predicates declaration and definition.
  • IMPROVED: SWI-Prolog integration to avoid the `listing/0` predicate listing Logtalk built-in predicates. Requires recent SWI-Prolog bug fix.
  • FIXED: Two harmless warnings when using SWI-Prolog `make/0` predicate.
  • UPDATED: The JIProlog adapter file to recognize the `*->/2` soft-cut control construct as built-in.
  • FIXED: SICStus Prolog error normalization when Logtalk is loaded into a module other than `user`.
  • Documentation:
  • CHANGED: Updated the contributing guidelines, moving from the Contribution License Agreement (CLA) to the more developer friendly Developer Certificate of Origin (DCO).
  • ADDED: Explain the caveats of setting a Prolog module or `user` as a hook object in the user manual.
  • IMPROVED: Documentation of the `uses/2` and `use_module/2` directives.
  • Library:
  • CHANGED: All individual library documentation files to Markdown files.
  • ADDED: Port of Peter Van Roy EDCGs implementation.
  • ADDED: Predicate `invoke/2` to the Java interface library.
  • ADDED: Hook object, `java_hook`, to optimize calls to the JPL-based Java interface library (ensuring zero overhead compared with direct use of JPL).
  • IMPROVED: Documentation of most of the libraries. Tools -----
  • ADDED: Description and link to the Logtalk plugin for the `asdf` extendable version manager.
  • ADDED: Halstead complexity metric to the `code_metrics` tool. Experimental. Thanks to Daniel Speicher for his feedback on the implementation.
  • FIXED: The `lgtunit` tool global clause coverage statistics when there are entities declared as covered but without any tests for their predicates.
  • FIXED: Error instead of failure in the `code_metrics` tool when calling the `entity/1` and `entity_score/2` predicates with a compound term for a non- loaded parametric category or object.
  • Tests:
  • ADDED: Unit test for the ISO standard `read_term/3` predicate `singletons/1` option.
  • ADDED: Unit tests for the ISO standard `write_term/3` predicate `quoted/1` and `ignore_ops/1` options.
  • Examples:
  • ADDED: Example `edcgs` with a port of Peter Van Roy and Michael Hendricks EDCGs examples and tests.
  • ADDED: Example `optionals` illustrating the use of the optional terms library.
  • ADDED: Example `expecteds` illustrating the use of the optional terms library.
  • UPDATED: The `java` example to take advantage of the library `java_hook` hook object when run using the JPL-based Java interface library.
  • UPDATED: The `inlining` example to illustrate inlining of linking clauses that call Prolog module predicates.
  • UPDATED: The `errors` example to illustrate the new compiler lint check for suspicious calls to the `::/2` control construct.
  • IMPROVED: State representation for the `salt/3` state-space in the `searching` example.
  • IMPROVED: Simplified the `bridge` puzzle solution in the `searching` example.
  • FIXED: The `searching` example for the events related changes in the previous version for the `user` pseudo-object.

New in Logtalk 3.17.0 (May 24, 2018)

  • LOGTALK COMPILER AND RUNTIME:
  • CHANGED: Calls from the `user` pseudo-object now use the the default value of the `events` flag instead of a fixed `allow` value. This change provides more intuitive semantics whew playing with event-aware applications at the top-level interpreter and also avoids the small event-handling overhead for messages sent from `user` when not using events.
  • ADDED: Compiler lint check and warning for suspicious calls to the message to self control construct, `::/1`, in clauses that apparently are meant to implement recursive predicate definitions where the user intention is to call the local predicate.
  • ADDED: New make target, `caches`, for cleaning the dynamic binding caches. Mainly for development use, specially when benchmarking.
  • IMPROVED: Small dynamic binding performance optimization (~10%) for `::/2` calls (when the object is only know at runtime) and `^^/2` calls (when the predicate is only know at runtime).
  • FIXED: An unwanted dependency on the message sender for calls to the `threaded_call/1-2`, `threaded_once/1-2`, `threaded_peek/1-2` and `threaded_exit/1-2` predicates that could result in unexpected failures when accessing threaded goals results.
  • FIXED: Increment the compiler warnings counter when printing a non-standard file directive portability warning.
  • FIXED: Don't return `number_of_clauses/1` and `number_of_rules/1` predicate definition properties when calling the built-in predicates `object_property/2` and `category_property/2` for dynamically created entities.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • ADDED: Make shortcut, `$`, for the new `caches` target to all adapter files.
  • UPDATED: All integration scripts to write error messages to `stderr`.
  • FIXED: Compilation of `table/1` directives for SWI-Prolog and YAP when using mode-directed tabling. After discussion in the SWI-Prolog mailing list.
  • DOCUMENTATION:
  • UPDATED: Manual installation instructions.
  • LIBRARY:
  • FIXED: Spurious choice-points for some of the predicates of the `character` library object.
  • TOOLS:
  • UPDATED: All `lgtdoc` scripts to write error messages to `stderr`.
  • CLEANUP: Style issues in all `lgtdoc` scripts.
  • TESTS:
  • ADDED: Additional unit tests for the `logtalk` and `user` built-in objects.
  • EXAMPLES:
  • CLEANUP: Simplified the threaded engines loader and tester files to check only the `engines` flag when testing for compatibility.
  • IMPROVED: The `bricks` and `blocks` examples no longer change the default value of the `events` flag.
  • UPDATED: The `tabling` example for the tabling library becoming native in the forthcoming SWI-Prolog 7.7.14 version.
  • UPDATED: The `errors` example to illustrate the new compiler lint check for suspicious calls.
  • FIXED: Outdated sample query in the `SCRIPT.txt` file for the `benchmarks` example. Thanks to Per Mildner for reporting.
  • CONTRIBUTIONS:
  • FIXED: Missing meta-predicate directive in the `verdi_neruda` contribution.
  • INSTALLERS AND INSTALLATION SCRIPTS:
  • UPDATED: The `logtalk_backend_select` script to also allow removing the `logtalk` alias to the selected integration script.
  • UPDATED: All bundled scripts to write error messages to `stderr`.
  • CLEANUP: Style issues in all bundled scripts.
  • FIXED: Spurious warnings when running the GNU Prolog embedding script when creating an executable with just the Logtalk compiler and runtime.
  • FIXED: The `debian/copyright` file to be machine parseable. Thanks to Per Mildner for reporting.
  • FIXED: Missing `else` in the `logtalk_user_setup.sh` script that could result in a misleading message when the `LOGTALKHOME` environment variables is not defined.

New in Logtalk 3.15.0 (Mar 22, 2018)

  • Logtalk compiler and runtime:
  • CHANGED: The `::/1-2`, `^^/1`, and `[]/1` control constructs are no longer declared as meta-predicates and the compiler no longer warns about missing meta-predicate directives when using these constructs with runtime bound arguments.
  • ADDED: Also check for duplicated `discontiguous/1`, `dynamic/1`, `meta_predicate/1`, `meta_non_terminal/1`, and `multifile/1` directives.
  • IMPROVED: Distinguish between repeated scope directives (which now print a compiler warning) and conflicting scope directives (which continue to generate a compiler error).
  • IMPROVED: Runtime performance by recognizing additional cases where static binding can be applied.
  • FIXED: Avoid a false positive when checking for trivial fails when there is a single clause for a predicate that makes a recursive call and the used backend Prolog compiler performs unifications using occurs check by default.
  • FIXED: Reporting of misplaced or ignored `encoding/1` directives and of duplicated debug handlers would not increment the warnings counter.
  • Prolog adapter and integration files:
  • CHANGED: The GNU Prolog adapter file to require version 1.4.5 or later due to a critical bug fix in the handling of multifile predicates.
  • CHANGED: The JIProlog adapter file to require version 4.1.6.1 or later due to critical bug fixes, updated versions of the file system access predicates that expand paths with environment variables, and the addition of the de facto standard `format/2-3` predicates.
  • CHANGED: The XSB adapter file to require version 3.8.0 or later due to critical bug fixes.
  • CHANGED: The CxProlog, SICStus Prolog, and XSB definitions for the missing `setup_call_cleanup/3` built-in predicate to ignore success or failure of the cleanup goal.
  • IMPROVED: The accuracy of file term positions when using SICStus Prolog.
  • UPDATED: Removed use of Bash deprecated features from the Prolog integration scripts.
  • UPDATED: The ECLiPSe adapter file for the final release of ECLiPSe 7.0.
  • UPDATED: The JIProlog adapter file to detect the operating-system and choose accordingly the default value for the scratch directory (`./lgt_tmp/` when running on Windows and `./.lgt_tmp/` otherwise).
  • UPDATED: The GNU Prolog adapter file with a faster version of the internal `'$lgt_directory_hash_as_atom'/2` predicate.
  • FIXED: Error when embedding Logtalk in a GNU Prolog executable. The error is due to a `gplc` limitation with multifile predicates that requires a workaround in the `logtalk.lgt` core file.
  • FIXED: Compiler report of term start and end lines in warnings and errors when using GNU Prolog. Thanks to Daniel Diaz for his advice.
  • FIXED: Workaround parser issue in the Lean Prolog adapter file.
  • FIXED: Handling of the `float/1` function in the Quintus Prolog adapter file.
  • ADDED: Hacks for some missing standard byte and char input/output predicates to the Quintus Prolog adapter file.
  • Documentation:
  • ADDED: Missing reference manual section on the `logtalk_make_target_action/1` hook predicate.
  • ADDED: Inheritance diagram for the third-party contributions.
  • IMPROVED: Documentation of the `lgtunit` tool.
  • FIXED: The `update_html_docs.sh` script to also update the contributions API documentation.
  • UPDATED: Notes on the Windows installer.
  • Library:
  • CHANGED: Generating arbitrary pairs now only uses non-empty atoms or integers for the key.
  • ADDED: Type `list(Type, Min, Max)` to the `type` library object for type- checking lists with bounded terms. Term comparison uses standard order.
  • ADDED: Types `non_empty_atom` and `non_empty_list` to the library `type` object.
  • ADDED: Types `difference_list` and `difference_list(Type)` to the library `type` object and the `arbitrary` category.
  • ADDED: Type `ground(Type)` to the `type` library object and the `arbitrary` category.
  • ADDED: Support for generating and shrink arbitrary values for the new `list(Type, Min, Max)` type to the `arbitrary` category.
  • ADDED: Support for generating values for all number types to the `arbitrary` category.
  • ADDED: Support for generating and shrink `clause_or_partial_clause` terms to the `arbitrary` category.
  • ADDED: Support for shrink additional number, list, predicate/non-terminal indicator, pair, compound, callable, clause, ground, and entity identifier terms to the `arbitrary` category.
  • ADDED: Predicate `sleep/1` to the `os` library.
  • UPDATED: The `os` library for JIProlog changes in upcoming version 4.1.6.1.
  • FIXED: Added missing `either` library source file.
  • FIXED: Workaround XSB parser bug when loading the `random` library.
  • FIXED: Bug in the `random` library predicates `between/3`, `sequence/4`, and `set/4` when working with a range of negative integers. Thanks to Ebrahim Azarisooreh for the bug report.
  • FIXED: Typo in the OS type `directory` exception term generated when a directory does not exist.
  • FIXED: Bug in the implementation of the `os::operating_system_type/1` predicate for GNU Prolog.
  • FIXED: Ensure that the `os::directory_file/2` predicate always expands its first argument for all supported backend Prolog systems.
  • FIXED: Bug in the definition of the `difflist::valid/1` predicate.
  • FIXED: Bug in the `arbitrary` category `shrink/3` predicate where an empty list would be shrink to itself.
  • FIXED: Fix typos in `meta_predicate/1` directives in the library objects `bintree` and `rbtree`. Tools:
  • IMPROVED: The XML code coverage reports generated by the `lgtunit` tool now include entity and predicate file and line number data. The default XSLT file to convert the reports to HTML now accepts `url`, `prefix`, and `host` parameters to generate entity and predicate links to selected source code hosting providers (currently Bitbucket, GitHub, or GitLab).
  • IMPROVED: The `lgtunit` tool QuickCheck test dialects and predicates now accept a `{}/1` template argument notation for specifying argument values as-is instead of generating random values for those arguments.
  • IMPROVED: The `lgtunit` tool QuickCheck test dialects and predicates now also check output arguments.
  • IMPROVED: The `lgtunit` tool QuickCheck support now reports non-expected errors such as the tested predicate not existing.
  • IMPROVED: The `lgtunit` tool deterministic tests now indicate if the test failed due to the test goal succeeding non-deterministically.
  • IMPROVED: The `lgtunit::run/1` predicate now also prints test results and code coverage summaries.
  • ADDED: Support for automatically running a test set when calling the built-in predicate `logtalk_make/1`. Test set objects can now define a `make(Target)` clause with a `check` or `all` argument to define the make target action that will trigger the tests.
  • ADDED: Utility predicate `assertion/1` to the `lgtunit` tool.
  • ADDED: Predicates to the `lgtunit` tool that return assertions to be used when checking for expected text and binary input and output. These predicates provide an alternative to the predicates that check text and binary input and output. These new predicates can be used for easier debugging of failed tests.
  • ADDED: Predicate `deterministic/2` to the `lgtunit` tool. This predicate is a reified version of the `deterministic/1` predicate.
  • ADDED: Predicates `suppress_text_output/0` and `suppress_binary_output/0` to the `lgtunit` tool. Useful to avoid irrelevant output from predicates being tested cluttering the test logs.
  • ADDED: Support to the `diagrams` tool to generate predicate cross-referencing diagrams with links from predicate relations (e.g. `calls` or `updates`) to the source file line for the corresponding predicate clause.
  • ADDED: Predicate `port/5` to the `ports` tool for public access to collected port profiling data.
  • UPDATED: The `diagrams` tool option `exclude_libraries/1` to also exclude the `scratch_directory` library.
  • UPDATED: The `assertions` tool to allow generating code coverage information when running its tests.
  • ADDED: Predicates to the `code_metrics` tool to compute file, directory, and library scores. Modified most metrics to compute these new scores.
  • ADDED: Simple source code size metric to the `code_metrics` tool.
  • IMPROVED: New version of the `code_metrics` tool with an extended interface for simplifying implementation of new code metrics.
  • CHANGED: The number of clauses metric to print just the total number of clauses per entity, library, file, or directory.
  • UPDATED: The coupling metric to also compute entity afferent coupling and entity instability.
  • UPDATED: Removed use of Bash deprecated features from the `lgtdoc` tool helper scripts.
  • ADDED: Option to pass an initialization goal to the `logtalk_tester` script.
  • FIXED: Updated the `logtalk_tester` script to use the GNU `sed` command when available to workaround failed tests resulting in invalid byte sequences in test log files. This issue can result in a truncated list of failed tests.
  • FIXED: The coupling metric failed to consider external calls to Prolog module predicates and would give wrong results when predicates with the same functor are declared in multiple objects.
  • FIXED: Missing and broken links to documentation pages in the `help` tool. Tests -----
  • CHANGED: Generalize the tests for the de facto standard `forall/2` predicate that check for type errors as the non-callable term reported is implementation dependent and the specification of this predicate is still informal.
  • CHANGED: Split the tests for the standard stream properties to simplify checking which individual properties are not compliant.
  • IMPROVED: Tests for the Logtalk `encoding/1` directive to better cope with different backend Prolog systems supporting different sets of text encodings.
  • IMPROVED: Tests for the `logtalk_make/0-1` predicates.
  • ADDED: Unit tests for the soft-cut `if/3` built-in predicate.
  • ADDED: Unit tests for the de facto standard `format/2-3` and `msort/2` predicates.
  • ADDED: Unit tests for the de facto standard `e/0` built-in evaluable functor.
  • ADDED: Unit tests for the ISO Prolog standard `false/0` control construct.
  • ADDED: Additional unit tests for the `->/2` and `*->/2` control constructs to check for correct behavior when the arguments contain cuts.
  • ADDED: Additional unit tests for the ISO Prolog standard `acyclic_term/1`, `close/1-2`, `current_op/3`, `float/1`, `integer/1`, `nl/1`, `setof/3`, `sort/2`, `subsumes_term/2`, `stream_property/2`, `term_variables/2`, `unify_with_occurs_check/2`, and term comparison built-in predicates.
  • ADDED: Unit tests for the new `lgtunit::deterministic/2` predicate.
  • ADDED: Unit tests for the `lgtunit` tool input/output testing predicates.
  • ADDED: Unit tests for the `random` library.
  • ADDED: Elementary unit tests for the `ports` tool.
  • ADDED: Unit tests for the `help` tool.
  • UPDATED: The ISO Prolog standard `write_term/3` built-in predicate unit tests to use assertions for easier debugging.
  • UPDATED: Unit tests for the ISO Prolog standard `^/2` built-in function and the `functor/3` built-in predicate for the changes in the ISO/IEC 13211-1 Technical Corrigendum 3:2017.
  • UPDATED: A `current_op/3` unit test that checks the expected error when the operator specifier is not an atom to accept both the ISO mandated error term (which doesn't follow the standard own policy for errors) and the correct one.
  • FIXED: The unit tests for the ISO Prolog standard `call/1` control construct to delay expected errors to runtime to avoid aborting the tests compilation with type errors when using some backend Prolog compilers such as XSB.
  • FIXED: The unit tests for the ISO Prolog standard `call/2-N` built-in predicates assumed that the `:/2` operator was defined for all backend.
  • FIXED: Workaround XSB parser bug in the unit tests for the ISO Prolog standard `!/0` control construct.
  • FIXED: The unit tests for the `call/N` Logtalk method to delay expected errors to runtime.
  • FIXED: The tools unit tests to use the `test/2` dialect with a `deterministic` outcome for easier diagnosing of failed tests.
  • Examples:
  • CHANGED: The `localizations` example to illustrate the use of the new `lgtunit` predicates that return assertions to be used when checking for expected text and binary input and output.
  • UPDATED: The `errors` example to illustrate the compiler errors when duplicated directives are found.
  • UPDATED: The `multifile` example to also run when using XSB as the backend compiler. Requires XSB r9206 or a later version.
  • FIXED: The `localizations` and `patches` examples when using Windows.
  • FIXED: The `dcgs` example `iban` test to be skipped when using backend Prolog compilers with bounded arithmetic.
  • FIXED: The `errors` example to allow its `warnings_loader` file to succeed with only warnings as intended with more backend Prolog systems.
  • FIXED: The tests for the `birthdays` and `philosophers` multi-threading examples to suppress irrelevant output.
  • FIXED: The `xpce` example to allow loading it from any directory.
  • Contributions:
  • FIXED: Typo in `flags` contribution in the scope directive of the predicate `print_flags/0`. Installers and installation scripts:
  • ADDED: Bash shell script to create a new GNU Prolog top-level executable that embeds the Logtalk compiler/runtime.
  • ADDED: Bash shell script to create a SWI-Prolog QLF file with the Logtalk compiler/runtime.
  • ADDED: Bash shell script to create a SICStus Prolog `.po` file with the Logtalk compiler/runtime.
  • ADDED: Bash shell script to create a XSB `.xwam` file with the Logtalk compiler/runtime.
  • ADDED: Bash shell script to create a JIProlog `.jip` file with the Logtalk compiler/runtime.
  • ADDED: Bash shell script to create a ECLiPSe `.eco` file with the Logtalk compiler/runtime.
  • UPDATED: The Windows installation script to also detect ECLiPSe 7.1 development versions now that the 7.0 version is final.
  • UPDATED: The Windows installation script to also detect SICStus Prolog 4.4.x versions.

New in Logtalk 3.14.0 (Jan 5, 2018)

  • Logtalk compiler and runtime:
  • NEW: Support for _parameter variables_ providing an alternative to the `parameter/2` and `this/1` built-in methods to access entity parameters. Parameter variables are variables used in the parametric entity identifier that start and end with an underscore (`_VariableName_`). Any occurrence of a parameter variable in an entity clause is implicitly unified with the entity parameter. This allows entity parameters to be added, rearranged, or removed without requiring any changes to the clauses that refer to them. Parameter variables are only supported for parametric entities defined in source files.
  • NEW: Convenience error throwing built-in methods `instantiation_error/0`, `type_error/2`, `domain_error/2`, `existence_error/2`, `permission_error/3`, `representation_error/1`, `evaluation_error/1`, and `resource_error/1`. These methods throw standard `error/2` exception terms and are equivalent to a sequence of `context/1` and `throw/1` method calls.
  • ADDED: New `documentation` target to the `logtalk_make/1` built-in predicate. This target runs all defined documentation actions.
  • FIXED: Detection of variable file terms and reporting of the corresponding instantiation errors when processing `include/1` directives.
  • FIXED: Runtime error when calling `logtalk_make(check)` with missing predicates found in included files.
  • Prolog adapter and integration files:
  • CHANGED: Moved the definition of the `logtalk_make_target_action/1` hook predicate for ECLiPSe and SWI-Prolog from the corresponding hooks file into the `settings-sample.lgt` file.
  • ADDED: Shortcut `{#}` for calling `logtalk_make(documentation)` to all the adapter files.
  • FIXED: Workaround lack of compliance of B-Prolog and Qu-Prolog `read_term/3` option `variable_names/1`.
  • Documentation:
  • ADDED: User and Reference manual sections on the new error throwing built-in methods.
  • UPDATED: User Manual section on debugging messages.
  • UPDATED: The `diagrams` tool documentation with a workaround for the GraphViz dot command random crashes.
  • Library:
  • CHANGED: Moved the declarations of the `randomp` protocol `reset_seed/0` and `randomize/1` predicates to the `random` object.
  • ADDED: New random library `fast_random` and `backend_random` objects.
  • ADDED: Options `prefixes/1` and `suffixes/1` to the `os::directory_files/3` predicate.
  • ADDED: Clauses for the `arbitrary::arbitrary/1-2` predicates to the `maybe` object to allow generating random values for the `maybe(Type)` type.
  • ADDED: Predicate `optional(_)::or_else_fail/1`.
  • ADDED: New `expected` library for representing expected term references.
  • ADDED: Experimental `either` library object providing types and predicates for type-checking and handling expected term references.
  • FIXED: Typo in the `info/2` directive for the `metap::map_reduce/5` predicate that prevented its description to be displayed in the API HTML documentation.
  • Tools:
  • NEW: Support for running a set of test suites as a unified suite to the `lgtunit` tool, generating a single code coverage report, a single TAP report/output, and a single xUnit report/output. This allows better tool scalability when using parametric test objects or multiple tests objects per unit.
  • CHANGED: Several print message terms of the `lgtunit` tool, adding the test object as an additional argument, to support the new tool features.
  • IMPROVED: Readability of the default console output of the `lgtunit` tool.
  • UPDATED: The `lgtunit` tool to support callable terms as test identifiers.
  • UPDATED: The `help` tool for the new error throwing built-in methods.
  • UPDATED: The `doclet` tool to add a definition for the hook predicate `logtalk_make_target_action/1` with target `documentation` on loading. The hook definition checks that a single doclet object is loaded and, if true, sends an `update/0` message to it.
  • REMOVED: The `code_metric_protocols` protocol.
  • CHANGED: The `code_metrics` predicate `entity_score/2` is now specified as deterministic.
  • IMPROVED: The `code_metrics_messages` category no longer requires changes when adding a new metric.
  • UPDATED: The `code_metrics` tool to allow applying individual metrics.
  • FIXED: The `logtalk_tester` shell script detection of broken tests sets where test set crashes would also be reported as broken test sets.
  • Tests:
  • ADDED: Unit tests for the new error throwing built-in methods.
  • ADDED: Unit tests for the new `os::directory_files/3` predicate options.
  • ADDED: Two more tests for the Prolog standard `arg/3` built-in predicate.
  • ADDED: Unit tests for the `optional` library predicates `or_else_call/2` and `or_else_fail/1`.
  • ADDED: Unit tests for the `expected` library.
  • Examples:
  • ADDED: A new example, `parvars`, providing an alternative version of the `parametric` example using _parameter variables_ instead of the `parameter/2` and `this/1` built-in methods to access entity parameters.
  • UPDATED: The `errors` example to illustrate detection of variable file terms when processing `include/1` directives.
  • UPDATED: The `buckets` multi-threading example to use the new library `backend_random` stateless object.
  • Installers and installation scripts:
  • UPDATED: Synced the settings files used by the SWI-Prolog packs with the settings sample file.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Syntax coloring support for the new error throwing built-in methods.
  • UPDATED: Logtalk support installation instructions for the Kate text editor.

New in Logtalk 3.13.0 (Nov 27, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • NEW: Compiler support for detecting calls to local static predicates with no matching clauses (aka trivial fails).
  • ADDED: Four alternative library paths files (splitting the core, tool, example, and contribution paths) for use when embedding or deploying applications where e.g. tools or example paths should not included.
  • FIXED: A bug where the entity property `declares/2` would fail to return `mode/2` properties for non-terminals.
  • FIXED: A harmless performance bug where compilation of auxiliary predicates would result in duplicated entity predicate definition table entries.
  • DOCUMENTATION:
  • ADDED: User manual section describing the compiler linter checks.
  • IMPROVED: API documentation of the `optional` library.
  • LIBRARY:
  • CHANGED: The `optional(_)::or_else_get/2` meta-predicate to be consistent with the `optional(_)::get/1` predicate by throwing the same exception when the optional is empty and a term cannot be computed.
  • ADDED: Predicate `java::is_object/1` to the library.
  • ADDED: Experimental `maybe` library object providing types and predicates for type-checking and handling optionals.
  • ADDED: Meta-predicate `optional(_)::or_else_call/2`.
  • FIXED: Meta-predicate directive for the `optional(_)::or_else_get/2`
  • predicate.
  • FIXED: Ensure the `atom::split/3` predicate always throws an error when the first argument is not bound to an atom (assuming a compliant implementation of the standard `sub_atom/5` predicate).
  • TOOLS:
  • CHANGED: Default value of the `lgtdoc` tool option `omit_path_prefixes/1` to omit the home directory.
  • ADDED: User-customizable documentation metric to the `code_metrics` tool.
  • UPDATED: The `help` tool for the recently added `context/1` built-in method.
  • FIXED: The documentation of the instantiation modes of the predicates `lgtunit::benchmark/3-4`.
  • FIXED: References to entity and index XSLT files in XML files generated by the `lgtdoc` tool.
  • FIXED: Processing of default options by the `lgtdoc` tool to ensure that the `xml_docs` directory is created as expected as a sub-directory of the directory of the source files being documented.
  • TESTS:
  • ADDED: Missing `sub_atom/5` predicate Prolog compliance tests for the expected error when the first argument is bound to a number.
  • EXAMPLES:
  • ADDED: A new example, `persistency` illustrating a very simple solution for persisting an object dynamic state across sessions.
  • UPDATED: The `errors` example to illustrate trivial fail warnings.
  • FIXED: Detection of the SWI-Prolog/YAP JPL library in the `java` example.
  • INSTALLERS AND INSTALLATION SCRIPTS:
  • ADDED: File `.travis.yml` for supporting automated Travis CI builds. The builds check that Logtalk can be successfully installed and that all unit tests (with the exception of the Prolog compliance tests) pass.
  • FIXED: The Docker file for SWI-Prolog as `swipl` is now an official Docker repository.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • UPDATED: Logtalk support installation instructions for the Atom text editor.
  • UPDATED: Logtalk support installation instructions for the Visual Studio Code text editor.

New in Logtalk 3.12.0 (Oct 10, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • ADDED: Defined a set of meta messages for use with the message printing mechanism that don't require user-defined tokenization rules for default handling. These meta messages are typically used for debugging messages. See the API documentation on the `logtalk` built-in object for details.
  • FIXED: When using `uses/2` directives to declare a dependency on a `user` built-in predicate, a `calls/2` entity property would be wrongly recorded as no linking clause for the predicate is required and thus would be created to cope with runtime constructed calls.
  • DOCUMENTATION:
  • ADDED: Documentation of the default set of message kinds and printing defaults for each kind of message to the `logtalk` built-in object.
  • IMPROVED: Documentation for the built-in database and reflection methods.
  • LIBRARY:
  • ADDED: Predicate `list::sort/4`, modeled after the SWI-Prolog `sort/4` built-in predicate specification.
  • ADDED: Predicate `os::directory_files/3` to return a filtered list of files. Files can be filtered by type or file extensions, can be returned using either relative or absolute paths, and files starting with a dot can be filtered out.
  • ADDED: Normalization predicates `normalize_range/2-4`, `normalize_unit/2`, `normalize_scalar/2`, and `rescale/3` to the `numberlist` library object.
  • ADDED: Predicate `z_normalization/2` to the `statistics` library.
  • ADDED: Definition of predicate `os::delete_directory/1` for CxProlog.
  • ADDED: Definition of predicate `os::wall_time/1` for CxProlog, JIProlog,
  • and Qu-Prolog.
  • FIXED: Bug in the definition of the predicate `os::file_exists/1` for YAP where the predicate all succeed with any kind of file instead of just for regular files.
  • FIXED: Broken definition of predicate `os::delete_directory/1` for YAP.
  • FIXED: Definition of the predicate `os::absolute_file_name/2` for XSB when both arguments are instantiated.
  • FIXED: Predicate `os::working_directory/1` when using GNU Prolog as the backend compiler on Windows.
  • TOOLS:
  • ADDED: Predicate `benchmark_reified/3` to `lgtunit` as a variant of the predicate `benchmark/2` returning the goal result (`success`, `failure`, or `error(Error)`).
  • UPDATED: Generalized the `=~=/2` predicate of `lgtunit` to also support the comparison of the corresponding elements in two lists of floats.
  • FIXED: The `logtalk_tester` shell script no longer exports the `LC_ALL` environment variable and instead uses it only locally to fix the tests sorting order when searching for the `tester.lgt` and `tester.logtalk` files. This change fixes tests sorting order in Ubuntu and avoids locale-related issues in Centos/RHEL.
  • TESTS:
  • ADDED: More tests for the `between/3` de facto standard Prolog predicate.
  • ADDED: Tests for the `os::directory_files/2-3` library predicates.
  • ADDED: Tests for the `list::sort/4` library predicate.
  • ADDED: Tests for the new list of numbers normalization predicates.
  • ADDED: Tests for the generalized `lgtunit::(=~=)/2` predicate.

New in Logtalk 3.11.2 (Aug 28, 2017)

  • Logtalk compiler and runtime:
  • IMPROVED: The implementation of threaded engines no longer requires the use of a thread local dynamic predicate.
  • IMPROVED: Replaced use of the `mutex_lock/1` and `mutex_unlock/1` Prolog predicates in the implementation of the `threaded_engine_create/3` and `threaded_engine_destroy/1` predicates.
  • FIXED: Calls to the `logtalk_load/1-2` predicates now fail when loading the generated Prolog intermediate code unexpectedly fails (usually due to a backend Prolog compiler bug). In previous versions, an informative error message was printed but the call still succeeded.
  • Prolog adapter and integration files:
  • IMPROVED: The SWI-Prolog adapter file to also try to term-expand directives `use_module/1-2`, `ensure_loaded/1`, and `reexport/1-2` whose file spec is a file in the current directory.
  • FIXED: The SWI-Prolog adapter file to no longer try to expand `include/1` directives when compiling a module as an object as these directives are now handled by the Logtalk compiler.
  • UPDATED: The ECLiPSe adapter file to load the `setup_call_cleanup` and `threads` libraries when available. As multi-threading support when using this backend system is still experimental, it is turned off by default. Thanks to Joachim Schimpf for feedback, testing, and patches.
  • UPDATED: The ECLiPSe adapter file to import into `user` the standard `predicate_property/2` predicate when available (requires version 7.0.26 or later).
  • FIXED: The ECLiPSe adapter file for recent changes to this system ISO Prolog libraries.
  • FIXED: The ECLiPSe adapter file expansion of `import/1` and `reexport/1` directives.
  • Library:
  • RENAMED: The `os::expand_path/2` predicate to `os::absolute_file_name/2`. The old name is deprecated but still available as an alias.
  • ADDED: Predicate `os::decompose_file_name/3` to decompose a file into its directory and basename.
  • ADDED: Cross-referencing information to several library entities.
  • ADDED: Predicates `proper_prefix/3`, `proper_suffix/3`, `take/3`, and `drop/3` to the `listp`, `list`, and `difflist` entities.
  • FIXED: Definition of the predicate `difflist::proper_prefix/2`.
  • ADDED: Definition of type `optional` to the `optional` library object.
  • ADDED: Definitions for number and float derived types to the `type` library object.
  • FIXED: The definition of the type `nonvar` in the `type` library object to throw an `instantiation_error` when the checked term is not instantiated.
  • Tools:
  • ADDED: Cross-referencing information to the `doclet` and `diagrams` tool entities.
  • ADDED: Test outcome `false` as an alias to test outcome `fail`.
  • IMPROVED: The `logtalk_tester` script now also reports skipped and broken test suites.
  • IMPROVED: The `logtalk_tester` script now returns different non-zero exit status for failed tests, timed out test sets, broken test sets, and crashed test sets. See the script man page for details.
  • IMPROVED: The `logtalk_doclet` script now returns different non-zero exit status for failed doclets, timed out doclets, and crashed doclets. See the script man page for details.
  • FIXED: Note on lack of dependencies on other entities when converting entity API documentation into human-readable formats.
  • Examples:
  • UPDATED: The `mtbatch` example to support ECLiPSe.
  • Tests:
  • ADDED: Additional compliance tests for the `=../2` standard Prolog predicate.
  • FIXED: Tests for ISO Prolog compliance of the `get_byte/2`, `get_char/2`, `get_code/2`, `peek_byte/2`, `peek_char/2`, `peek_code/2`, `put_byte/2`, `put_char/2`, `put_code/2`, `read_term/3`, and `write_term/3` built-in predicates when trying to get input from a stream. Thanks to Joachim Schimpf for the bug report.

New in Logtalk 3.11.1 (Jul 17, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • IMPROVED: Compiler warning and error messages to make them more uniform to facilitate parsing by editors and IDEs and to avoid printing potentially large terms.
  • IMPROVED: The compiler no longer requires calls to the database and reflection predicates where the first argument is a module-qualified term to be wrapped using the `{}/1` compiler bypass control construct.
  • IMPROVED: Compiler error-checking for database and reflection predicate calls where the first argument is a module-qualified term.
  • IMPROVED: Minimize the number of file reloads triggered by calls to the `logtalk_make/0-1` predicates.
  • FIXED: Case where the `logtalk_make/0-1` predicates would fail to reload a file whose compilation generated a compiler error.
  • FIXED: Case where trying to reload a file with compilation errors without first fixing those errors could lead to an endless loop.
  • FIXED: Default message when no settings file is found at startup to mention all three lookup directories.
  • FIXED: Saving referenced modules for use by the reflection API when the module is only bound at runtime.
  • TOOLS:
  • CHANGED: The `diagrams` tool `exclude_libraries/1` option to exclude the `startup` library by default.
  • FIXED: Display of non-library nodes in library load and dependency diagrams.
  • FIXED: The `diagrams` tool `dot_graph_language` object for XSB.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • ADDED: Sample `tasks.json` file for the Visual Studio Code text editor. The compile file, run tests, and scan for dead code tasks include problem matchers to allow quick jumping to compiler errors, warnings, failed tests, and dead predicate locations.

New in Logtalk 3.11.0 (Jul 3, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • CHANGED: The built-in predicate `current_event/5` to always instantiate the first argument when called with it unbound.
  • ADDED: Support for overriding the default scratch directory by defining the library alias `scratch_directory` in a backend Prolog initialization file (assumed to be loaded prior to Logtalk loading). After a discussion with Douglas R. Miles on supporting installing Logtalk in a read-only directory and running multiple Logtalk instances concurrently without conflict.
  • ADDED: A `context/1` built-in context execution method to provide access to a predicate call execution context. Mainly used for providing a default error context when type-checking predicate arguments.
  • ADDED: Support for printing messages of kind `debug` and `debug(_)`. These messages are only printed, by default, when the `debug` flag is turned on.
  • ADDED: Property `includes(File)` to the `logtalk::loaded_file_property/2` predicate to allow enumerating, by backtracking, all files included by a loaded file (using `include/1` directives).
  • IMPROVED: The `logtalk_make/0-1` predicates are now aware of included files. A change to an included file since loaded now triggers reloading of the main file.
  • IMPROVED: Error-checking of the multi-threading and threaded engine built-in predicates when the goal arguments are module qualified.
  • FIXED: Utility predicates for the decompilation of predicate indicators and clause heads, when using a backend Prolog compiler that supports modules, to take into account Logtalk being loaded into a module other than `user`.
  • FIXED: Bug in the processing of nested conditional compilation directives.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • ADDED: Meta-predicate directives for the multi-threading and threaded engine built-in predicates to support implicit module qualified goal arguments when using SWI-Prolog or YAP as the backend Prolog system.
  • FIXED: SWI-Prolog adapter file optimization for message-sending goals made from within modules to account for Logtalk being loaded into a module other than `user`.
  • DOCUMENTATION:
  • ADDED: `CONTRIBUTING.md` file detailing how best to contribute to Logtalk.
  • ADDED: User Manual section on debugging messages.
  • UPDATED: User Manual section on error handling.
  • UPDATED: The `settings-sample.lgt` with a code sample on how to convert all `debug` and `debug(_)` messages into the equivalent of a `write(Message), nl` goal without the need to specify `message_tokens//2` rules for converting the
  • messages.
  • LIBRARY:
  • ADDED: Type `qualified_callable` to the `type` library object for checking possibly module-qualified callable terms. Available when using a backend Prolog system supporting modules.
  • UPDATED: Error-checking code in library entities to use the new `context/1` method.
  • TOOLS:
  • UPDATED: The `diagrams` tool to also display included files in file loading diagrams.
  • TESTS:
  • ADDED: Some more tests for the `current_event/5` built-in predicate.
  • ADDED: Some more tests for the `before/3` and `after/3` built-in methods.
  • ADDED: Some more tests for the conditional compilation directives.
  • EXAMPLES:
  • UPDATED: The `tabling` example for the updated tabling support found in SWI-Prolog 7.5.9.
  • UPDATED: The `expansion` example to avoid having to check for and undefine a backend Prolog system `public` operator to avoid compilation syntax errors.
  • UPDATED: Simplified the `operators` example to not require the `os` library.
  • UPDATED: Error-checking code in example entities to use the new `context/1` method.
  • INSTALLERS AND INSTALLATION SCRIPTS:
  • ADDED: An *experimental* version of the SWI-Prolog pack that loads Logtalk into a `logtalk` module instead of loading it into `user`.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • ADDED: Syntax coloring support for the new `context/1` built-in method to most of the supported text editors and syntax highlighters.
  • UPDATED: Instructions for Pygments Logtalk syntax coloring support.
  • FIXED: Vim syntax coloring support for the `create_logtalk_flag/3` and `current_logtalk_flag/2` built-in predicates.

New in Logtalk 3.10.9 (Jun 15, 2017)

  • Logtalk compiler and runtime:
  • CHANGED: The `defines/2` property returned by calls to the `object_property/2` and `category_property/2` predicates now returns a list with `number_of_rules(0)` and `number_of_clauses(0)` properties instead of an empty list for multifile and dynamic predicates with no local or initial set of clauses.
  • IMPROVED: Allow safe cases of static binding for objects compiled with the `complements` flag set to `restrict`. This notably allows use of static binding for calls to the library `type::valid/2` and `type::check/2-3` predicates.
  • Prolog adapter and integration files:
  • FIXED: Handle all possible `table/1` directive syntaxes when using SWI-Prolog or YAP as the backend compilers.
  • Library:
  • CHANGED: Loader file for the `unicode_data` library to load all data files using the `reload(skip)` compiler option to prevent accidental reload of this large resource due to e.g. changes to the default compilation mode.
  • Tools:
  • ADDED: New `lgtunit::assertion/2` meta-predicate. Mainly used in the code generated for tests using the `test/2-3` dialects.
  • CHANGED: Reporting of the `lgtunit` test dialects `test/2-3` when using the `true(Assertion)` or `deterministic(Assertion)` outcomes to print assertion error and failure messages for easier debugging of failed tests. Suggested by Ebrahim Azarisooreh.
  • Examples:
  • FIXED: Do not try to run the `redis` example unit tests when using backend Prolog systems that do not support the `redis` library.
  • FIXED: Singleton variable bug in the `inheritance` example.

New in Logtalk 3.10.8 (May 31, 2017)

  • Logtalk compiler and runtime:
  • FIXED: Bug where the `call/2-N` built-in method would not be opaque to cuts.
  • The bug occurred in some cases where the constructed goal was a call to a cut
  • transparent control construct.
  • Prolog adapter and integration files:
  • FIXED: SWI-Prolog hooks file to avoid a spurious meta-predicate lint warning.
  • Documentation:
  • IMPROVED: Documentation of the `abolish/1`, `asserta/1`, `assertz/1`,
  • `current_op/3`, `current_predicate/1`, and `predicate_property/2` built-in
  • methods.
  • IMPROVED: Documentation of the `dynamic/1`, `initialization/1`, `if/1`,
  • `elif/1`, `meta_non_terminal/1`, `mode/2`, `multifile/1`, and `use_module/2`
  • directives.
  • FIXED: Outdated `include/1` directive documentation on limitations that no
  • longer apply.
  • FIXED: Grammar description of the `dynamic/1`, `multifile/1`, and
  • `use_module/2` directives.
  • FIXED: Typo in the error terms in the documentation of the `create_object/4`,
  • `create_protocol/3`, and `create_category/4` built-in predicates.
  • Library;
  • ADDED: New `optional` library. Suggested by Sergio Castro.
  • Tests:
  • ADDED: Unit tests for the `call/1-N`, `ignore/1`, and `once/1` built-in
  • methods to check that they are opaque to cuts.
  • IMPROVED: Unit tests for the `initialization/1` directive.
  • IMPROVED: Better test coverage of the `findall/4` built-in method.
  • FIXED: Unit test for the `logtalk::file_type_extension/2` predicate to
  • account for backend Prolog compilers that don't generate temporary files
  • when compiling source files.
  • Examples:
  • UPDATED: The `errors` example to illustrate the error reported when trying
  • to define a multifile predicate in the absence of its primary declaration.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Reference to the `highlighter` source code highlighting package
  • support for Logtalk.

New in Logtalk 3.10.7 (May 10, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • RENAMED: The `logtalk_make/1` target `missing` to `check`.
  • ADDED: Support for extending `logtalk_make/1` targets with user defined actions using the new multifile predicate `logtalk_make_target_action/1`.
  • ADDED: Compiler lint checks for tautology and falsehood entity goals. Currently checked are calls to Prolog unification, comparison, and type testing built-in predicates. Suggested by Barry Evans.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • ADDED: An `eclipsehooks.pl` file for integration with ECLiPSe developer tools. Added hook to automatically call the built-in `make/0` predicate when calling `logtalk_make/0` or `logtalk_make/1` with the `all` target.
  • UPDATED: The SWI-Prolog hooks file to automatically call the built-in `make/0` predicate when calling `logtalk_make/0` or `logtalk_make/1` with the `all` target.
  • LIBRARY:
  • FIXED: Bug in the `pairs::group_by_key/2` predicate.
  • TOOLS:
  • CHANGED: The `dead_code_scanner` tool log messages from type `information` to `comment` so that the tool output is minimized when setting the `report` flag to `warnings`.
  • ADDED: Integration of the `dead_code_scanner` tool with the `logtalk_make/1` target `check`.
  • FIXED: Exception in the `dead_code_scanner` tool when checking parametric entity properties.
  • TESTS:
  • ADDED: Unit tests for the `lgtunit` tool support for parametric tests.
  • EXAMPLES:
  • UPDATED: The `errors` example to illustrate reporting of goals that are always true or false.

New in Logtalk 3.10.6 (May 1, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • ADDED: Predicate `logtalk::file_type_extension/2` for accessing the file type extensions defined in the Prolog adapter files.
  • ADDED: New targets `debug`, `normal`, and `optimal` to the `logtalk_make/1` built-in predicate. These targets change the compilation mode to, respectively, debug, normal, or optimal and reload all files (affected by the change to the compilation mode).
  • FIXED: Cases where the `{}/1` compiler bypass control construct would not be opaque to cuts.
  • FIXED: Lack of source line data when there is a syntax error in the first term of a source file.
  • FIXED: Reporting of errors when attempting to load a settings file.
  • FIXED: Compiler loop when trying to recompile a broken source file without first fixing its errors.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • UPDATED: All adapter files with definitions for `{+d}`, `{+n}`, and `{+o}` shortcuts for the new `logtalk_make/1` targets.
  • LIBRARY:
  • ADDED: Redis client library. Available when using GNU Prolog, Qu-Prolog, SICStus Prolog, SWI-Prolog, or XSB as the backend compiler. Inspired by a GNU Prolog library written by Sean Charles. Thanks to Ebrahim Azarisooreh for porting and testing help.
  • TOOLS:
  • CHANGED: Renamed the `code_metrics` tool `item/1` predicate to `entity/1` for interface uniformity with the other developer tools.
  • IMPROVED: Generate code coverage data for all entities in the `code_metrics` tool.
  • FIXED: Compile the `code_metrics` tool in optimize mode.
  • UPDATED: The `code_metrics`, `dead_code_scanner`, `diagrams`, and `lgtdoc` tools to take advantage of the new `logtalk::file_type_extension/2` predicate.
  • EXAMPLES:
  • ADDED: New `redis` example with unit tests for the Redis client library.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • UPDATED: IntelliJ IDEA plug-in. Contributed by Sergio Castro.

New in Logtalk 3.10.5 (Apr 18, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • FIXED: Regression introduced in release 3.10.2 when meta-calling execution context built-in methods.
  • FIXED: Compiler failure resulting from applying portability checks to calls to Prolog built-in predicates and functions found in auxiliary clauses (usually generated by the term-expanding mechanism).
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • FIXED: Adapter files for Quintus Prolog, SICStus Prolog, and YAP to ensure that changes to the `syntax_errors` Prolog flag do not affect the compiler which expects exceptions to be generated for syntax errors.
  • TOOLS:
  • CHANGED: The `lgtunit` tool now counts objects and categories declared in a test set to be subject to collecting of code coverage data as covered entities when they have no clauses.
  • ADDED: Option to the `logtalk_tester` script to specify the directory depth level to look for test sets.
  • IMPROVED: Performance of determinism tests when using the `lgtunit` tool.
  • IMPROVED: Pass the suppress path prefix option from the `logtalk_tester` script to the code coverage and test results output and report objects.
  • FIXED: Generate a valid XML code coverage report when no code coverage information is collected.
  • TESTS:
  • ADDED: Unit tests for metas-calls to the `this/1` and `self/1` execution context built-in methods.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • UPDATED: Syntax highlighting test files for recently added instantiation mode operators.

New in Logtalk 3.10.4 (Apr 6, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • FIXED: Bug in the compiler second stage error handling which could result
  • in a silent source file compilation failure without an error message being
  • printed. Thanks to Xin Wang for the bug report.
  • FIXED: Compiler bug when reporting an error for calls to the entity creation
  • predicates that resulted in a generic error instead of the specific error.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • FIXED: Declare the compiler internal `'$lgt_current_engine_'/4` predicate as
  • `volatile` when using SWI-Prolog to avoid issues with saved states. Thanks to
  • Douglas Miles for the bug report.
  • DOCUMENTATION:
  • UPDATED: Formatting commands in `man` pages for better conversion to HTML.
  • FIXED: Documentation of the library `os::file_exists/1` predicate to clarify
  • that it checks for regular files. Thanks to Xin Wang for the bug report.
  • LIBRARY:
  • ADDED: Predicates `java::decode_exception/2-3` for decoding Java exceptions.
  • FIXED: Definition of the `os::file_exists/1` predicate for B-Prolog and
  • Quintus Prolog to ensure that the specified file is a regular file.
  • TOOLS:
  • CHANGED: Renamed message `covered_entities_and_clause_numbers/2` to
  • `covered_entities_numbers/3` and message `entity_clause_coverage/4` to
  • `entity_predicate_coverage/6` in the `lgtunit` tool to improve code coverage
  • reports.
  • ADDED: Messages `entity_coverage_starts/1`, `entity_coverage_ends/1`, and
  • `covered_entities_numbers/3` to the `lgtunit` tool for use when generating
  • code coverage reports.
  • ADDED: Support for generating XML code coverage reports.
  • ADDED: Option to the `logtalk_tester.sh` script to generate XML code coverage
  • reports.
  • IMPROVED: Code coverage reports by also printing coverage statistics per
  • entity.
  • IMPROVED: Code coverage reports by using non-terminal indicators when
  • reporting coverage for predicates derived from non-terminals.
  • TESTS:
  • ADDED: Missing unit test for the `[]/1` message delegation control construct.
  • ADDED: Tests to the `errors` example to check for expected compiler errors.
  • EXAMPLES:
  • CHANGED: The `localizations` example to generate a code coverage report.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • UPDATED: IntelliJ IDEA plug-in. Contributed by Sergio Castro.
  • IMPROVED: Snippets support for the Visual Studio Code text editor.
  • FIXED: Renamed Visual Studio Code directory to `vscode`.

New in Logtalk 3.10.3 (Mar 21, 2017)

  • Logtalk compiler and runtime:
  • IMPROVED: Simplified code generated for multifile predicates.
  • FIXED: Regression in previous release in the compilation of multifile predicate clauses that make calls to the `::/1-2` control constructs.
  • Documentation:
  • IMPROVED: Documentation of the `type` library object.
  • Library:
  • ADDED: Predicate `loop::foreach/4`. Suggested by Xin Wang.
  • ADDED: Type `predicate` to the library `type` object for checking for an object public predicate.
  • FIXED: The new operating-system types added in the previous release by the `os_types` category introduced a spurious choice-point for the `type::type/1` and `type::check/2` predicates.
  • FIXED: Mode templates of some of the `java_utils_protocol` predicates.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: IntelliJ IDEA plug-in. Contributed by Sergio Castro.
  • ADDED: Sample command for generating SVG diagrams from within the Atom text editor.
  • FIXED: Sample command for generating HTML documentation from within the Atom text editor.

New in Logtalk 3.10.2 (Mar 13, 2017)

  • Logtalk compiler and runtime:
  • CHANGED: Allow the primary declaration for a multifile predicate to declare the predicate protected or private instead of being restricted to public scope. This allows using multifile predicates for distributed predicate definitions without making them part of the public interface of the objects holding their primary declarations.
  • CHANGED: Calls to `logtalk_make(missing)` no longer report predicates for messages sent to objects implementing the `forwarding` protocol. This avoids false positives when using e.g. the `java` library.
  • FIXED: Calls to the `^^/1` and `::/1` control constructs when called from predicates that are being called from multifile predicate clauses.
  • FIXED: Also print line numbers in warnings for clauses that define reserved predicates declared in built-in protocols that are not declared as implemented.
  • FIXED: Cases where terms in compiler error and warning messages would not be printed as quoted terms.
  • Documentation:
  • IMPROVED: Documentation of the `logtalk_make/1` built-in predicate.
  • IMPROVED: Documentation of the sample loader file.
  • Library:
  • ADDED: Support for the operating-system types `file`, `file(Extensions)`, `directory`, and `environment_variable` for type-checking when using the `type` library object.
  • ADDED: Support for types `stream`, `stream_or_alias`, `stream(Property)`, and `stream_or_alias(Property)` to the `type` library object. Suggested by Barry Evans.
  • Tools:
  • UPDATED: The `code_metrics` and `dead_code_scanner` tools to print a warning message when an item to be analyzed is not loaded or does not exist.
  • IMPROVED: Documentation on how to debug failing unit tests.
  • Tests:
  • ADDED: Unit tests for the `sender/1` and `self/1` built-in methods to check results when called from within multifile predicate clauses.
  • Examples:
  • ADDED: Example `family_alt` providing an alternative version of the `family` example using a family registry implemented using multifile predicates to avoid dynamic binding.
  • IMPROVED: Simplify the `includes` example as the compiler no longer changes the working directory when compiling files thus making the example portability workaround unnecessary.
  • IMPROVED: Documentation of the `pardicts` example.
  • FIXED: The `benchmarks` example loader file used for benchmarking with event support turned on was not loading all required source files.
  • FIXED: Layout of comments in some examples to follow the coding guidelines.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Support for the Visual Studio Code text editor to take advantage of the support for language specific default settings introduced in version 1.10.

New in Logtalk 3.10.1 (Mar 3, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • FIXED: Bug where an included file specified using a relative path would not be found when the main file is being loaded from a directory other than the one that contains it.
  • FIXED: Bug where a Prolog module would not be found when an included file uses `ensure_loaded/1` or `use_module/1-2` directives where the Prolog module is specified using a relative path.
  • LIBRARY:
  • ADDED: Predicate `pairs::group_by_key/2`.
  • TOOLS:
  • IMPROVED: The `diagrams` tool nows prints a warning message when generating a diagram fails and ensures that the output stream is closed in this case.
  • IMPROVED: When generating cross-referencing diagrams, print a warning instead of generating entity existence errors when referenced entities are not loaded.
  • TESTS:
  • ADDED: Unit tests for the `include/1` directive to check additional cases of using relative paths.
  • EXAMPLES:
  • FIXED: Portability issue with one of the `errors` example loader files.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • ADDED: Atom text editor command for running a doclet found on the directory of an open file.

New in Logtalk 3.10.0 (Feb 27, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • CHANGED: The debug events `fact/4` and `rule/4` to `fact/5` and `rule/5` with the added argument being the container file to account for the improved support for `include/1` directives.
  • CHANGED: The compiler no longer changes the Prolog backend working directory when compiling files. This avoids potential clashes when using multi-threaded Prolog systems, such as SWI-Prolog, where the working directory is shared among all threads.
  • ADDED: The entity properties that return information on predicates now include an `include(File)` property when the predicate property location is an included file.
  • IMPROVED: Report compiler errors and warnings found when processing an `include/1` directive using the included file name and line numbers instead of reporting the main file name and the line number of the directive.
  • CHANGED: The `file` key of the `logtalk_load_context/2` predicate to return the file being included when processing an `include/1` directive.
  • FIXED: Using `include/1` directives to include files that in turn also use `include/1` directives with relative paths to include other files.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • CHANGED: The default value of the `report` flag is now set to `warnings` when using the quiet startup command-line option provided by the SWI-Prolog, SICStus Prolog, and YAP backends.
  • FIXED: Removed superfluous newline at startup when using the integration scripts. Thanks to Xin Wang for the bug report.
  • FIXED: Workaround a XSB bug when expanding file paths while passing the expected full path.
  • FIXED: Increase the size of the memory areas in the Qu-Prolog adapter file and integration scripts to allow running the current Logtalk version.
  • DOCUMENTATION:
  • UPDATED: Documentation of the portable `os` library.
  • LIBRARY:
  • ADDED: Predicate `randomize/1` to the `random` library.
  • ADDED: Implementation of the `os::time_stamp/1` predicate for CxProlog.
  • FIXED: Declaration of the return type for the `os::time_stamp/1` predicate.
  • FIXED: Implementation of the `os::environment_variable/2` predicate for XSB.
  • TOOLS:
  • CHANGED: The `debugger`, `lgtunit`, and `ports` tools to account for the change to the debug events from `fact/4` and `rule/4` to `fact/5` and `rule/5`.
  • UPDATED: The `dead_code_scanner` tool to report dead code found in included files by using their paths.
  • FIXED: Extra characters in the beginning of the lines in the listings of skipped and failed tests when using the `logtalk_tester.sh` script from the directory that contains the tests.
  • FIXED: Detection by the `logtalk_tester.sh` script of 64-bit versions of the Bash shell provided by Git for Windows.
  • FIXED: Regression in previous release when passing additional arguments to the `logtalk_tester.sh` script.
  • FIXED: Missing `dynamic/1` directive for a `logtalk_library_path/2` multifile predicate definition in the `code_metrics` tool. TESTS:
  • ADDED: Unit tests for the `include/1` entity directive to verify ordering of `initialization/1` directive goals.
  • ADDED: Unit tests for the `include/1` entity directive for checking that `declares/2` and `defines/2` properties include the `line_count/1` and `include/1` properties for predicates declared or defined in included files.
  • ADDED: Unit tests for the `os` library.
  • EXAMPLES:
  • UPDATED: The `errors` example to illustrate errors and warnings when using the `include/1` directive.
  • INSTALLERS AND INSTALLATION SCRIPTS:
  • FIXED: The shebang on all shell scripts to use `#!/usr/bin/env bash` instead of `#!/bin/bash` for compatibility with BSD systems. Thanks to Xin Wang for the bug report. When using the scripts on Windows using the Bash shell provided by Git for Windows, a recent version is required.
  • FIXED: Bug in Docker publishing script where the `master` branch was used to deploy stable versions but not using the tagged stable commits.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • ADDED: Atom text editor command for running the tests found on the directory of an open file.
  • UPDATED: Definition file for the Atom text editor `process-palette` plug-in to create a `Logtalk` menu with the defined commands. Requires version 0.12.0 or later of the plug-in.
  • FIXED: Configuration file for the Atom text editor `process-palette` plug-in when used on Windows systems.

New in Logtalk 3.09.2 (Feb 16, 2017)

  • LOGTALK COMPILER AND RUNTIME:
  • CHANGED: Expand the file argument of `include/1` directives as a source file argument (thus allowing the file name extension to be omitted).
  • CHANGED: Exception thrown when a category attempts to complement itself for consistency with similar cases.
  • IMPROVED: More strict compiler checking for valid entity relations when compiling entity opening directives.
  • FIXED: Bug where the compiler would fail to report an error when a class attempts to specialize a prototype.
  • FIXED: Spurious choice-point when compiling non-standard file-level directives.
  • FIXED: Handling of the `debug` and `optimize` flags. Turning on one of them failed to explicitly turn off the other. This bug would prevent in some cases overriding the default compilation mode.
  • FIXED: Spurious reports on missing scope directives when using `mode/2` directives to document non-terminals.
  • PROLOG ADAPTER AND INTEGRATION FILES:
  • FIXED: Expanding source file paths when we have a sub-directory and a file with the same name in a directory when using ECLiPSe as the backend compiler.
  • FIXED: Passing to the Logtalk compiler discontiguous predicate warning events posted by the ECLiPSe compiler.
  • LIBRARY:
  • ADDED: Plain Prolog version of the Unicode 6.2 standard.
  • ADDED: Predicate `atom::split/3` for splitting an atom into a list of sub-atoms given another atom as delimiter.
  • IMPROVED: Implementation of the `java::array_to_terms/2-3` predicates when using the SWI-Prolog/YAP JPL library.
  • FIXED: Missing `compound` type implementation in the `type` library object. Thanks to Ebrahim Azarisooreh for the bug report.
  • FIXED: Inconsistent licensing terms of `rbtree` code. As the Logtalk version was originally released under the Artistic License 2.0, we use this license relicensing clause to re-release it under Logtalk's Apache License 2.0. Thanks to Per Mildner for reporting.
  • TOOLS:
  • CHANGED: Renamed `help` tool `control/4` predicate to `control_construct/4`.
  • IMPROVED: Documentation of the `lgtunit` tool.
  • FIXED: Runtime error in the `dead_code_scanner` tool when scanning source files that define protocols.
  • FIXED: Bug in the `lgtunit` tool when compiling in debug mode tests using the `test/3` dialect where condition, setup, and cleanup goals would be missing the execution context.
  • TESTS:
  • ADDED: Unit tests for the `set_logtalk_flag/2` built-in predicate to verify the expected behavior for the `debug` and `optimize` flags.
  • ADDED: Unit tests for the `create_object/4`, `create_protocol/3`, and `create_category/4` built-in predicates to check the expected errors when the declared entity relations are not valid.
  • EXAMPLES:
  • FIXED: The options used for generating the API HTML documentation in the `zoom_doclet` example.
  • INSTALLERS AND INSTALLATION SCRIPTS:
  • FIXED: Outdated and fragile constructs in most Bash shell scripts.
  • IDES, TEXT EDITORS, AND SYNTAX HIGHLIGHTERS SUPPORT:
  • ADDED: IntelliJ IDEA plug-in. Contributed by Sergio Castro.
  • ADDED: Helper shell script for publishing Docker images at Docker Hub. Contributed by Sergio Castro.
  • IMPROVED: Documentation of the Logtalk support for the Atom text editor.

New in Logtalk 3.09.1 (Jan 17, 2017)

  • Logtalk compiler and runtime:
  • CHANGED: Settings files are now also looked up in the user home directory when not found in the startup directory or in the Logtalk user directory. Setting the `settings_file` flag to `restrict` now restricts searching for a settings file to the Logtalk user directory and the user home directory. This changes are useful when a team shares a Logtalk installation with both the `LOGTALKHOME` and `LOGTALKUSER` environment variables pointing to the same directory. Thanks to Barry Evans for the suggestion.
  • CHANGED: The `logtalk::expand_library_path/2` predicate to also expand paths in library notation in addition to library aliases.
  • NEW: Inline calls in linking clauses to entity local predicates, to Prolog module, built-in, and foreign predicates, and to predicates defined in the `user` pseudo-object when compiling source files with the `optimize` flag turned on.
  • ADDED: Predicate property and predicate definition property `inline`.
  • ADDED: Object and category `updates/2` property for cross-referencing data on predicates that update dynamic predicates.
  • IMPROVED: Detect and report repeated entity relation clauses in entity opening directives. The repetitions are reported using a `repeat` permission error.
  • FIXED: Static binding of a closure meta-argument that is an alias to another predicate.
  • FIXED: Keep the relative order of file and object level `initialization/1` directives in a source file in the generated code.
  • FIXED: Compiler internal declaration of the `threaded_engine_fetch/1` as a built-in predicate.
  • FIXED: Checking that an object exists at runtime when sending trivial messages (such as `true/0` or `repeat/0`) would fail to check for instantiation errors.
  • FIXED: Spurious choice-point when using the `logtalk_compile/1-2` built-in predicates.
  • FIXED: Using the `{}/1` compiler bypass control construct as argument to the `if/1` and `elif/1` conditional compilation directives.
  • FIXED: Bug where `initialization/1`directives in included files would be ignored when the main file also have one or more `initialization/1`directives.
  • FIXED: The convenient notation `{Proxy}::Message` to use parametric object proxies is now translated to `({Proxy}, Proxy::Message)` before compilation as per documentation. This is also consistent with the compilation of other calls in `user` and provides a small performance improvement over the previous use of a `catch/3` wrapper for `Proxy`.
  • FIXED: Portability report of non-standard arithmetic functions with no arguments.
  • FIXED: Instantiation error when compiling `set_prolog_flag/2` directives setting a non-standard flag with the `portability` flag set to `warning`.
  • Prolog adapter and integration files:
  • CHANGED: Also optimize message sending goals in plain Prolog source files and message sending goals from `user` in Logtalk source files when using YAP or SWI-Prolog.
  • CHANGED: Moved the dependency on the `standard:datime/1` predicate from the XSB adapter file, where it is no longer used, to the library `os` object.
  • ADDED: Normalization of arithmetic evaluation errors when using XSB.
  • ADDED: Commented out experimental definition (to the `swihooks.pl` file) for the SWI-Prolog `prolog:make_hook/2` hook predicate to automatically call `logtalk_make/0` when calling `make/0`.
  • ADDED: Commented out experimental definition (to the `swihooks.pl` file) for SWI-Prolog to print a stack trace for errors generated from top-level message sending calls.
  • IMPROVED: Faster implementation of the internal `'$lgt_predicate_property'/2` predicate for SWI-Prolog.
  • FIXED: Compilation of SWI-Prolog proprietary directives when decorating the generated code with source location data for using the SWI-Prolog own tools.
  • Documentation:
  • IMPROVED: User Manual documentation on the predicate lookup procedures.
  • FIXED: Reference Manual descriptions of the `public/1` and `protected/1` directives regarding using declared non-terminals as arguments to the `phrase/2-3` built-in methods.
  • Library:
  • ADDED: Predicate `atom::replace_sub_atom/4` for replacing all occurrences of an atom by another atom in an atom.
  • ADDED: Predicate `make_library_path/1` to the `os` library.
  • ADDED: Predicate `value_reference/2` to the Java library.
  • ADDED: Predicate `map/3` to the `pairs` library.
  • FIXED: Added workaround to the `os` library when using SWI-Prolog as the backend compiler to allow correct expansion of Java file names with a `$` in the middle of the name.
  • FIXED: Avoid portability warnings when compiling the standard library due to calls to non-standard built-in predicates from within conditional compilation blocks.
  • Tools:
  • CHANGED: The default value of the diagrams option `node_type_captions/1` to `true`.
  • CHANGED: When generating diagrams for all loaded libraries, represent any loaded Prolog module library as an external library.
  • ADDED: Predicate `lgtunit::run/1` for running a unit test or a list of unit tests. Thanks to Barry Evans for the suggestion.
  • ADDED: Predicate `lgtunit::benchmark/4` supporting the specification of the clock to be used (either `cpu` or `wall`). The `wall` clock is useful for benchmarking goals that spawn threads. Thanks to Barry Evans for the suggestion.
  • ADDED: Zoom option to the `diagrams` tool that allows linking library diagrams to entity diagrams to predicate cross-referencing diagrams.
  • ADDED: Doclet examples, `zoom_doclet` and `tools_doclet`, illustrating linking diagrams using the `zoom/1` option.
  • IMPROVED: The `lgtdoc` tool now expands the directory and file arguments of the `xml_docs_directory/1`, `omit_path_prefixes/1`, `exclude_files/1`, `exclude_paths/1`, `entity_xsl_file/1`, and `index_xsl_file/1` options.
  • IMPROVED: Predicate cross-referencing diagrams now include edges for predicates called in *self* and for *super* calls.
  • IMPROVED: Documentation of the `wrapper` tool and added `.prolog` and `.pro` file extensions to the default list of recognized Prolog file name extensions.
  • IMPROVED: Represent non-terminal callers in predicate cross-referencing diagrams as non-terminals instead of using the corresponding predicate form.
  • FIXED: Bug in the generation of library cross-referencing diagrams where all external predicates would be assigned to the `user` pseudo-object.
  • FIXED: Bug in some diagram methods that would fail to reset the internal database before generating a diagram.
  • FIXED: When generating entity diagrams, don't generate nodes for dynamic predicates that have no clauses defined at compilation time.
  • FIXED: Bug in predicate cross-referencing diagrams display where some external calls from non-terminals would not be represented correctly.
  • FIXED: Cases where the `exclude_libraries/1` option would be ignored when generating library diagrams.
  • FIXED: Example doclets to prevent issues with different concepts of working directory across supported backend Prolog compilers.
  • FIXED: Avoid portability warnings when compiling the developer tools due to directives and calls to non-standard built-in predicates found in conditional compilation blocks.
  • FIXED: Bug in library dependency diagrams where edges could be generated for libraries without entity dependencies.
  • FIXED: Escape terms in dot HTML-like labels for most backend Prolog systems.
  • Examples:
  • CHANGED: The `named_databases` example definition of the `db_save/2` predicate for SWI-Prolog and YAP to only save dynamic predicate definitions. This ensures portability and prevents errors when using SWI-Prolog with the (recently added) `protect_static_code` flag set to `true`.
  • ADDED: Simple example, `inlining`, illustrating inlining of predicate definitions.
  • FIXED: Two dead links to the original Prolog code in the `adventure` example. Thanks to Eric Charikane for the updated links.
  • Tests:
  • ADDED: Additional tests for the `include/1` directive to check compilation of multiple `initialization/1` directives in the main file and in the included files.
  • ADDED: Unit tests for the new `updates/2` object and category property.
  • ADDED: Unit tests for the `logtalk_make/0-1` built-in predicates.
  • ADDED: Some more unit tests for the public predicates of the `logtalk` built-in object.
  • UPDATED: Unit tests for the `securemp` example to take into account that message sending goals from `user` may be optimized.
  • Installers and installation scripts:
  • IMPROVED: The `update_html_docs.sh` and `update_svg_diagrams.sh` scripts now use the `LOGTALKHOME` and `LOGTALKUSER` environment variables to specify paths instead of hard-coded paths.
  • FIXED: The `install.sh` manual installation script to allow using it from any directory. Thanks to Jan Wielemaker for the bug report.
  • FIXED: Windows installer script bug that resulted in integration shortcuts for SWI-Prolog not being created in 32 bits versions of Windows. Thanks to Michael Richter for the bug report.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Preliminary extension for the Visual Studio Code text editor.
  • UPDATED: Contributed an updated Logtalk mode for the SWI-Prolog native text editor.

New in Logtalk 3.09.0 (Nov 28, 2016)

  • Logtalk compiler and runtime:
  • CHANGED: Settings files are now also looked up in the user home directory when not found in the startup directory or in the Logtalk user directory. Setting the `settings_file` flag to `restrict` now restricts searching for a settings file to the Logtalk user directory and the user home directory. This changes are useful when a team shares a Logtalk installation with both the `LOGTALKHOME` and `LOGTALKUSER` environment variables pointing to the same directory. Thanks to Barry Evans for the suggestion.
  • CHANGED: The `logtalk::expand_library_path/2` predicate to also expand paths in library notation in addition to library aliases.
  • NEW: Inline calls in linking clauses to entity local predicates, to Prolog module, built-in, and foreign predicates, and to predicates defined in the `user` pseudo-object when compiling source files with the `optimize` flag turned on.
  • ADDED: Predicate property and predicate definition property `inline`.
  • ADDED: Object and category `updates/2` property for cross-referencing data on predicates that update dynamic predicates.
  • IMPROVED: Detect and report repeated entity relation clauses in entity opening directives. The repetitions are reported using a `repeat` permission error.
  • FIXED: Static binding of a closure meta-argument that is an alias to another predicate.
  • FIXED: Keep the relative order of file and object level `initialization/1` directives in a source file in the generated code.
  • FIXED: Compiler internal declaration of the `threaded_engine_fetch/1` as a built-in predicate.
  • FIXED: Checking that an object exists at runtime when sending trivial messages (such as `true/0` or `repeat/0`) would fail to check for instantiation errors.
  • FIXED: Spurious choice-point when using the `logtalk_compile/1-2` built-in predicates.
  • FIXED: Using the `{}/1` compiler bypass control construct as argument to the `if/1` and `elif/1` conditional compilation directives.
  • FIXED: Bug where `initialization/1`directives in included files would be ignored when the main file also have one or more `initialization/1`directives.
  • FIXED: The convenient notation `{Proxy}::Message` to use parametric object proxies is now translated to `({Proxy}, Proxy::Message)` before compilation as per documentation. This is also consistent with the compilation of other calls in `user` and provides a small performance improvement over the previous use of a `catch/3` wrapper for `Proxy`.
  • FIXED: Portability report of non-standard arithmetic functions with no arguments.
  • FIXED: Instantiation error when compiling `set_prolog_flag/2` directives setting a non-standard flag with the `portability` flag set to `warning`.
  • Prolog adapter and integration files:
  • CHANGED: Also optimize message sending goals in plain Prolog source files and message sending goals from `user` in Logtalk source files when using YAP or SWI-Prolog.
  • CHANGED: Moved the dependency on the `standard:datime/1` predicate from the XSB adapter file, where it is no longer used, to the library `os` object.
  • ADDED: Normalization of arithmetic evaluation errors when using XSB.
  • ADDED: Commented out experimental definition (to the `swihooks.pl` file) for the SWI-Prolog `prolog:make_hook/2` hook predicate to automatically call `logtalk_make/0` when calling `make/0`.
  • ADDED: Commented out experimental definition (to the `swihooks.pl` file) for SWI-Prolog to print a stack trace for errors generated from top-level message sending calls.
  • IMPROVED: Faster implementation of the internal `'$lgt_predicate_property'/2` predicate for SWI-Prolog.
  • FIXED: Compilation of SWI-Prolog proprietary directives when decorating the generated code with source location data for using the SWI-Prolog own tools.
  • Documentation:
  • IMPROVED: User Manual documentation on the predicate lookup procedures.
  • FIXED: Reference Manual descriptions of the `public/1` and `protected/1` directives regarding using declared non-terminals as arguments to the `phrase/2-3` built-in methods.
  • Library:
  • ADDED: Predicate `atom::replace_sub_atom/4` for replacing all occurrences of an atom by another atom in an atom.
  • ADDED: Predicate `make_library_path/1` to the `os` library.
  • ADDED: Predicate `value_reference/2` to the Java library.
  • ADDED: Predicate `map/3` to the `pairs` library.
  • FIXED: Added workaround to the `os` library when using SWI-Prolog as the backend compiler to allow correct expansion of Java file names with a `$` in the middle of the name.
  • FIXED: Avoid portability warnings when compiling the standard library due to calls to non-standard built-in predicates from within conditional compilation blocks.
  • Tools:
  • CHANGED: The default value of the diagrams option `node_type_captions/1` to `true`.
  • CHANGED: When generating diagrams for all loaded libraries, represent any loaded Prolog module library as an external library.
  • ADDED: Predicate `lgtunit::run/1` for running a unit test or a list of unit tests. Thanks to Barry Evans for the suggestion.
  • ADDED: Predicate `lgtunit::benchmark/4` supporting the specification of the clock to be used (either `cpu` or `wall`). The `wall` clock is useful for benchmarking goals that spawn threads. Thanks to Barry Evans for the suggestion.
  • ADDED: Zoom option to the `diagrams` tool that allows linking library diagrams to entity diagrams to predicate cross-referencing diagrams.
  • ADDED: Doclet examples, `zoom_doclet` and `tools_doclet`, illustrating linking diagrams using the `zoom/1` option.
  • IMPROVED: The `lgtdoc` tool now expands the directory and file arguments of the `xml_docs_directory/1`, `omit_path_prefixes/1`, `exclude_files/1`, `exclude_paths/1`, `entity_xsl_file/1`, and `index_xsl_file/1` options.
  • IMPROVED: Predicate cross-referencing diagrams now include edges for predicates called in *selfand for *supercalls.
  • IMPROVED: Documentation of the `wrapper` tool and added `.prolog` and `.pro` file extensions to the default list of recognized Prolog file name extensions.
  • IMPROVED: Represent non-terminal callers in predicate cross-referencing diagrams as non-terminals instead of using the corresponding predicate form.
  • FIXED: Bug in the generation of library cross-referencing diagrams where all external predicates would be assigned to the `user` pseudo-object.
  • FIXED: Bug in some diagram methods that would fail to reset the internal database before generating a diagram.
  • FIXED: When generating entity diagrams, don't generate nodes for dynamic predicates that have no clauses defined at compilation time.
  • FIXED: Bug in predicate cross-referencing diagrams display where some external calls from non-terminals would not be represented correctly.
  • FIXED: Cases where the `exclude_libraries/1` option would be ignored when generating library diagrams.
  • FIXED: Example doclets to prevent issues with different concepts of working directory across supported backend Prolog compilers.
  • FIXED: Avoid portability warnings when compiling the developer tools due to directives and calls to non-standard built-in predicates found in conditional compilation blocks.
  • FIXED: Bug in library dependency diagrams where edges could be generated for libraries without entity dependencies.
  • FIXED: Escape terms in dot HTML-like labels for most backend Prolog systems.
  • Examples:
  • CHANGED: The `named_databases` example definition of the `db_save/2` predicate for SWI-Prolog and YAP to only save dynamic predicate definitions. This ensures portability and prevents errors when using SWI-Prolog with the (recently added) `protect_static_code` flag set to `true`.
  • ADDED: Simple example, `inlining`, illustrating inlining of predicate definitions.
  • FIXED: Two dead links to the original Prolog code in the `adventure` example. Thanks to Eric Charikane for the updated links.
  • Tests:
  • ADDED: Additional tests for the `include/1` directive to check compilation of multiple `initialization/1` directives in the main file and in the included files.
  • ADDED: Unit tests for the new `updates/2` object and category property.
  • ADDED: Unit tests for the `logtalk_make/0-1` built-in predicates.
  • ADDED: Some more unit tests for the public predicates of the `logtalk` built-in object.
  • UPDATED: Unit tests for the `securemp` example to take into account that message sending goals from `user` may be optimized.
  • Installers and installation scripts:
  • IMPROVED: The `update_html_docs.sh` and `update_svg_diagrams.sh` scripts now use the `LOGTALKHOME` and `LOGTALKUSER` environment variables to specify paths instead of hard-coded paths.
  • FIXED: The `install.sh` manual installation script to allow using it from any directory. Thanks to Jan Wielemaker for the bug report.
  • FIXED: Windows installer script bug that resulted in integration shortcuts for SWI-Prolog not being created in 32 bits versions of Windows. Thanks to Michael Richter for the bug report.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Preliminary extension for the Visual Studio Code text editor.
  • UPDATED: Contributed an updated Logtalk mode for the SWI-Prolog native text editor.

New in Logtalk 3.08.0 (Oct 17, 2016)

  • Logtalk compiler and runtime:
  • CHANGED: Ensure that in compiler error and warning messages the file and line information is always the last line for the reported issue.
  • CHANGED: Also save reflection data for `uses/2` directives for resources in the pseudo-object `user`.
  • ADDED: Define a library path for the `coding` directory as it may also contain source code for supporting editing services.
  • ADDED: Also generate entity `calls/2` properties for non-terminals listed in `uses/2` and `use_module/2` directives and add `non_terminal/1` and `alias/2` (when applicable) properties to the callee properties.
  • IMPROVED: More compact and easier to extend internal representation for the `calls/2` entity properties.
  • FIXED: Source file compilation error reporting when the errors occur before the intermediate Prolog file is created. The report would containing only the error but without file and line information. This bug only occurred when compiling the first source file term while checking for an `encoding/1` directive.
  • FIXED: Processing of the `at_same_line` token when printing a message where the line prefix would not be omitted.
  • Documentation:
  • IMPROVED: Documentation of the `include/1` directive.
  • IMPROVED: Documentation of the `logtalk_load_context/2` built-in predicate.
  • FIXED: Examples in the User Manual of entity opening directives that still used old and no longer supported Logtalk 2.x syntax for enumerating multiple entities.
  • Library:
  • ADDED: A set of protocols specifying predicates for calling Java from Prolog and implementations of these protocols for SWI-Prolog (requires the bundled JPL library), YAP (requires updating the old bundled version of the JPL library), and JIProlog (experimental; not fully functional).
  • FIXED: Typo in the `arbitrary` category in the generation of random values for the `protocol` type. Thanks to Jan Burse for the bug report.
  • FIXED: Missing public declarations for the `check/1` and `valid/1` predicates in the `varlistp` protocol.
  • FIXED: Arity typos in the declaration of the meta-predicates aliases `scanl1/3` and `scanr1/3` in the `meta` object.
  • FIXED: The `os::directory_files/2` predicate when called with a path that requires expansion when using SWI-Prolog or XSB as the backend compiler.
  • Tools:
  • NEW: Dead code scanner tool, `dead_code_scanner`, co-developed with Barry Evans.
  • NEW: A `logtalk_doclet.sh` automation script for running all doclets found in a directory and its sub-directories.
  • ADDED: Predicates `leashing/1`, `spying/1`, and `spying/4` to the `debugger` tool.
  • ADDED: A `epsilon/1` utility predicate to the `lgtunit` tool.
  • CHANGED: The `lgtunit` tool no longer depends on the `date` and `time` library objects.
  • CHANGED: The default backend compiler for the `logtalk_tester.sh` automation script is now SWI-Prolog.
  • CHANGED: The default path prefix to be suppressed when running the `logtalk_tester.sh` automation script is now `$HOME/`.
  • IMPROVED: The `logtalk_tester.sh` automation script to avoiding printing grep errors when no test sets are found.
  • IMPROVED: The `lgtunit` tool `quick_check/1-3` predicates now also accept as template `::/2`, `

New in Logtalk 3.07.0 (Sep 1, 2016)

  • Logtalk compiler and runtime:
  • ADDED: A `unicode` read-only flag to describe the backend Prolog compiler support for the Unicode standard.
  • ADDED: Support for `++` (ground) and `--` (unbound) argument instantiation modes (declared as prefix operators) for use with the `mode/2` predicate directive.
  • ADDED: Support for `one_or_error` determinism specification in `mode/2` predicate directives. Useful for documenting type-checking predicates.
  • IMPROVED: Detect attempts to call existentially quantified goals outside the scope of `bagof/3` and `setof/3` calls.
  • FIXED: When compiling `uses/2` directives, don't create a linking clause for runtime use for built-in predicates in `user` when no alias is being defined.
  • FIXED: When propagating a compilation failure for a file to its parent files, ensure that the file ancestors will be reloaded starting with the top ancestor by the make mechanism.
  • FIXED: Avoid redundant file reloads when calling `logtalk_make/0` or `logtalk_make/1` with the target `all`.
  • FIXED: Detection of missing predicates in `^^/1` calls when calling `logtalk_make/1` with the target `missing`.
  • FIXED: Bug in the reflection API where some predicate cross-referencing information were not recorded. Thanks to Edward Schwartz for the bug report.
  • Prolog adapter and integration files:
  • FIXED: Embedding Logtalk in a GNU Prolog generated executable.
  • FIXED: Startup warnings about undefined multi-threading predicates when using Lean Prolog as the backend compiler.
  • Documentation:
  • ADDED: Glossary entries for the different roles of source files.
  • IMPROVED: The glossary is now included in the PDF version of the Reference Manual.
  • IMPROVED: Description of the semantics of predicate scope directives in the User Manual.
  • Library:
  • ADDED: A user-extensible `type` object defining type testing and type checking predicates over common Logtalk and Prolog types.
  • ADDED: A user-extensible `arbitrary` category, which complements the library `type` object, defining predicates for generating arbitrary values for selected types.
  • UPDATED: Revised random number generator library. Added `between/3`, `member/2`, `select/3`, `sequence/4`, `set/4`, `get_seed/1`, and `set_seed/1` predicates.
  • Tools:
  • ADDED: QuickCheck support to the `lgtunit` tool. Includes both a new `quick_check/2-3` test dialect and `quick_check/1-3` public predicates for e.g. interactive use at the top-level interpreter.
  • ADDED: A `doclet` tool providing a simple solution to specify a set of goals and a set of shell commands to (re)generate documentation for a project.
  • CHANGED: The `lgtdoc` tool to always interpret the argument of the option `xml_docs_directory/1` as relative to the current directory for consistency with the `diagrams` tool.
  • FIXED: The `lgtdoc` tool to use the `startup` library name only when no other library for the same path is defined.
  • FIXED: The `lgtunit` tool to allow defining `test/3` tests with a `note/1` option whose argument is a variable to be instantiated by the test goal.
  • FIXED: Warning about a missing `meta_predicate/1` directive when compiling the `debugger` tool with some backend Prolog compilers such as Lean Prolog.
  • Examples:
  • ADDED: New `my_types` example of defining new types using the user-extensible `type` library object.
  • ADDED: New `quick_check` example on how to use the QuickCheck support in the `lgtunit` tool for both interactive testing at the top-level and for defining unit tests.

New in Logtalk 3.06.2 (Jul 18, 2016)

  • Logtalk compiler and runtime:
  • ADDED: Support for `//` and `[//]` meta-predicate meta-argument specifiers when dealing with proprietary Prolog meta-predicates.
  • ADDED: A `term` key to the `logtalk_load_context/2` built-in predicate for accessing the term under compilation.
  • IMPROVED: Compile settings files in optimized mode and preventing reloading.
  • FIXED: Make the `logtalk_load_context/2` built-in predicate `variable_names` and `term_position` keys usable by the `goal_expansion/2` method.
  • FIXED: Reject meta-predicate meta-argument specifiers that are not currently supported.
  • Prolog adapter and integration files:
  • FIXED: Startup of Logtalk using the multi-threading version of XSB as the backend compiler.
  • Documentation:
  • ADDED: Library index.
  • IMPROVED: Documentation of the term-expansion, message printing, and question asking mechanisms in the User Manual.
  • IMPROVED: Documentation of the `expanding` built-in protocol.
  • IMPROVED: The documentation of the `bagof/3`, `setof/3`, and `findall/3-4` built-in methods no longer refer to the Prolog ISO standard.
  • Tools:
  • ADDED: Support for generating library indexes to the `lgtdoc` tool.
  • IMPROVED: The `help` tool to provide help also for library predicates and non-terminals and to open, respectively, the predicate index or the entity index when looking for help in non-existing predicates or entities.
  • FIXED: The `lgt2txt.sh` shell script to also convert the XML index files.
  • FIXED: Avoid polluting SWI-Prolog meta-predicate analysis with `lgtunit` private meta-predicates.
  • Tests:
  • ADDED: Tests for valid source file name variants to the `logtalk_load/1-2` and `logtalk_compile/1-2` built-in predicates.
  • IMPROVED: Tests for the `logtalk_load_context/2` built-in predicate.
  • IMPROVED: Tests for the `create_logtalk_flag/3` built-in predicate.
  • Installers and installation scripts:
  • FIXED: The installer and user setup scripts to copy the `tests-sample.lgt`

New in Logtalk 3.06.1 (Jun 20, 2016)

  • Logtalk compiler and runtime:
  • RENAMED: Threaded engine predicates `threaded_engine_stop/1` to `threaded_engine_destroy/1`, `threaded_engine_return/1` to `threaded_engine_yield/1`, and `threaded_engine_answer/2` to
  • `threaded_engine_next/2`. After discussion on engine APIs predicate naming with Paul Tarau and Jan Wielemaker. This renaming makes it easier to compare and port code between coroutining and threaded versions of engine APIs.
  • ADDED: Threaded engine predicate `threaded_engine_next_reified/2`. This predicate follows Lean Prolog convention of returning `the(Answer)`, `no`, and `exception(Error)` terms as answers.
  • Installers and installation scripts:
  • FIXED: The `logtalk` SWI-Prolog pack to load Logtalk silently.
  • Examples:
  • ADDED: Three new engines examples, `sums`, `whisper`, and `yield`, originally
  • written by Jan Wielemaker.

New in Logtalk 3.06.0 (Jun 13, 2016)

  • Logtalk compiler and runtime:
  • CHANGED: When adding a `begin/2` token to the list of tokens generated for printing a message, use the message kind term instead of just its functor.
  • ADDED: Threaded engines API. A threaded engine is a computing thread whose solutions can be lazily computed and retrieved. An engine also supports a term queue that allows passing arbitrary terms to an engine. Based on Paul Tarau's `engines` concepts.
  • ADDED: Support for specifying the `scratch_directory` flag value using library notation.
  • ADDED: By default, print information on how to get help using the `help` tool at Logtalk startup. Thanks to Anne Ogborn for the suggestion.
  • IMPROVED: Detection of missing `meta_predicate/1` directives.
  • IMPROVED: Compiler code cleanup and refactoring.
  • IMPROVED: The built-in predicates `threaded_call/1-2`, `threaded_once/1-2`, and `threaded_ignore/1` to avoid creating a thread if the goal argument is not callable at runtime.
  • FIXED: Regression when processing source file names with multiple periods. Thanks to Günter Kniesel for the bug report.
  • Prolog adapter and integration files:
  • UPDATED: SWI-Prolog adapter file to enable tabling support when using version 7.3.21 or later.
  • Documentation:
  • ADDED: Sample test suite file, `tests-sample.lgt`.
  • UPDATED: User and Reference manuals for the threaded engines API.
  • Tools:
  • UPDATED: The `help` tool for the threaded engines API built-in predicates.
  • IMPROVED: The `help` tool to use name completions and to print alternatives when there is more than a single match for a request for help on a predicate indicator or a non-terminal indicator.
  • IMPROVED: The `help` tool now prints the general instructions on how to get help when if an unknown message is sent to the `help` object.
  • ADDED: Predicates `file/1-2` to the `wrapper` tool.
  • IMPROVED: The `wrapper` tool now tries to expand file paths with the defined Prolog extensions if the file path as given is not found.
  • ADDED: Support for using the Logtalk pack for SWI-Prolog as a backend option to the `logtalk_tester.sh` automation script.
  • IMPROVED: The `logtalk_tester.sh` automation script now also prints the total number of tests sets and the number of completed tests sets.
  • FIXED: The `logtalk_tester.sh` automation script to not override any existing log messages when tagging a test suite as a timeout or a crash.
  • FIXED: Workaround the lack of support for process substitution in the Git for Windows provided Git Bash when using the `logtalk_tester.sh` automation script.
  • IMPROVED: The `lgtunit` tool to print an error message when an invalid test outcome is found while compiling tests using the `test/3` testing dialect.
  • FIXED: Regression in the `lgtunit` tool introduced in the previous release where an error in the added meta-predicate directives for local meta-predicates broke the `test/3` testing dialect.
  • Tests:
  • ADDED: Unit tests for the new threaded engines built-in predicates.
  • Examples:
  • RENAMED: Example `engines` to `carengines`.
  • ADDED: Set of examples, `engines`, illustrating using threaded engines and coroutining to implement fluents, lazy meta-predicates, interactors, and simple agents. Requires SWI-Prolog as the backend Prolog compiler.
  • ADDED: `blocks` example, a simpler version of the `bricks` example.
  • UPDATED: The `jpl` example with some benchmarks.
  • UPDATED: The `tabling` example to also run using SWI-Prolog as the backend compiler when using version 7.3.21 or later.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Syntax coloring and code completion support for the new threaded engines built-in predicates.
  • ADDED: Instructions for using GtkSourceView 3.x syntax highlighting support.
  • UPDATED: Sublime Text instructions for adding Logtalk editing support.
  • UPDATED: Instructions for adding syntax highlighting support to recent versions of the Gedit text editor.
  • FIXED: Make the external tools for the Gedit text editor executable.

New in Logtalk 3.05.0 (May 19, 2016)

  • Logtalk compiler and runtime:
  • ADDED: Support for `eos//0` as a built-in non-terminal.
  • ADDED: Detection and reporting of missing `meta_predicate/1` directives.
  • IMPROVED: Optimize the performance of calls to local meta-predicates.
  • FIXED: Bug in the `current_predicate/1` built-in method when a predicate is re-declared with a more restrictive scope where the overridden inherited declaration would still be found.
  • FIXED: Bug in the `predicate_property/2` built-in method where it would return a `no` meta-predicate template for a Logtalk built-in predicate that is not a meta-predicate (the atom `no` is part of the internal representation).
  • FIXED: Duplicated information when printing circular references using the `logtalk_make/1` built-in predicate (the duplicates occur when there are two or more references to the same entity in the same clause).
  • FIXED: Compiler bug that would result in duplicated runtime clauses when a file or entity initialization goal creates dynamic entities. Thanks to Anne Ogborn for the bug report.
  • FIXED: Compiler optimization bug that could convert a naked meta-variable into a call to `true/0`.
  • Prolog adapter and integration files:
  • ADDED: Tag the de facto standard `listing/1` Prolog predicate as a database predicate for all supported backend Prolog compilers.
  • Documentation:
  • IMPROVED: Documentation for the developer tools.
  • Library:
  • FIXED: Added missing `meta_predicate/1` directives for local predicates of some library entities.
  • Tools:
  • ADDED: Support to the `logtalk_tester.sh` automation script for specifying a path prefix to be suppressed when printing test suite and test results paths.
  • ADDED: Predicate `variant/2` to the `lgtunit` tool. Useful for checking expected test results that contain variables.
  • ADDED: Option `path_url_prefixes/3` to the `diagrams` tool to allow specifying code and documentation URL prefixes per path prefix. This option enables generating links (e.g. in SVG diagrams) to third-party libraries and other external resources.
  • ADDED: Support for `libraries/1`, `directory/1`, and `files/1` predicates to the `diagrams` tool.
  • ADDED: `file_extensions/1` option for use with the `diagrams` tool entity and file diagrams.
  • ADDED: Usage example for the `ports` tool.
  • IMPROVED: The `lgtunit` tool no longer uses an hard-coded limit for the predicates that check expected text/binary input/output. Although the limit was chosen to ensure portability (as some backend Prolog systems have small atom length limits), it also limited usage when using backend Prolog systems with no or more generous limits.
  • IMPROVED: The `wrapper` tool to give advise on `use_module/1-2`directives and better advise on `set_prolog_flag/2` directives.
  • IMPROVED: The `wrapper` tool support for parsing `:- [File| Files]` directives by filtering out those files that are already being advised.
  • FIXED: Bug in the `wrapper` tool where some predicate cross-referencing information would be ignored.
  • FIXED: The `logtalk_tester.sh` automation script to workaround bugs in some backend Prolog compilers handling of standard input that could result
  • in failures to recursively process all sub-directories.
  • FIXED: The `logtalk_tester.sh` automation script to use `LC_ALL=C` for all commands to ensure that test results sorting is not affected by user locale settings.
  • FIXED: The `logtalk_tester.sh` automation script to avoid false positives when detecting test suite timeouts and crashes.
  • FIXED: Bug in the `diagrams` tool where nodes for auxiliary predicate could be generated for entity predicate cross-referencing diagrams.
  • FIXED: The `diagrams` tool to generate correct links for external resources. Requires use of the new `path_url_prefixes/3` option.
  • FIXED: Bug in the `diagrams` tool where some predicate node captions would be missing when using the option `node_type_captions(true)`.
  • FIXED: Added missing `meta_predicate/1` directives for local predicates of the `debugger`, `lgtdoc`, and `lgtunit` tools.
  • Tests:
  • ADDED: Unit tests for the new `eos//0` built-in non-terminal.
  • ADDED: Unit tests for the `call//1-N` and `phrase//1` built-in non-terminals.
  • ADDED: Unit tests for the `current_predicate/1` method for predicate re-declaration semantics.

New in Logtalk 3.04.2 (May 3, 2016)

  • Logtalk compiler and runtime:
  • FIXED: Bug where the compiler could fail to detect some discontiguous predicates.
  • FIXED: Compilation of meta-arguments of calls to Prolog meta-predicates that are explicit-qualified module terms.
  • Prolog adapter and integration files:
  • FIXED: Definition of the `logtalk_make/1` shortcut `{?}` for Lean Prolog.
  • Documentation:
  • FIXED: Description of the search order for predicate definitions for class hierarchies in the User Manual.
  • Tools:
  • ADDED: Support to the `logtalk_tester.sh` automation script to pass user arguments to the integration script used to run the tests.
  • ADDED: Support for saving the generated wrapper objects for the advised files to the `wrapper` tool.
  • ADDED: Support to the `wrapper` tool for generating wrapper objects for a directory and all its sub-directories and for a list of directories.
  • IMPROVED: The `wrapper` tool to also print advise on `ensure_loaded/1` and `include/1` directives that should be removed.
  • IMPROVED: The `wrapper` tool to also print advise for called Prolog module predicates and to print warning for called but not defined predicates.
  • FIXED: Allow the `wrapper` tool to be extended for customization.
  • FIXED: The `diagrams` tool to avoid failures when using the utility `diagrams` object to batch generate diagrams using a method that not all types of diagrams support.
  • FIXED: The `lgtunit` tool to allow any test dialect to be defined as a fact when the test is skipped.
  • Tests:
  • ADDED: Determinism tests for the `object_property/2`, `protocol_property/2`, and `category_property/2` built-in predicates.

New in Logtalk 3.04.1 (Mar 16, 2016)

  • Logtalk compiler and runtime:
  • FIXED: Compiler bug where a predicate that is term-expanded by calling the `compile_aux_clauses/1` method could be misreported as discontiguous.
  • FIXED: Calls to the `threaded_notify/1` built-in predicate from within the `user` pseudo-object must not require a bound argument as per documentation.
  • FIXED: Calls to the `object_property/2` and `category_property/2` built-in predicates with `number_of_clauses/1` or `number_of_user_clauses/1` property arguments to be deterministic.
  • Prolog adapter and integration files:
  • UPDATED: The CxProlog adapter file to require version 0.98.1 or later as the new version fixes Prolog standard compliance issues.
  • Tools:
  • CHANGED: Renamed the objects/files `xunit_xml_report` and `xunit_xml_output` to, respectively, `xunit_report` and `xunit_output`.
  • CHANGED: The `lgtunit` objects `tap_report` and `xunit_report`no longer redirect the standard output stream to prevent tests output to corrupt the contents of generated TAP and XML files.
  • CHANGED: The `tap_output` object in the `lgtunit` tool no longer prints a dash between the test result and the test name.
  • ADDED: Support for a `see_also` key to the `info/1` entity documenting directive. Updated the `lgtdoc` tool to process this new key.
  • ADDED: The `logtalk_tester.sh` script now uses a timeout command, when available, to run each test set. It also accepts a timeout option to specify the timeout value (in seconds). By default, no timeout is used.
  • ADDED: The `logtalk_tester.sh` script now accepts a format option to allow writing test result files in either TAP or xUnit XML formats for use with continuous integration servers.
  • ADDED: The TAP output support for printing test notes starting with a `TODO` or `todo` word as a TODO TAP test directive.
  • IMPROVED: The sorting of keys in the directory, entity, and predicate indexes generated by the `lgtdoc` tool.
  • IMPROVED: The XSLT file that converts XML documenting files to Markdown to generate links for entity relations.
  • FIXED: The `lgtunit` tool to also ignore discontiguous predicate warnings for the `test/3` dialect.
  • FIXED: Bug in the `lgtunit` tool when tests results are redirected using
  • the `set_output/1` predicate and the a test uses the tool `set_text_output/1` and `check_text_output/1` predicates to check its output.
  • FIXED: Updated the TAP output support to write the test description before SKIP directives.
  • FIXED: Bug in the xUnit XML output format support where skipped test tags were not well-formed.
  • FIXED: Bug in the `lgtdoc` tool when displaying and linking to public non-terminals.
  • Tests:
  • ADDED: Unit tests for the `iso8601` library contribution taken from its documentation examples.

New in Logtalk 3.04.0 (Mar 7, 2016)

  • Logtalk compiler and runtime:
  • ADDED: A `info/2` documenting directive key, `remarks`, allowing grouping of general remarks about a predicate.
  • FIXED: The correcteness of `info/1` documenting directive `remarks` element were not checked.
  • FIXED: Bug in the `logtalk_load/2` built-in predicate when called with the `clean/1` option with a loader file where the option would be ignored.
  • FIXED: Property `alias/2` is also valid for protocols.
  • Prolog adapter and integration files
  • UPDATED: YAP adapter file for the new text encodings supported in its current git version.
  • UPDATED: SWI-Prolog adapter file to enable a solution for registering file loading dependencies when a Prolog file is used to load a Logtalk file using the `consult/1` or `load_files/1-2` predicates (requires the `swihooks.pl` file to be loaded as done by default by the integration
  • scripts). With the help of Jan Wielemaker.
  • Library
  • ADDED: Predicates `prefix/3` and `suffix/3` to the `listp` protocol and to the `difflist` and `list` objects.
  • Tools
  • CHANGED: The `lgtdoc` option names and the tag names used in the XML documenting files for readability and for accommodating the new features.
  • IMPROVED: URL-based edge names in diagrams generated by the `diagrams` tool are now also relative when using the `omit_path_prefixes/1` option.
  • ADDED: The `lgtunit` tool now also prints `tests_started` and `tests_ended` messages, empty by default, when starting and ending tests for use by entities providing alternative test results output.
  • ADDED: Support to the `lgtunit` tool to write or export unit test results in the TAP (Test Anything Protocol) output.
  • ADDED: Support to the `lgtunit` tool to export unit test results in the xUnit XML format.
  • ADDED: Support for generating directory, entity, and predicate indexes to the `lgtdoc` tool.
  • ADDED: Predicates `directory/1-2` and `rdirectory/1-2` to the `lgtdoc` tool for generating documentation for a directory or for a directory and all its sub-directories.
  • ADDED: Support for generating library loading and library dependency diagrams to the `diagrams` tool.
  • ADDED: Definitions for library nodes and library relations to the `diagrams` tool support for the DOT language.
  • ADDED: File loading diagrams support for the cases where Logtalk or Prolog source files are loaded from Prolog source files. Requires a backend Prolog compiler that tracks loading dependencies between files such as SWI-Prolog.
  • UPDATED: The `lgt2md.*` scripts to also generate an index file.
  • FIXED: Paths used in the Windows documenting batch files and scripts of the `lgtdoc` tool.
  • FIXED: Documenting of predicate aliases by the `lgtdoc` tool.
  • FIXED: Added missing Windows `lgt2md.bat` file to the `lgtdoc` tool.
  • FIXED: Bug in the `diagrams::all_files/1` predicate that resulted in a predicate declaration existence error.
  • FIXED: Bug in the `diagrams` tool predicate that adds link options to nodes that could result in non-instantiated node tooltips.
  • FIXED: Bug in the `diagrams` tool `rlibrary/1-2` predicates when checking for proper sub-libraries.
  • Tests
  • CHANGED: The `logtalk_tester.sh` POSIX shell script now recurses into all sub-directories of the current directory.
  • FIXED: The `logtalk_tester.sh` POSIX shell script now reports any crashes that occur when running a set of tests.
  • ADDED: Tests for the validity of explicit property queries to entities.
  • Examples
  • UPDATED: The `encodings` example to also load and test UTF-32 files when using YAP as the backend compiler.
  • UPDATED: The `named_databases` example with `db_once/2` and `db_listing/1` predicates.

New in Logtalk 3.03.0 (Feb 17, 2016)

  • Logtalk compiler and runtime:
  • ADDED: Support for a new `logtalk_make/1` target, `missing`, to list missing entities and predicates. Also available using the `{?}` shortcut.
  • ADDED: Support for a new `logtalk_make/1` target, `circular`, to list circular references (considering message sending goals) between pairs and trios of objects. Also available using the `{@}` shortcut.
  • IMPROVED: Append a directory hash to the intermediate Prolog file names to help avoiding file name collisions when collecting all the intermediate files in the same directory for embedding. Currently requires ECLiPSe, GNU Prolog, JIProlog, Quintus Prolog, SICStus Prolog, SWI-Prolog, XSB, or YAP as the backend compiler.
  • FIXED: Meta-predicate call optimization bug when a meta-argument is either a pre-compiled closure or a closure for a goal called in the context of the `user` pseudo-object. Also apply more strict error checking to closure meta-arguments.
  • FIXED: Pretty-printing of parametric object and parametric category identifiers in error and warning messages.
  • Prolog adapter and integration files:
  • UPDATED: CxProlog adapter file to require version 0.98.0 or later.
  • FIXED: Bug in the Qu-Prolog adapter file definition for the missing standard `term_variables/2` built-in predicate. Qu-Prolog version 9.7 or later is now required when using this backend compiler.
  • FIXED: When using SICStus Prolog, SWI-Prolog, or YAP as backend compilers, don't assume that Logtalk is loaded into the `user` pseudo-module.
  • ADDED: Support for library notation when using the SWI-Prolog hook predicate `prolog_edit:locate/3`.
  • IMPROVED: Simplified definition of the `user:prolog_load_file/2` SWI-Prolog hook predicate.
  • IMPROVED: Compute the set of defined Logtalk and Prolog extensions when using the SWI-Prolog hook predicate `user:prolog_load_file/2` instead of relying in fixed sets with just the default extensions.
  • FIXED: Support for the SWI-Prolog graphical tracer no longer assumes that Logtalk is loaded into the `user` pseudo-module. Also fixed display of the execution context for Logtalk goals.
  • Installers and installation scripts:
  • UPDATED: The `logtalk` SWI-Prolog pack now loads Logtalk into a `logtalk` module that exports all Logtalk built-in predicates and the shortcuts for loading and make features.
  • Documentation:
  • FIXED: Several typos in the User and Reference manuals.
  • Tests:
  • FIXED: Workaround an issue with operator parsing when testing the Logtalk `current_op/3` method using GNU Prolog as the backend compiler.
  • Examples:
  • FIXED: The `inheritance` example to workaround a conflict with SWI-Prolog `public` operator when using this backend compiler.
  • FIXED: The `logic` example to declare the used operators public and to use these declarations to ensure correcting parsing of the example unit tests.

New in Logtalk 3.02.2 (Dec 22, 2015)

  • Logtalk compiler and runtime:
  • FIXED: Error checking bug in lambda expressions using `true/0` as the lambda goal. Thanks to Boris Vassilev for the bug report.
  • FIXED: The `logtalk_make/1` predicate would succeed (after printing a warning message) when called with a non-instantiated or an invalid argument instead of failing.
  • Prolog adapter and integration files:
  • UPDATED: B-Prolog adapter file to recognize the built-in `time/1`meta-predicate.
  • Library:
  • ADDED: Objects `hook_pipeline/1` and `hook_set/1` to simplify using pipelines or sets of hook objects.
  • ADDED: Meta-predicates `fold_left_1/3`, `fold_right_1/3`, `scan_left_1/3`, and `scan_right_1/3` to the `metap` and `meta` entities. Also available using the `foldl1/3`, `foldr1/3`, `scanl1/3`, and `scanr1/3` aliases.
  • ADDED: The `metap` and `meta` entities now recognize `maplist/2-8` as aliases to the `map/2-8` meta-predicates.
  • Tools:
  • IMPROVED: Startup message when loading the `help` tool now also includes basic information on compiling and loading source files and debugging code.
  • Examples:
  • UPDATED: The `lambdas` example to also support running the benchmarks when using B-Prolog as the backend compiler. Added more unit tests.

New in Logtalk 3.02.1 (Nov 12, 2015)

  • Logtalk compiler and runtime:
  • IMPROVED: The runtime table entries for loaded files are now added to the generated intermediate Prolog files using a multifile predicate for a better embedding experience. Notably, it makes it easier to do incremental embedding.
  • IMPROVED: The make predicates now also reload the parent files of files with compilation or loading errors. This ensures that, when a faulty file aborts the compilation of all files in a loader file, the files listed after the faulty file will be compiled when the faulty file is fixed and the make predicates are called.
  • IMPROVED: Transformation of `once/1` goals to avoid adding a disjunction and resulting choice-point. Thanks to Jan Wielemaker and Abramo Bagnara for the suggestion and discussion on this subject.
  • ADDED: A `flags` key to the `logtalk_load_context/2` built-in predicate to access the list of explicit flags used in the compilation of a source file.
  • FIXED: Compilation of entity clauses and grammar rules using the soft-cut or if-then-else control constructs when the user defines goal-expansion clauses that add or remove `*->/2` or `->/2` goals. Thanks to Abramo Bagnara for the bug report and suggested patches. Thanks also to Jan Wielemaker for the discussion on this subject.
  • FIXED: Do not simplify a `(((If*->Then),true);Goal)` goal by removing the call to `true/0` as it would convert the disjunction into a soft-cut call with an else part.
  • FIXED: Bug in the database and reflection built-in methods when the messages are resolved at runtime to the pseudo-object `user`. Thanks to John Stewart for the bug report.
  • FIXED: Warning when embedding Logtalk in Lean Prolog.
  • Documentation:
  • ADDED: Small section on optimizing applications to the user manual section on Logtalk programming.
  • UPDATED: Settings examples.
  • Prolog adapter and integration files:
  • UPDATED: Lean Prolog 4.5.7 or a later version is now required when using this backend compiler.
  • Tests:
  • ADDED: Tests for the `goal_expansion/2` user-defined hook predicate when `->/2` goals are added or removed. Thanks to Abramo Bagnara for the test cases.
  • ADDED: Tests for the database and reflection built-in methods when the messages are sent to the pseudo-object `user`.
  • IMPROVED: Notes on the unit tests for the ISO Prolog standard `^/2` and `log/1` built-in functions. Thanks to Jan Burse for this contribution.
  • FIXED: Tests for the ISO Prolog standard `max/2` and `min/2` built-in functions. Thanks to Jan Burse for the bug report.

New in Logtalk 3.02.0 (Nov 2, 2015)

  • Logtalk compiler and runtime:
  • CHANGED: Local calls to the database methods from multifile predicate clauses defined in an object now take place in the object own database instead of the database of the entity holding the multifile predicate primary declaration. This change matches user expectations and also simplifies porting of modules and compilation of modules with multifile predicate clauses making these calls.
  • CHANGED: Local calls to the `expand_term/2` and `expand_goal/2` methods from a multifile predicate clause now look for clauses of the `term_expansion/2` and `goal_expansion/2` hook predicates starting from the entity defining the clause instead of the entity holding the multifile predicate primary declaration.
  • CHANGED: Local calls to the `current_predicate/1`, `predicate_property/2`, and `current_op/3` methods from multifile predicate clauses defined in an object now lookup predicates and their properties in the object own database instead of the database of the entity holding the multifile predicate primary declaration.
  • CHANGED: Local calls to `expand_term/2` and `expand_goal/2` methods from a category now look for clauses of the `term_expansion/2` and `goal_expansion/2` hook predicates in the category itself and its ancestors instead of starting the lookup from the object importing the category. This change simplifies semantics by eliminating counter-intuitive cases where local definitions of the hook predicates could be ignored depending on the object importing the category and the order of categories being imported by the object.
  • IMPROVED: Better coding style for the core multifile message predicate and non-terminal definitions.
  • FIXED: Cases where the compile-time goal expansion would not stop when reaching a fixed point as documented.
  • FIXED: Cases where the `expand_goal/2` built-in method would not stop when reaching a fixed point as documented.
  • FIXED: Passing execution context to calls to the `term_expansion/2` and `goal_expansion/2` hook predicates.
  • FIXED: Loading source files in mixed case when using backend Prolog compilers such as SWI-Prolog when running on Windows that down-case file names when expanding file paths into absolute file paths. Thanks to Damien Roch for the bug report.
  • FIXED: Static binding bug when using backend Prolog systems where Logtalk compiler/runtime predicates are marked as built-in predicates (e.g. ECLiPSe and GNU Prolog). This bug notably caused lambdas examples and unit tests to fail when running with the `optimize` flat turned on.
  • Prolog adapter and integration files:
  • CHANGED: JIProlog 4.1.2.8 or later version is now required as this version introduces support for the `directory_files/2` predicate and fixes a critical bug in the `atom_codes/2` predicate for the portable `os` library.
  • FIXED: Instruction on embedding Logtalk in a GNU Prolog generated executable.
  • FIXED: The ECLiPSe definitions of the internal predicates that check for file and directory existence to test the given path for the correct type.
  • FIXED: Lean Prolog adapter file internal predicate used by the compiler to read file terms to also accept an empty list of options.
  • FIXED: Quintus Prolog adapter file.
  • Documentation:
  • ADDED: Documentation on multifile predicate definition caveats.
  • Library:
  • FIXED: The ECLiPSe definitions used in the portable operating-system library for the internal predicates that create directories and check for file and directory existence to test the given path for the correct type.
  • FIXED: A spurious choice-point in the Lean Prolog `expand_path/2` predicate definition used in the portable operating-system library.
  • FIXED: Broken definition of the `delete_directory/1` predicate for Lean Prolog used in the portable operating-system library.
  • Tools:
  • IMPROVED: Better coding style for the tools multifile message predicate and non-terminal definitions.
  • Tests:
  • ADDED: Unit tests for the `expand_term/2` and `expand_goal/2` built-in methods.
  • ADDED: Unit tests for the `goal_expansion/2` and `term_expansion/2` hook predicates.
  • UPDATED: Unit tests for the `multifile/1` directive, removing some redundant tests and adding tests for checking semantics of local calls to the database methods from multifile predicate clauses defined in objects.
  • UPDATED: Unit tests for the `current_predicate/1`, `predicate_property/2`, and `current_op/3` reflection methods to also test local calls from multifile predicate clauses.
  • UPDATED: Unit tests for the `expand_term/2` and `expand_goal/2` methods to also test local calls from multifile predicate clauses.
  • Examples:
  • IMPROVED: The `expansion` example with a better definition for a term- expansion pipeline and with a definition for a goal-expansion pipeline.
  • FIXED: Changed the name of a sub-directory used by the `cc` example unit tests to workaround an issue with the ECLiPSe built-in predicate used for expanding file paths.
  • FIXED: Workaround a syntax error when using XSB as the backend Prolog compiler with the `wrappers` example.

New in Logtalk 3.01.2 (Oct 19, 2015)

  • Logtalk compiler and runtime:
  • IMPROVED: The `conforms_to_protocol/2-3` built-in predicates are now deterministic when called with the first two arguments bound.
  • FIXED: Regression in the previous release when dynamically creating a complementing category at runtime.
  • FIXED: Cases where compiler warnings would be printed with incorrect line numbers.
  • FIXED: Bug where a conflict between a predicate specified in a `uses/2` or a `use_module/2` directive and a local defined predicate would not be reported by the compiler.
  • FIXED: Minor performance bug when compiling `::/2` calls in the general case where access to the execution context is not required by the predicate making the call.
  • Prolog adapter and integration files:
  • FIXED: Some typos in the SWI-Prolog integration files in declarations for internal Logtalk predicates that should be hidden when using the XPCE profiler and XPCE graphical debugger.
  • Documentation:
  • CHANGED: The shell script that generates the HTML documentation for the core, library, and tool entities now saves the generated files in the `docs` directory parallel to the `scripts` directory.
  • ADDED: Shell script to generate SVG inheritance diagrams for the core entities, the library, and the development tools.
  • ADDED: The `docs` directory now includes SVG inheritance diagrams for the core entities, the library, and the development tools.
  • IMPROVED: Documentation on hot patching using complementing categories.
  • IMPROVED: Documentation of the term- and goal-expansion built-in methods.
  • Library:
  • CHANGED: The `os` library object support for SWI-Prolog now uses the `stamp_date_time/3` predicate instead of the deprecated `convert_time/8` predicate in the implementation of the portable `date_time/7` predicate.
  • ADDED: Predicate `directory_files/2` to the portable `os` library. This predicate is available for all supported backend Prolog compilers with the exception of Qu-Prolog.
  • Tools:
  • IMPROVED: When printing code coverage results by the `lgtunit` tool, a list of covered clauses is only printed when there are uncovered predicate clauses.
  • ADDED: Two benchmark predicates, `benchmark/2-3`, to the `lgtunit` tool.
  • ADDED: Predicates to the `wrapper` prototype tool to provide advise for files in a given directory.
  • FIXED: The `wrapper` prototype tool to properly handle `multifile/1` and `dynamic/1` directives specifying more than one predicate.
  • FIXED: Bug in the `lgtunit` tool where variable sharing between the options argument of the `test/3` dialect and the test goal would not be preserved.
  • Examples:
  • CHANGED: Skip the `jpl` example unit test that requires Java AWT as running this test on Mac OS X on the command-line can result in the test hanging due to a Java limitation on this operating-system where the AWT cannot be started when the Apple AWT Java VM was loaded on the first thread.
  • CHANGED: The unit tests of the `localizations` example to check instead the final text output. This allows the tests to also succeed in debug mode by working around a limitation on the definition of multifile predicate clauses.
  • ADDED: IBAN validation example, from a contribution to the Rosetta Code website, to the `dcgs` example.
  • UPDATED: The `expansion` example to illustrate how to define a pipeline of hook objects.
  • UPDATED: The `complements` example to illustrate using a dynamically created complementing category to patch an object. IDEs, text editors, and syntax highlighters support
  • UPDATED: The `ctags` support to also recognize module opening directives plus dynamic, meta-predicate, and multifile predicate directives.

New in Logtalk 3.01.1 (Oct 1, 2015)

  • Logtalk compiler and runtime:
  • IMPROVED: Allow a complementing category to take preference over a previously loaded complementing category for the same object. As this is accomplished with changes to both the compiler and the code generated from the compilation of source files, it requires recompilation of existing source code.
  • FIXED: Missing support for the compilation categories declaring implementing, extending, and complementing relations.
  • FIXED: Bug in the `predicate_property/2` reflection predicate where a second `number_of_clauses/1` property could be returned when an object predicate is replaced using a complementing category.
  • Prolog adapter and integration files:
  • IMPROVED: The SWI-Prolog adapter file now includes a `license/2` directive to allow this system `eval_license/0` predicate to take into account Logtalk when loaded.
  • IMPROVED: Faster internal predicate for decomposing file paths for the Ciao, CxProlog, Qu-Prolog, Quintus Prolog, and SICStus Prolog backend compilers.
  • Library:
  • ADDED: Predicate `decompose_file_name/4` to the `os` library.
  • Tools:
  • NEW: Simple experimental tool for helping porting plain Prolog code.
  • ADDED: Missing `retry` trace option for the `debugger` tool.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Complementing category snippet to the Gedit and TextMate 2.x text editors.
  • ADDED: Demo and spec files for completing the Rouge syntax highlighter support.
  • Tests:
  • ADDED: Tests for the new `os::decompose_file_name/4` library predicate.
  • UPDATED: Tests for categories opening directive syntax.
  • Examples:
  • ADDED: Version of the classical family relations example.

New in Logtalk 3.01.0 (Sep 13, 2015)

  • CHANGED: Logtalk is now distributed under the Apache License 2.0. This license change is kindly sponsored by Kyndi Inc.

New in Logtalk 3.00.7 (Sep 4, 2015)

  • Logtalk compiler and runtime:
  • NEW: Generate a `begin_of_file` term when compiling a source file. This term can be used by the term-expansion mechanism for adding a wrapper for the file code. When the first term of a source file is an `encoding/1` directive, the `begin_of_file` term will be generated after processing this directive.
  • CHANGED: Allow component names to be any non-variable terms when using the message printing and question asking mechanisms (documentation-only change).
  • CHANGED: Renamed the `logtalk::question_hook/5` user-defined predicate to `logtalk::question_hook/6` by adding a tokens argument to simplify usage.
  • CHANGED: The `logtalk::ask_question/5` predicate no longer requires also defining the `logtalk::message_hook/4` predicate for the question text itself when intercepting questions.
  • IMPROVED: When using the question asking mechanism, default to the `question` kind when there isn't neither a user or a default prompt and stream defined for the question kind.
  • FIXED: Passing an invalid directive to the built-in `create_object/4`, `create_protocol/3`, and `create_category/4` predicates would fail instead of throwing an error as expected.
  • FIXED: Propagation of syntax errors in included files.
  • FIXED: Singleton variables in included file terms would result in failed compilation when dynamically creating an entity.
  • Prolog adapter and integration files:
  • ADDED: Updated the Lean Prolog adapter file with support for using `index/1` directives in objects and categories.
  • Documentation:
  • IMPROVED: Section on contributions on the `README.md` file.
  • FIXED: Document a limitation on using some of the `logtalk_load_context/2` keys when performing goal-expansion.
  • Library:
  • FIXED: Added library files missing in the previous stable release: `assignvars.txt`, `assignvarsp.lgt`, `nd_assignvars.lgt`, and `assignvars_loader.lgt`.
  • Tools:
  • FIXED: Bug in the `diagrams` tool when using SICStus Prolog as the backend compiler that would result in an unexpected error.
  • FIXED: Minor bug in the `debugger` tool where asking for the compiled form of a cut will print `true` instead of a cut.
  • FIXED: Minor layout bug (missing space) in the `debugger` tool when printing exit ports while using backend Prolog systems not providing a solution to find if a call is deterministic.
  • FIXED: Added missing entries to the `help` tool for the message printing and question asking mechanisms predicates and for the coinduction hook predicates.
  • Tests:
  • ADDED: Unit tests for the `bagof/3` and `setof/3` standard predicates for testing the use of multiple existential variables.
  • ADDED: Unit test for the `numbervars/3` de facto standard predicate for testing the use of a negative integer for the start index.
  • ADDED: Another unit test for the `ground/1` standard predicate.
  • Examples:
  • ADDED: Example of using the new `begin_of_file` term generated when compiling a source file to define object wrappers for plain Prolog code.
  • ADDED: Simple example of supporting application localization in multiple natural languages.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Notes on using the Atom multiple platform text editor for Logtalk coding.
  • ADDED: Support for the Rouge syntax highlighter (used by e.g. GitLab).
  • ADDED: Syntax highlighting test for using a backslash in a quoted atom.

New in Logtalk 3.00.6 (Aug 4, 2015)

  • Logtalk compiler and runtime:
  • FIXED: Protocol and category operators declared using a scope directive would not be listed as entity properties.
  • FIXED: Bug in the processing of conditional compilation directives when using embedded `if/1` directives.
  • FIXED: Compiler spurious choice-point when compiling an `info/2` directive.
  • Prolog adapter and integration files:
  • FIXED: Updated the Lean Prolog adapter file with hacks for some missing standard input/output predicates.
  • FIXED: Restored the dummy definitions of the `setup_call_cleanup/3` predicate in the adapter files of GNU Prolog and Lean Prolog to avoid issues when embedding Logtalk.
  • FIXED: Workaround an apparent GNU Prolog `gplc` command bug that prevented creating an executable that embeds Logtalk.
  • Library:
  • CHANGED: Added an `assignvarsp` protocol. Converted the `assignvars` category into an object implementing this protocol. Added an alternative `assignvars` object providing a faster implementation for most backend Prolog compilers. Added an `assignvars_loader` loader file that selects the version of the `assignvars` object to load depending on the backend Prolog compiler.
  • Examples:
  • IMPROVED: Performance of the `assignvars` example.
  • FIXED: Added missing `logtalk_library_path/2` predicate entry for the new `patches` example.
  • Tests:
  • ADDED: Several more tests for the conditional compilation directives.
  • FIXED: A `current_op/3` predicate test to avoid syntax errors with some backend Prolog compilers.

New in Logtalk 3.00.5 (Jul 28, 2015)

  • Logtalk compiler and runtime:
  • CHANGED: Super calls from predicates defined in complementing categories now lookup inherited definitions as if the calls were made from the complemented object instead of the category ancestors, thus allowing more comprehensive object patching.
  • FIXED: Instantiation error instead of the expected error when the user tries to redefine the `call/2-N` built-in methods.
  • FIXED: Workaround a Lean Prolog parser bug that resulted in a syntax error when loading the Logtalk compiler/runtime.
  • Prolog adapter and integration files:
  • FIXED: Workaround a B-Prolog bug where the `read_term/3` predicate returns a `line_counts/2` term property where the lines are returned end line first.
  • FIXED: Workaround a Lean Prolog `read_term/6` predicate issue where the returned term begin line is offset by one.
  • Documentation:
  • IMPROVED: Document know issues in the `debugger` tool when trying to use line number spy points with some backend Prolog compilers.
  • IMPROVED: Several User Manual sections including categories, documenting, debugging, migration, and on calling non-standard Prolog meta-predicates.
  • IMPROVED: Added some missing glossary entries and improved some of the existing ones.
  • IMPROVED: Added "see also" sections to several Reference Manual pages.
  • FIXED: Typos in the templates of the abolish object/category and event handling built-in predicates.
  • FIXED: Reference Manual description of the conditions where the `self/1`, `sender/1`, and `this/1` built-in methods are compiled inline.
  • FIXED: Completed the descriptions of several directives in the Reference Manual that can also take module explicit-qualified arguments.
  • FIXED: Missing Reference Manual page for the `create_logtalk_flag/3` built-in predicate.
  • Installers and installation scripts:
  • UPDATED: The Windows installer to also detect ECLiPSe 6.2 (the current development version).
  • Tools:
  • CHANGED: The `debugger` predicate `debugging/1` can now also enumerate, by backtracking, all entities compiled in debug mode.
  • FIXED: Workaround a `debugger` issue when using JIProlog as the backend Prolog compiler with the `get_code/1` predicate returning EOF when called from the console.
  • Examples:
  • ADDED: Another hot patching example, `patches`, illustrating the changes in this release for the compilation of super calls in complementing categories.

New in Logtalk 3.00.4 (Jun 23, 2015)

  • Logtalk compiler and runtime:
  • FIXED: Regression in the compilation of source file level `multifile/1`, `discontiguous/1`, and `dynamic/1` directives.

New in Logtalk 3.00.3 (Jun 22, 2015)

  • Logtalk compiler and runtime:
  • IMPROVED: Minor compiler optimizations and documentation fixes.
  • FIXED: Accept source file level `multifile/1`, `discontiguous/1`, and `dynamic/1` directives whose argument includes explicit module-qualified predicate indicators.
  • FIXED: Don't try to expand goals wrapped using the `{}/1` control construct when compiling `initialization/1`, `if/1`, and `elif/1` directives.
  • Prolog adapter and integration files:
  • UPDATED: JIProlog 4.0.18 or a later version is now required as this version introduces support for the standard `discontiguous/1` directive.
  • Tools:
  • CHANGED: Some of the messages used by the `lgtunit` tool have an additional argument to pass a user-defined per unit or per test annotation.
  • ADDED: Support for a `condition/0` predicate to the `lgtunit` tool to test if some necessary condition for running a test unit holds.
  • ADDED: Support for a `note/1` predicate to the `lgtunit` tool to define a note to be printed after test results.
  • ADDED: Support for a `test/3` unit test dialect to the `lgtunit` tool to allow specification of per test notes and condition, setup, and cleanup goals.
  • IMPROVED: Minor performance optimizations for the compilation of test files.
  • Tests:
  • CHANGED: Tests for the standard `get_char/2`, `get_code/2`, `peek_char/2`, and `peek_code/2` predicate related to checking of the output argument are no longer skipped.
  • CHANGED: The test for the standard `(?-)/1` operator is no longer skipped.
  • FIXED: Tests for the standard `char_code/2`, `get_char/2`, `get_code/2`, `peek_char/2`, and `peek_code/2` predicates that check if a Prolog system can either represent the character zero or generates the expected exception otherwise. Thanks to Ulrich Neumerkel for the bug report.
  • FIXED: Tests for the standard `sort/2` predicate where term equality was not being used to check test results. Thanks to Ulrich Neumerkel for the bug report.
  • FIXED: Test for the standard `clause/2` predicate that assumed that static predicates cannot be inspected. Thanks to Jan Wielemaker for the bug report.
  • Examples:
  • FIXED: The `jpl` example solution for detecting the presence of the JPL library when using recent SWI-Prolog releases.

New in Logtalk 3.00.2 (May 28, 2015)

  • Logtalk compiler and runtime:
  • CHANGED: Read-only `prolog_conformance` flag possible values to `strict` (for Prolog compilers claiming strict standards conformance) and `lax` (for Prolog compilers claiming only broad standards conformance).
  • ADDED: A `create_logtalk_flag/3` built-in predicate for creating new flags. Based on the specification of the `create_prolog_flag/3` built-in predicate of SWI-Prolog.
  • IMPROVED: When printing warning and error line numbers, write "at or above" instead of "above" when the culprit term begin and end lines are the same.
  • Prolog adapter and integration files:
  • ADDED: Instructions on creating a `logtalk.jar` file for embedding Logtalk in JIProlog.
  • UPDATED: The JIProlog adapter file now sets the `unknown` flag to `error` and includes other updates for recent changes, notably related to standard conformance fixes. JIProlog 4.0.14 or a later version is now required.
  • UPDATED: The JIProlog and Lean Prolog to also accept the `US-ASCII` text encoding in addition to `UTF-8`.
  • UPDATED: The SICStus Prolog adapter file to only define the predicate `setup_call_cleanup/3` if not already defined. Also changed the definition to make make the setup goal call deterministic.
  • UPDATED: The CxProlog, XSB, and SICStus Prolog adapter files with a more compliant `setup_call_cleanup/3` implementation.
  • UPDATED: The Qu-Prolog adapter file with workarounds for the missing `get_byte/1-2` and `put_byte/1-2` standard predicates.
  • Tools:
  • ADDED: Two predicates, `set_text_input/3` and `set_binary_input/3`, to the `lgtunit` tool to allow passing extra options to the implicit calls to the `open/4` built-in predicate.
  • IMPROVED: API documentation of the `lgtunit` tool.
  • UPDATED: The `debugger`, `lgtunit`, and `ports` tools now also support checking for deterministic calls when using JIProlog as the back-end compiler.
  • FIXED: The `lgtunit` tool now interprets `test/2` and `succeeds/1` facts as defining tests whose test goal is `true/0`. These tests, which always succeed, usually occur when using conditional compilation directives to select which versions of the tests to run.
  • Tests:
  • IMPROVED: The `logtalk_tester.sh` POSIX shell script now also prints the batch testing ending date and time.
  • CHANGED: The Prolog conformance tests no longer use the `prolog_conformance` flag. Instead, alternative test results are accepted if reasonable although not strictly compliant.
  • CHANGED: Tests for the `get_byte/2`, `get_char/2`, `get_code/2`, `peek_byte/2`, `peek_char/2`, `peek_code/2`, and `read_term/3` that check for the correct exception term when reading past the end of a stream to use the `eof_action(error)` stream option explicitly as not all Prolog implementations default to this option.
  • ADDED: Several tests contributed by the ECLiPSe developers for extended coverage of the Prolog conformance suite.
  • ADDED: Tests for byte, character, code, and term input and output predicates for checking error terms when using stream aliases.
  • ADDED: Tests for the `get_byte/2`, `get_char/2`, `get_code/2`, `peek_byte/2`, `peek_char/2`, `peek_code/2`, and `read_term/3` that check behavior when reading past the end of a stream created using the `eof_action(eof_code)` stream option.
  • ADDED: Missing unit tests for the Prolog standard `throw/1` control construct.
  • ADDED: Unit tests for the de facto Prolog standard `between/3`, `findall/4`, `forall/2`, and `numbervars/3` built-in predicates.
  • ADDED: Tests for the Prolog standard `compare/3` built-in predicate for helping detect number casting and standard order bugs.
  • ADDED: Additional test for the Prolog standard `catch/3` control construct to check that a non-instantiated goal argument doesn't escape the `catch/3` call.
  • ADDED: Several missing unit tests for arithmetic functions.
  • ADDED: Missing tests for error conditions of the `asserta/1`, `assertz/1`, `clause/2`, `retract/1`, `retractall/1`, `call/2-8`, `open/4`, `atom_chars/2`, `atom_codes/2`, and `number_codes/2`, predicates.
  • ADDED: Tests for the soft-cut control construct, `(*->)/2`, which is slowly becoming a de facto standard. The tests are only run when using Prolog systems that provide this control construct.
  • ADDED: Tests for the `setup_call_cleanup/3` predicate, contributed by SWI-Prolog. The tests are only run when using Prolog systems that provide this predicate.
  • FIXED: Tests for the de facto standard `between/3` predicate for XSB.
  • FIXED: Changed the auxiliary predicates used in testing standard arithmetic functions to avoid getting instantiation errors instead of the expected type errors when using back-end Prolog compilers that apply a bottom-up evaluation to function arguments before checking that the functions themselves are valid. Thanks to Jan Wielemaker for the bug report.
  • FIXED: Unit test for the standard `number_codes/2` predicate to accept both the standard mandated and an alternative (and more consistent) exception term that is generated by several Prolog systems.
  • FIXED: Two `set_stream_position/2` tests that could trigger two different errors depending on the order of argument checking. Thanks to Jan Wielemaker
  • for the bug report.
  • FIXED: Several `call/N` tests to also accept exception terms with module qualification for non-callable terms. Thanks to Jan Wielemaker for the bug report.
  • Installers and installation scripts:
  • FIXED: Missing `settings.lgt` file in the SWI-Prolog logtalk pack.

New in Logtalk 3.00.1 (Feb 25, 2015)

  • Logtalk compiler and runtime:
  • CHANGED: The `logtalk_compile/2` and `logtalk_load/2` built-in predicates now throw a `compiler_flag` domain error instead of a `compiler_option` for consistency.
  • ADDED: Entity property `source_data`. True when the entity was compiled with the `source_data` flag turned on.
  • ADDED: Entity property `alias/2`. The first argument is the predicate alias and the second argument is a list of alias properties. The valid properties are: `for/1` (the original predicate), `from/1` (the entity referenced in the `alias/2` directive), `line_count/1` (the start line number of the `alias/2` directive), and `non_terminal/1` (the alias is specified as a non-terminal). The non-terminal and line number information are only available when compiling with the `source_data` flag turned on).
  • ADDED: Predicate properties `alias_declared_in/1` and `alias_declared_in/2`, similar to the `declared_in/1` and `declared_in/2` properties but for predicate aliases, when defined. The second property is only available when compiling with the `source_data` flag turned on.
  • ADDED: Definition for the `startup` library alias, corresponding to the Logtalk startup directory, to the `paths/paths.pl` file.
  • IMPROVED: Print a warning when an `encoding/1` directive is the first term as required but not located in the first source file line.
  • IMPROVED: The compiler now also generates `calls/2` entity properties for `uses/2` and `use_module/2` directives as their compilation generates auxiliary linking clauses calling the referenced predicates to cope with runtime constructed goals.
  • IMPROVED: Print a more informative message when an unexpected error occurs while loading an intermediate Prolog file generated by the compilation of a source file (these errors usually result from bugs in the used backend Prolog compiler).
  • IMPROVED: Minor performance optimization to the compilation of `::/2` goals.
  • IMPROVED: Minor compiler performance optimization thanks to caching of default and read-only flags at startup.
  • IMPROVED: Compiler performance when generating entity prefixes and internal predicate functors.
  • FIXED: Long standing bug where the values of the `startup`, `logtalk_home`, and `logtalk_user` library aliases would change depending on the current working directory when the corresponding environment variables are not defined.
  • FIXED: Compiling a `use_module/2` directive listing a meta-predicate with a non-supported meta-argument specifier could result in a stack overflow error instead of the expected domain error.
  • FIXED: Bug where the `debugging` entity property would always be false for categories and protocols.
  • FIXED: Potential bug in the rare case where a category complements two or more objects.
  • FIXED: Compiler performance bug where plain Prolog clauses in source files would be type-checked twice.
  • Prolog adapter and integration files:
  • REMOVED: Definitions for internal current date, current time, and CPU time from all supported adapter files as access to this information is currently handled by the portable operating-system library.
  • ADDED: POSIX integration shell script and Windows integration shortcut for JIProlog.
  • UPDATED: GNU Prolog adapter file to set the `modules` flag depending on the presence of a native module system.
  • UPDATED: JIProlog adapter file for changes in version 4.0.6. Fixed a bug in the internal predicate for decomposing paths when the a file basename contains two or more dots.
  • FIXED: Definition for the missing `subsumes_term/2` standard predicate in the adapter files for CxProlog and Qu-Prolog for conformance.
  • Library:
  • FIXED: Definition of the predicate `os::wall_time/1` for Quintus Prolog, SICStus Prolog, SWI-Prolog, and YAP.
  • FIXED: Definitions of the predicates `os::date_time/7` and `os::cpu_time/1` for JIProlog.
  • Installers and installation scripts -----------------------------------
  • ADDED: Support files for creating a `logtalk` SWI-Prolog pack.
  • FIXED: Bug in the MacPorts portfile in the post-activate step while updating the freedesktop.org shared MIME-info database.
  • FIXED: Updated the `build_release.sh` to not compress the Mac OS X Installer package using the `zip` command-line command as it results in a ZIP archive that creates a hierarchy of directories when uncompressed to hold the package instead of simply writing it out to the current directory.
  • Documentation:
  • CHANGED: All references to "compiler option" to "compiler flag" for consistency.
  • ADDED: POSIX man page for the new `jiplgt` integration script.
  • ADDED: User Manual section on reserved predicates names.
  • IMPROVED: Manual sections on the `uses/2` and `use_module/2` directives, on the control constructs, on the `logtalk_make/0-1` built-in predicates, and on the `hook/1` compiler flag.
  • Tools:
  • UPDATED: The `debugger` tool for compatibility with JIProlog.
  • UPDATED: The `help` tool for compatibility with Quintus Prolog.
  • Tests:
  • ADDED: More unit tests for the ISO Prolog standard term comparison built-in predicates, in particular to test standard term order.
  • Examples:
  • ADDED: Expanded the `includes` example with a simple implementation of a persistent object database using the `includes/1` directive.
  • ADDED: The `jpl` example now includes some GUI examples adapted from examples found in the JPL distribution.

New in Logtalk 3.00.0 (Jan 7, 2015)

  • Logtalk compiler and runtime:
  • IMPROVED: Changes to the term tags used when writing compiled code to help minimize the size of the generated intermediate Prolog files that use those tags to decide when to decorate compiled terms with source location data (currently, only SWI-Prolog takes advantage of the location data).
  • FIXED: A file can have more than one parent file.
  • Prolog adapter and integration files:
  • FIXED: Using the SWI-Prolog graphical tracer for debugging Logtalk source
  • code.
  • FIXED: Bug in the term-expansion of message-sending calls made from within Prolog modules when using SWI-Prolog or YAP as the backend compiler where a broken warning message could be printed when the object receiving the message was not yet loaded.
  • Documentation:
  • UPDATED: The POSIX integration script man pages with details on the Prolog executable name requirements.
  • Library:
  • REMOVED: The deprecated `event_handlersp` protocol, replaced by the built-in `monitoring` protocol.
  • Tools:
  • IMPROVED: When generating predicate call cross-referencing diagrams, the
  • `diagrams` tool now uses different colors for public, protected, private,
  • multifile, and exported predicate nodes.
  • IMPROVED: When generating predicate call cross-referencing diagrams, the
  • `diagrams` tool can now print scope, `multifile`, `dynamic` and 'synchronized` properties in predicate node captions.
  • IMPROVED: When printing object node captions, the `diagrams` tool now
  • distinguishes between objects that have only either instantiation or
  • specialization relations and objects that have both instantiation and
  • specialization relations. Also, the tool can now print `built_in` and
  • `dynamic` properties in entity node captions.
  • FIXED: Cleanup `diagrams` tool code for recent changes to supported entity directives and properties.
  • IDEs, text editors, and syntax highlighters support
  • ADDED: Snippet for extended categories to the TextMate 2 text editor.

New in Logtalk 3.00.0 RC 9 (Dec 20, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: The compiler now uses a new internal predicate, defined in the
  • Prolog adapter files, to output all compiled source file terms. This predicate
  • allows passing source file location data for the compiled terms (currently,
  • only SWI-Prolog takes advantage of this data, which is used for adding support for debugging Logtalk source code using its graphical tracer).
  • ADDED: Entity `file/1` property for accessing the absolute path of the source file defining the entity (if applicable).
  • IMPROVED: Compiler performance improvements. Notably, when compiling source files with the `source_data` flag turned on (e.g. compilation of the standard library now requires less 31% of inferences).
  • FIXED: Use `warning(missing_directives)` message kind when printing warning messages for missing directives.
  • FIXED: Only save multifile predicate definition source data when the flag
  • `source_data` is turned on.
  • FIXED: Valid protocol properties no longer include `number_of_clauses/1`,
  • `number_of_user_clauses/1`, and `calls/2` properties as protocols no longer
  • support `initialization/1` directives that would justify those properties.
  • FIXED: Bug where the `defines/2` property would never be returned for
  • dynamically created entities.
  • FIXED: Bug where the `number_of_clauses/1` property would also be returned for dynamically created entities.
  • FIXED: Bug where a `number_of_clauses(0)` property would not be returned for declared predicates with no clauses.
  • FIXED: Compiler bug when saving cross-referencing information for calls to
  • module predicates when the module is only known at runtime.
  • Prolog adapter and integration files:
  • CHANGED: When using SWI-Prolog as the backend compiler, a new Prolog flag, `logtalk_source_location_data`, whose default value is `false`, controls the output of source location data when writing the intermediate Prolog files
  • generated by the compilation of Logtalk source files. Setting this flag to
  • `true` is required for integration with some SWI-Prolog developer tools such
  • as the graphical tracer. See the `settings-sample.lgt` file for details.
  • Documentation:
  • ADDED: Detailed description of supported object, protocol, and category
  • properties to the User Manual.
  • IMPROVED: Description of the supported entity predicate properties in the
  • User Manual.
  • Tools:
  • FIXED: The `dump_trace` utility object to also redirect debugger tracing
  • messages that have a maximum term write depth argument.

New in Logtalk 3.00.0 RC 8 (Dec 10, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: Sanctioned syntax for directives is now enforced. In particular,
  • predicate scope directives and entity relations specified in entity opening
  • directives are restricted to a single argument (which can be, as always, a
  • single item, a list of items, or a comma-separated sequence of items).
  • CHANGED: Set the `dynamic_declarations`, `complements`, and `events` flags
  • to `deny` for the `logtalk` built-in object. The `events` flag change is of
  • no consequence as this object doesn't send messages to other objects. The
  • change to the `complements` flag enables the use of static binding when
  • sending messages to this object. The change to the `dynamic_declarations`
  • flag aims to prevent conflicts with user added predicates when this object
  • is eventually updated.
  • FIXED: Set the `complements` flag to deny for the `user` pseudo-object as
  • this object cannot make use of complementing categories.
  • FIXED: Always generate events for messages sent by the `user` pseudo-object
  • (including messages sent at the top-level interpreter) for consistency with
  • this object definition which sets the `events` flag to `allow`. Also note that
  • the per-entity value of this flag is read-only and fixed at compile time.
  • FIXED: Case where a type error would be generated instead of the expected
  • instantiation error when passing a non-ground file argument to the compilation
  • and loading predicates.
  • FIXED: Case where duplicated warnings for missing `dynamic/1` directive for
  • the same predicate could be printed.
  • FIXED: Compiler optimization bug when removing redundant calls to `true/0`.
  • In the special case of simplifying a `(((If->Then),true);Goal)` goal, removing
  • the call to `true/0` would wrongly convert it into an if-then-else goal. Thanks
  • to David S. Warren for an enlightening discussion regarding this issue in XSB
  • that helped uncover this bug also in Logtalk.
  • FIXED: Restored support for using a list or a sequence of entity identifiers
  • as argument to entity relations in entity opening directives.
  • Prolog adapter and integration files:
  • CHANGED: SWI-Prolog version 6.6.0 or later is now required when using this
  • backend compiler (notably, to cope with changes in operating-system access
  • predicates that are used by the library).
  • Library:
  • FIXED: Issues with relative paths and paths with environment variables with
  • some backend Prolog compilers in the `os` library. For consistent behavior,
  • all paths are now expanded before calling the native backend Prolog compiler
  • operating-system access predicates.
  • FIXED: Added missing definitions for the predicate `os::file_permission/2`
  • for the CxProlog, ECLiPSe, Lean Prolog, and Qu-Prolog compilers.
  • FIXED: Loader file `dates_loader.lgt`, which used the wrong location for
  • loading the `os_loader.lgt` file.
  • FIXED: Definition of the `os::command_line_arguments/1` predicate for
  • B-Prolog, Quintus Prolog, and SWI-Prolog.
  • Tools:
  • FIXED: Loading failure of the `lgtdoc` tool when using B-Prolog as the
  • backend compiler due to this compiler atom size limit.
  • FIXED: An issue in the `logtalk_tester.sh` POSIX shell script when grepping
  • results in files that are guessed as binary files.
  • Tests:
  • ADDED: Unit tests for syntax variants of entity opening directives.
  • ADDED: Prolog conformance unit test for the if-then-else control construct
  • for checking for correct semantics when a cut is found in the condition part.
  • Added after discussion with David S. Warren about a likely typo in a similar
  • standard example.
  • Examples:
  • IMPROVED: Minor code cleanup of the `bricks` example.
  • FIXED: Updated examples to use only sanctioned syntax for entity opening
  • directives.

New in Logtalk 3.00.0 RC 7 (Dec 2, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: The compiler now generates more informative exception terms when
  • an invalid `encoding/1` directive is found.
  • IMPROVED: The compiler now generates a warning when finding and ignoring an
  • `encoding/1` directive that is not the first term in a source file.
  • IMPROVED: The compiler nows performs basic error checking of file-level
  • `dynamic/1` and `discontiguous/1` directives.
  • IMPROVED: When the `portability` flag is set to `warning`, the compiler now
  • reports the use of non-standard file-level directives.
  • IMPROVED: Generate more compact code for the special case of standalone
  • objects with no local predicate declarations and compiled with disabled
  • support for complementing categories and dynamic predicate declarations.
  • CHANGED: Thread goal existence error term have been changed for clarity from
  • `existence_error(goal_thread, Goal)` to `existence_error(thread, Queue)` with
  • the goal information still available in the context argument.
  • CHANGED: Also use the `bom/1` source file property when using SICStus Prolog
  • as the backend compiler.
  • FIXED: Compiler bug where `encoding/1` and `bom/1` source file properties
  • would not be saved together with all the other information about loaded files.
  • FIXED: Also accept a `end_of_file` term when compiling runtime terms.
  • FIXED: Updated the `paths/paths.pl` file to define the library `home` using
  • the `USERPROFILE` environment variable when running on Windows instead of the
  • concatenation of the `HOMEDRIVE` and `HOMEPATH` variables, which only worked
  • with some backend Prolog compilers.
  • Prolog adapter and integration files:
  • UPDATED: The SICStus Prolog adapter file now converts any `bom/1` option
  • passed to the internal `'$lgt_open'/4` predicate into the expected
  • `encoding_signature/1` option.
  • UPDATED: The adapter file for XSB now uses this system `compile/2` built-in
  • predicate to also generate `.xwam` files when using the `logtalk_compile/1-2`
  • built-in predicates. Also added a note that XSB implements the de facto
  • standard `findall/4` predicate.
  • UPDATED: The JIProlog adapter file for the changes in the latest betas.
  • Library:
  • FIXED: Bug in the implementation of the predicate `os::expand_path/2`
  • for XSB.
  • Installers and installation scripts:
  • IMPROVED: The Windows installer will now warn the user and cancel the
  • installation when a backup of the current Logtalk user folder cannot be
  • created. Also converted the `logtalk.iss` installer script to UTF-8 (thus,
  • the Inno Setup Unicode version is now required to compile it).
  • Tools:
  • ADDED: A `clean_file/1` protected predicate to the `lgtunit` tool for
  • safely deleting a file.
  • FIXED: A bug when running the `lgtunit` tool on Windows operating-systems
  • where deleting a temporary file used for testing input/output predicates
  • could result in an error.
  • FIXED: Typo in the `lgtunit` tool in the declaration of the protected
  • predicate `check_binary_file/2`.
  • FIXED: A bug in the `logtalk_tester.sh` POSIX shell script where the reported
  • test numbers would not be accurate due to text encoding issues resulting from
  • the current locale and the logging of failed test results.
  • Tests:
  • ADDED: Unit tests for the `encoding/1` Logtalk directive.
  • UPDATED: Prolog conformance tests for the built-in arithmetic comparison
  • predicates and the `is/2` predicate to try to delay errors in expressions to
  • runtime to properly test the expected exception terms.
  • FIXED: Prolog conformance tests that use a cleanup goal that deleted files
  • to use the new `lgtunit` tool `clean_file/1` predicate.
  • FIXED: Prolog conformance tests that are marked as STO are now skipped when
  • using CxProlog or ECLiPSe due to limited support for cyclic terms in these two
  • backend Prolog compilers.
  • FIXED: Identifiers of the Prolog conformance tests for the `current_output/1`
  • standard predicate.

New in Logtalk 3.00.0 RC 6 (Nov 21, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Print an error message in case of unexpected error while loading the code generated by the compilation of a source file. These errors usually result from bugs in the backend Prolog compiler.
  • IMPROVED: Compiler code refactoring for a clean separation between first stage and second stage error handling.
  • FIXED: Operator declarations found in arguments of the dynamic entity creation built-in predicates would not be local to the dynamic entities.
  • FIXED: When creating a dynamic object at runtime declaring `synchronized/1` predicates, only create the implied mutexes if the backend Prolog compiler does support a compatible multi-threading implementation.
  • FIXED: Detect the unlikely but possible error case where a `synchronized/1` or `coinductive/1` directive appear textually on a source file after clauses for the declared predicates.
  • FIXED: Calling a local static predicate declared discontiguous but with no clauses must fail instead of throwing an existence error.
  • FIXED: Report the correct warning when calling undefined static predicates that are locally declared discontiguous, synchronized, or coinductive.
  • FIXED: Regression in previous release in the reporting of compilation errors.
  • Prolog adapter and integration files:
  • UPDATED: The (still unsupported) Jekejeke adapter file for changes in release 1.0.4.
  • Documentation:
  • IMPROVED: Documentation of the `lgtunit` tool.
  • Tests:
  • ADDED: Some more unit tests for the `discontiguous/1`, `synchronized/1`, and `coinductive/1` directives.
  • ADDED: Some more unit tests for the `create_object/4`, `create_category/4`, and `create_protocol/3` built-in predicates.
  • IMPROVED: Refactoring of several unit tests so that the sources files defining the test objects do not contain definitions for other entities. This avoids potential issues when expanding test files that contain other objects besides the test objects. In some rare cases, the expansion of these non-test objects can interfere with the test results.
  • UPDATED:
  • Prolog conformance tests for built-in arithmetic functions to try to delay errors in expressions to runtime to properly test exception terms.
  • Examples:
  • UPDATED: Outdated results for some of the sample queries for the `coinduction` example.

New in Logtalk 3.00.0 RC 5 (Nov 13, 2014)

  • Logtalk compiler and runtime:
  • ADDED: Read-only `prolog_conformance` flag, with possible values `iso_strict` (for Prolog compilers claiming strict ISO Prolog Core Standard conformance) and `iso_lax` (for Prolog compilers claiming only broad conformance with the ISO Prolog Core Standard).
  • FIXED: The compiler would try to read past the end-of-file after reporting an error found while compiling a Prolog module as a Logtalk object resulting in a second spurious error.
  • FIXED: Compiler performance bug where, in case of a compilation error of a source file term, the remaining source file terms would still be read.
  • Prolog adapter and integration files:
  • CHANGED: The ECLiPSe integration script and shortcut now passes the command-line option `-t user` (the name of the top level module) for a user experience more similar to other backend Prolog compilers.
  • UPDATED: All adapter files to define the `prolog_conformance` flag value.
  • UPDATED: The JIProlog adapter file for the changes in the latest betas.
  • UPDATED: The YAP adapter file with declarations for the proprietary database predicates `assert_static/1`, `asserta_static/1`, `assertz_static/1`, and `nth_clause/3`.
  • Library:
  • FIXED: The `os::date_time/7` predicate for Lean Prolog (previous definition used a built-in predicate that apparently is no longer available).
  • Documentation:
  • ADDED: Example queries for generating diagrams for Prolog module applications using the `diagrams` tool.
  • IMPROVED: Documentation of the `lgtdoc`, `lgtunit`, and `ports` tools.
  • IMPROVED: Documentation of the `logtalk_make/0-1` built-in predicates.
  • Tools:
  • ADDED: Support for exporting Markdown text files to the `lgtdoc` tool.
  • ADDED: Support for testing input/output predicates to the `lgtunit` tool. Based on similar support found on the Prolog conformance testing framework written by Péter Szabó and Péter Szeredi.
  • ADDED: Support for retrieving `declares/2` and `defines/2` module properties to the `diagrams` tool when using ECLiPSe and SICStus Prolog as the backend Prolog compilers.
  • IMPROVED: Updated the `lgtunit` tool to restore the current input and output streams after running each unit test and to print the name of skipped tests.
  • IMPROVED: Updated the `logtalk_tester.sh` POSIX shell script to print a list of skipped tests and simplified lists of compilation warnings, errors, and failed tests.
  • FIXED: Added missing entries for the `logtalk_make/0-1` built-in predicates to the `help` tool.
  • FIXED: Bug in the `diagrams` tool when accessing Prolog module properties using SICStus Prolog as the backend compiler.
  • FIXED: The `diagrams` tool now checks (and fixes if necessary ) the paths passed using the options `omit_path_prefixes/1` and `output_directory/1` for an ending slash.
  • Tests:
  • CHANGED: Move the Logtalk test suites into their own directory.
  • ADDED: Unit tests for ISO Prolog standard specified syntax and input/output predicates.
  • IMPROVED: Prolog conformance unit tests that are classified as STO/Undefined in the ISO Prolog standard are no longer skipped when using backend Prolog compilers that support cyclic terms.

New in Logtalk 3.00.0 RC 4 (Oct 29, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Implemented the missing static binding safety checks for the intermediate entities in the predicate declaration and definition lookup chains (the entities must be static, not compiled in debug mode, and, in the case of objects, compiled with the `complements` flag set to `deny`).
  • IMPROVED: The `logtalk_compile/1-2` and `logtalk_load/1-2` predicates now try to use file names as-is as last resort when trying to match the specified files with existing files on disk.
  • UPDATED: Compiler internal tables of ISO Prolog standard specified built-in predicates and built-in arithmetic functions.
  • FIXED: Bug in the `conforms_to_protocol/2-3` built-in predicates where complementing categories would be ignored.
  • FIXED: Bug in the compiler code that finds the original name of an aliased predicate where complementing categories would not be checked in the correct order.
  • FIXED: Bug when constructing the full path for intermediate files generated when compiling a source file where the wrong scratch directory could be used.
  • Prolog adapter and integration files:
  • IMPROVED: Simplified startup settings for the YAP adapter file and fixed a singleton variable warning.
  • UPDATED: The JIProlog adapter file to support passing environment variable values as Java process properties. Fixed the definitions of some operating- system access internal predicates. Added missing definitions for some internal predicates.
  • FIXED: The ECLiPSe adapter file now imports the stricter versions of the `compare/3` and `term_variables/2` standard built-in predicates.
  • Library:
  • ADDED: Preliminary support for JIProlog to the operating-system access library.
  • Documentation:
  • IMPROVED: Documentation of the `logtalk_compile/1-2` and `logtalk_load/1-2` predicates by detailing the steps taken to match a file specification with a file on disk.
  • IMPROVED: Documentation of the `use_module/2` entity directive.
  • FIXED: Clarified documentation of the `mode/2` predicate directive where the second argument specifies the number of *proofs*, not the number of distinct solutions (as there can be multiple proofs for the same solution).
  • Tools:
  • ADDED: Support for the `lgtunit` tool to specify multiple possible exception terms for unit tests expected to throw an error.
  • IMPROVED: The `logtalk_tester.sh` POSIX shell script to test if the selected integration script is available in the system execution path. Thanks to Vítor Santos Costa for the bug report.
  • FIXED: The `debugger` tool when running with a backend Prolog compiler that doesn't support unbuffered character input and requires flushing the current output stream before inputing a character.
  • FIXED: The `lgtdoc` tool for the clarification of the `mode/2` predicate directive second argument.
  • Examples:
  • IMPROVED: The `recipes` example now also illustrates a solution for dealing with a mixed data representation using both data objects and Prolog facts.
  • Tests:
  • ADDED: Unit tests for the `set_logtalk_flag/2` directive to check cases where static binding optimizations must not be applied due to setting the `complements` flag to value other than `deny` for intervening objects.
  • ADDED: Unit tests for a subset of the ISO Prolog standard specified control constructs, predicates, and arithmetic functions. These tests are used to check backend Prolog compilers standards conformance, not Logtalk-specific features. Thanks to SICS, Péter Szabó, and Péter Szeredi for permission to reuse their unit tests. Thanks to Joachim Schimpf for helping finding typos in the initial test versions.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Support for arithmetic functions and operators introduced in the latest revisions of the ISO Prolog standard to all supported text editors and syntax highlighters.

New in Logtalk 3.00.0 RC 3 (Oct 4, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: The `initialization/1` directive is no longer supported in protocols and categories as correct compilation of the initialization goal often requires a compile-time defined object context.
  • CHANGED: Reverted the debug events `fact/3` and `rule/3` back to `fact/4` and `rule/4` with the first argument being the container entity. This change is required to display correct source file information when tracing calls to multifile predicates.
  • FIXED: Exception term when trying to use the `threaded/0` directive within a protocol or category.
  • Prolog adapter and integration files:
  • IMPROVED: Adapter files internal documentation.
  • ADDED: Unsupported Jekejeke Prolog adapter file. Not yet functional as there are some required features missing from the current Jekejeke Prolog release (1.0.3).
  • FIXED: Predicates for getting the current date and time for tuProlog with the help of Roberta Calegari.
  • FIXED: ECLiPSe, Lean Prolog, Qu-Prolog, and SWI-Prolog adapter files to use the new `object` file type when compiling/loading intermediate Prolog files.
  • FIXED: GNU Prolog adapter file definitions the file and directory existence predicates to distinguish between files and directories.
  • Installers and installation scripts:
  • CHANGED: The installers and installation scripts to delete the suffix `stable` from the version string.
  • Library:
  • CHANGED: The `dates` library now depends on the `os` library thus removing its dependencies on adapter file internal predicates.
  • ADDED: Preliminary support for Jekejeke Prolog to the operating-system access library.
  • FIXED: The `os` object for the GNU Prolog definition of the file existence
  • predicate to ensure that it's a regular file instead of e.g. a directory.
  • Tools:
  • IMPROVED: When printing execution context information, the `debugger` tool now prints `n/a` when an element of the execution context is not available instead of printing a variable.
  • FIXED: Printing of source file information for a traced head of a multifile clause of a Prolog module when using the `debugger` tool.
  • FIXED: Ensure that the `debugger_messages` category is not compiled in debug mode to avoid a potential endless loop when calling `debugger` predicates.
  • FIXED: The `lgtunit` tool misreporting of code coverage information when an entity defines clauses for Prolog module multifile predicates.
  • Contributions:
  • CHANGED: Moved the `iso8601.lgt` file to its own folder and update the code to use the operating-system access library to get the current date.
  • Examples:
  • ADDED: New `recipes` example, inspired by an answer to a StackOverflow question. It illustrates a solution for representing structured data and also hot patching of running code.
  • IMPROVED: Removed the `benchmarks` example dependency on an internal adapter file predicate.
  • FIXED: Bug in the Houses puzzle example due to a restrictive interpretation of some of the puzzle constraints. Thanks to Markus Triska for the bug report and the enhancements to the puzzle implementation.
  • Tests:
  • FIXED: Tests of the `multifile/1` directive to avoid discontiguous predicate issues with some backend Prolog compilers such as GNU Prolog.

New in Logtalk 3.00.0 RC 3 (Oct 4, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: The `initialization/1` directive is no longer supported in protocols and categories as correct compilation of the initialization goal often requires a compile-time defined object context.
  • CHANGED: Reverted the debug events `fact/3` and `rule/3` back to `fact/4` and `rule/4` with the first argument being the container entity. This change is required to display correct source file information when tracing calls to multifile predicates.
  • FIXED: Exception term when trying to use the `threaded/0` directive within a protocol or category.
  • Prolog adapter and integration files:
  • IMPROVED: Adapter files internal documentation.
  • ADDED: Unsupported Jekejeke Prolog adapter file. Not yet functional as there are some required features missing from the current Jekejeke Prolog release (1.0.3).
  • FIXED: Predicates for getting the current date and time for tuProlog with the help of Roberta Calegari.
  • FIXED: ECLiPSe, Lean Prolog, Qu-Prolog, and SWI-Prolog adapter files to use the new `object` file type when compiling/loading intermediate Prolog files.
  • FIXED: GNU Prolog adapter file definitions the file and directory existence predicates to distinguish between files and directories.
  • Installers and installation scripts:
  • CHANGED: The installers and installation scripts to delete the suffix `stable` from the version string.
  • Library:
  • CHANGED: The `dates` library now depends on the `os` library thus removing its dependencies on adapter file internal predicates.
  • ADDED: Preliminary support for Jekejeke Prolog to the operating-system access library.
  • FIXED: The `os` object for the GNU Prolog definition of the file existence predicate to ensure that it's a regular file instead of e.g. a directory.
  • Tools:
  • IMPROVED: When printing execution context information, the `debugger` tool now prints `n/a` when an element of the execution context is not available instead of printing a variable.
  • FIXED: Printing of source file information for a traced head of a multifile clause of a Prolog module when using the `debugger` tool.
  • FIXED: Ensure that the `debugger_messages` category is not compiled in debug mode to avoid a potential endless loop when calling `debugger` predicates.
  • FIXED: The `lgtunit` tool misreporting of code coverage information when an entity defines clauses for Prolog module multifile predicates.
  • Contributions:
  • CHANGED: Moved the `iso8601.lgt` file to its own folder and update the code to use the operating-system access library to get the current date.
  • Examples:
  • ADDED: New `recipes` example, inspired by an answer to a StackOverflow question. It illustrates a solution for representing structured data and also hot patching of running code.
  • IMPROVED: Removed the `benchmarks` example dependency on an internal adapter file predicate.
  • FIXED: Bug in the Houses puzzle example due to a restrictive interpretation of some of the puzzle constraints. Thanks to Markus Triska for the bug report and the enhancements to the puzzle implementation.
  • Tests:
  • FIXED: Tests of the `multifile/1` directive to avoid discontiguous predicate issues with some backend Prolog compilers such as GNU Prolog.

New in Logtalk 3.00.0 RC 2 (Sep 22, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: Only type-check the list arguments of the `phrase/2-3` built-in methods at compile time to avoid performance penalties at runtime.
  • CHANGED: Reverted the restriction of primary multifile predicate declarations to objects. Parallel changes to the implicit predicate execution context make this restriction no longer necessary for type-correctness of the execution context arguments.
  • CHANGED: Support definition of multiple Prolog file name extensions in the
  • adapter files and add a new file type, `object`, for defining the extension
  • to be used for the compiler generated intermediate Prolog files.
  • ADDED: Support for compiling Prolog source files as Logtalk source files using the `logtalk_compile/1-2` and `logtalk_load/1-2` built-in predicates.
  • CHANGED: The name of intermediate files generated when compiling a source file now use a suffix derived from the file extension to prevent unlikely but possible name conflicts when compiling two or more files that share the same name but not the same extension (e.g. `foo.lgt`, `foo.logtalk`, and `foo.pl` files, whose intermediate Prolog files are now be named, respectively, `foo_lgt.pl`, `foo_logtalk.pl`, and `foo_pl.pl`, assuming a `.pl` extension for object files).
  • IMPROVED: Detect and report attempts to declare multifile predicates in protocols.
  • FIXED: Cases where runtime calls to the `phrase/2-3` built-in methods where the first argument is only know at runtime could result in exceptions missing the `error/2` wrapper with its context argument.
  • Prolog adapter and integration files:
  • ADDED: Unsupported tuProlog adapter file. Not yet functional as there are several required features missing from the current tuProlog release (2.9.0).
  • UPDATED: `adapters/template.pl` file for recent changes to the compiler and runtime.
  • UPDATED: All adapter files to also recognize `.prolog` files as Prolog files.
  • UPDATED: The ECLiPSe adapter file to also recognize `.ecl` files as Prolog files.
  • UPDATED: The XSB adapter file to also recognize `.P` files as Prolog files.
  • UPDATED: The YAP adapter file to also recognize `.yap` files as Prolog files.
  • Documentation:
  • IMPROVED: Documentation of the `phrase/2-3` built-in methods.
  • Tools:
  • IMPROVED: The `lgtdoc` tool now generates multifile predicate links that allow jumping directly to the predicate primary declaration documentation.
  • FIXED: Several issues in the DTD, XML Schema, and RELAX NG specifications of the XML files generated by the `lgtdoc` tool.
  • FIXED: The `lgtunit` tool is now able to term-expand all valid syntaxes for the `discontiguous/1` directive.
  • Tests:
  • FIXED: Updated the unit tests for the conditional compilation directives to avoid a clash with a Lean Prolog built-in predicate.
  • IDEs, text editors, and syntax highlighters support:
  • ADDED: Completions file for the Sublime Text cross-platform text editor. Also updated the instructions on how to add support for syntax coloring and code snippets.
  • FIXED: Missing Pygments syntax coloring of the `module/2` opening directive, instructions to use the Logtalk lexer with Prolog files, and instructions for updating outdated Logtalk lexer support in a Pygments installation. Also updated the `analyze_text()` function to be less broad and for programming style, plus the number classifications to be more specific (after feedback from Georg Brandl and David Corbett, Pygments developers).
  • FIXED: SubEthaEdit 2.x syntax coloring of the standard `atomic/1` predicate.

New in Logtalk 3.00.0 RC 1 (Sep 3, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: Pass the current execution context when sending a message thus ensuring that, when calling a meta-predicate, the meta-arguments will be called with the caller full execution context. This allows a long standing issue to be fixed: it's now possible to pass to a meta-predicate a closure corresponding to a call to the `::/1` or `^^/1` control constructs.
  • CHANGED: The predicate execution context now also includes the entity containing the clause under execution. This entity argument is only equal to the *this* argument for object predicate clauses. This allows a long standing issue to be fixed: it's now possible to call a meta-predicate from within a category where the meta-arguments correspond to calls to local category predicates instead of predicates local to the object importing the category.
  • CHANGED: The `execution_context/6` predicate of the `logtalk` built-in object to `execution_context/7` to cope with the new execution context entity argument.
  • CHANGED: The debug events `fact/4` and `rule/4` to `fact/3` and `rule/3` by removing the entity argument as this information is now available from the execution context. This change also fixes access to runtime entity parameters as the previous debug events only provided access to the compile time entity identifier.
  • CHANGED: Restrict *primary* multifile predicate declarations to objects, thus ensuring that the execution context arguments are type valid when the multifile predicate clauses are defined in a category. The execution context arguments continue to be shared (with the exception of the entity defining the clause) between the head and the body of multifile predicate clauses.
  • CHANGED: Don't use static binding when calling predicates defined in objects and categories compiled in debug mode.
  • IMPROVED: Allow access to entity parameters in multifile predicate clauses by simple unification at the clause heads.
  • IMPROVED: Allow inline compilation of calls to the `parameter/1` built-in context execution method from within parametric categories.
  • CHANGED: Throw a `system_error` in case of an unexpected compilation failure of a source file term to help identify and diagnose possible compiler bugs.
  • ADDED: Support for a `term(Term, Options)` token to the structured message printing mechanism. This new token allows to overcome the limitation of the de facto `format/3` predicate that doesn't support specifying term writing options.
  • FIXED: When compiling in debug mode, also support a call port for predicates that are called indirectly.
  • FIXED: Generation of category "def" clauses for declared static multifile predicates without an initial set of clauses.
  • FIXED: Bug in the compilation of dynamic predicate rules in debug mode.
  • FIXED: Regression introduced in the Beta 9 release when compiling and loading source files with an `encoding/1` directive.
  • FIXED: Cases where a compilation error would be reported with incorrect term and file position information.
  • FIXED: Bug adding source data for auxiliary predicates automatically created when calling a Prolog meta-predicate that takes a closure as argument.
  • Prolog adapter and integration files:
  • UPDATED: The SWI-Prolog and YAP adapter files to skip any `encoding/1` directive in a Prolog module file when looking for the `module/2` directive.
  • UPDATED: The YAP adapter file now uses the `compilation_mode(compact)` option by default when loading the intermediate Prolog files generated by the Logtalk compiler. This option avoids cluttering the output of the `listing/0` predicate with listings of Logtalk compiled code.
  • IMPROVED: Error normalization for SWI-Prolog for specific cases where the caller predicate information is available.
  • UPDATED: Removed redundant `thread_shared/1` directives from the XSB MT integration files.
  • Tools:
  • NEW: Port profiling tool, `ports`, based on the same predicate execution box model used by the debugger. It counts the number of times each port is traversed during the execution of queries.
  • ADDED: The `debugger` tool now supports a zap command, `z`, to read a port name (or a negated port name) and continue execution until a port with the same name (or a name other than the negated port) is reached. Based on a similar command from the ECLiPSe debugger.
  • ADDED: The `debugger` tool now supports a quasi-skip command, `q`, that continues execution until returning to the same goal or reaching a spy point. Based on a similar command from the SICStus Prolog debugger.
  • ADDED: The `debugger` tool now supports a term write depth command, `

New in Logtalk 3.00.0 Beta 9 (Jul 31, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Optimize the performance of closures corresponding to built-in predicates and user-defined entity predicates whose calls can be resolved at compile time.
  • IMPROVED: Update the implementation of the `logtalk_load/1-2` built-in predicates to always reload a file when the previous loading attempt failed due to some compilation or loading error.
  • Prolog adapter and integration files:
  • FIXED: Compatibility with Lean Prolog by using a workaround for this system limited parser in the compiler/runtime.
  • FIXED: SICStus Prolog expansion of `ensure_loaded/1` and `use_module/1-2` directives when the file path is relative to the directory of the enclosing entity source file.
  • Documentation:
  • IMPROVED: Reference manual documentation of the methods `goal_expansion/2` and `term_expansion/2`.
  • FIXED: Distinguish between valid key-value pairs for the `info/1` entity directive and for the `info/2` predicate directive.
  • FIXED: Documentation of the `logtalk::debug_handler/2` predicate.
  • Tools:
  • ADDED: The `debugger` tool now supports the definition of file line number spy points.
  • ADDED: The `debugger` tool now supports a `.` command to print file, line number, entity, predicate, and clause number information.
  • ADDED: The `debugger` tool now supports a `j` command to read an invocation number and continue execution (i.e. jump) until a leashed port with the same number is reached.
  • CHANGED: The `debugger` tool now prints the invocation number at unification ports instead of the clause number (which can still be accessed using the new `.` command).
  • FIXED: Bug in the `debugger` tool that prevented forcing a failure at an unification port.
  • FIXED: Bug in the `debugger` tool that prevented removing a context spy point.
  • FIXED: Bug in the `debugger` tool where the character used as line prefix when tracing to indicate if a spy point is set would not be promptly updated when adding or removing a spy point for the current goal.
  • ADDED: Support to the `diagrams` tool to generate file, cross-reference, and entity diagrams for Prolog module applications when using SWI-Prolog or YAP as the backend compilers.
  • ADDED: Support to the `diagrams` tool to specify backend Prolog compiler specific file name extensions for Prolog source files.
  • ADDED: Four new predicates, `directory/2-3` and `directories/2-3`, to the `diagrams` tool for generating diagrams for all (loaded) source files from a given directory or set of directories.
  • IMPROVED: The `diagrams` tool now also display multifile predicates when generating entity predicate cross-reference diagrams.
  • IMPROVED: The `diagrams` tool now allows overriding the default diagrams layout direction.
  • IMPROVED: When generating predicate cross-referencing diagrams for a single entity, the `diagrams` tool now prints multifile predicate nodes using a lighter color and prints locally declared public predicate nodes and module exported predicate nodes using a bold border.
  • FIXED: Bug in the `diagrams` tool when generating cross-referencing diagrams for parametric entities.
  • FIXED: The `lgtdoc` tool now also prints multifile predicate properties and predicate coinduction templates.
  • CHANGED: The `lgtdoc` tool default value for the `xmldir` option is now relative to the source files directory instead of the current working directory when using the `rlibrary/1-2`, `library/1-2`, and `file/1-2` predicates.

New in Logtalk 3.00.0 Beta 8 (Jul 5, 2014)

  • Logtalk license:
  • CHANGED: Allow Logtalk to be used with commercial backend Prolog compilers in proprietary applications. Also removed the (mostly redundant) additional restrictions that were used as per GNU GPLv3 Section 7.
  • Logtalk compiler and runtime:
  • CHANGED: Predicates declared as synchronized now always have the property `synchronized` even when using backend Prolog compilers that don't support a compatible threads implementation.
  • CHANGED: An attempt to use a `::Closure` as a meta-argument in a call to a meta-predicate now throws a domain error. Previously, the corresponding `::/1` goal would only work for local meta-calls and would fail silently for calls in the context of the *sender*. The workaround is to call the `self/1` built-in method first and to pass to the meta-predicate a `Self::Closure` closure.
  • CHANGED: Moved the definition of the internal representation of execution context arguments from the `logtalk` built-in object to the compiler for a small performance improvement.
  • ADDED: Structured question asking support to the `logtalk` built-in object, complementing the structured message printing support already in place. This new feature abstracts the common operation of asking a user a question and reading a term as the answer, which allows integration code and tools such as IDEs to intercept and handle user input.
  • ADDED: Meta-predicate properties to the built-in methods `current_op/3`, `current_predicate/1`, and `predicate_property/2`.
  • FIXED: Compilation of synchronized predicates when using backend Prolog compilers that don't support a compatible threads implementation.
  • FIXED: Bug where closure arguments in calls to meta-predicates failed to be recorded when collecting predicate cross-referencing information. Collecting information on closures currently requires, however, compilation of source files with the `optimize` flag turned on.
  • FIXED: Bug when extending an explicitly-qualified module closure to a goal.
  • FIXED: Bug when printing a message that a parametric entity is being compiled where the entity identifier would not be printed as a quoted term.
  • FIXED: Bug when reporting a local meta-call error for a category predicate where the value of *this* would be used instead of the category identifier.
  • FIXED: Turning off the `report` flag no longer suppresses printing of messages other than `banner`, `comment`, `comment(_)`, `warning`, and `warning(_)` messages.
  • FIXED: Ensure that the `logtalk::print_message/3` predicate doesn't fail when the message kind is unknown.
  • Prolog adapter and integration files:
  • REMOVED: Specific integration scripts for 64 bits versions of XSB as nowadays this system seems to be usually compiled 64 bits using the generic executable names `xsb` and `xsb-mt`.
  • FIXED: Updated the `core/logtalk.lgt` file to workaround an apparent `gplc`bug with multifile predicates when generating executables that embed Logtalk using GNU Prolog.
  • IMPROVED: The SWI-Prolog specific `portray/1` rule for pretty-printing an entity predicate execution context is now less likely to be triggered for non-related terms using the same functor and arity.
  • Tools:
  • ADDED: Option `node_type_captions/1` (false by default) to the `diagrams` tool for printing a small caption for the node type.
  • CHANGED: By default, inheritance and uses diagrams now also print the entity public interfaces.
  • FIXED: Avoid a spurious warning when loading the `diagrams` tool while using a backend Prolog compiler that doesn't support modules.
  • FIXED: Workaround a B-Prolog limitation with atoms length when loading the `diagrams` tool using this backend Prolog compiler.
  • IMPROVED: Updated the `debugger` tool to use the structured message printing and structured question asking mechanisms for its input and output to make it easier to integrate with GUI IDEs and redirect execution traces to a file.
  • ADDED: Simple code example to the `debugger` tool on how to redirect a goal trace to a file.
  • FIXED: The `debugger` tool option to print the compiled form of a goal is only valid at the `call`, `redo`, `exit`, and `fail` ports.
  • Examples:
  • ADDED: Simple example of implementation of ground linear and intuitionistic assumptions adapted from a paper published by Paul Tarau, Veronica Dahl, and Andrew Fall.

New in Logtalk 3.00.0 Beta 7 (Jul 5, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Abstract how to qualify a goal so that it's called in the default user module thus removing any reference to specific backend Prolog compilers from the core compiler/runtime code.
  • IMPROVED: Minor compiler performance enhancements.
  • FIXED: Calling meta-arguments in the context of the pseudo-object "user".
  • FIXED: When compiling a `clause/2` message to an object, the head argument is only required to be instantiated at runtime.
  • FIXED: Some cases where compile-time type errors in calls to the built-in database methods would be missed by the compiler.
  • Prolog adapter and integration files:
  • UPDATED: Dummy `meta_predicate/1` directives for compiler/runtime internal predicates for SWI-Prolog that avoid cluttering the make/0 analysis report.
  • FIXED: Added missing declaration for the proprietary `call_cleanup/2`built-in meta-predicate to the adapter files of CxProlog and XSB.
  • Tools:
  • ADDED: Support to the `lgtunit` tool for defining tests that check if a goal is deterministic, i.e. that it succeeds once without leaving a choice-point.
  • FIXED: Typos in the `debugger` tool new code for avoiding introducing spurious choice-points that prevented it working as expected with most of the supported backend Prolog compilers.
  • FIXED: The `lgtdoc` tool was still expecting the removed `synchronized/0` directive and corresponding object and category property.

New in Logtalk 3.00.0 Beta 6 (Jun 12, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: Detection and handling of redefined built-in predicates. Changed the compiler first stage to compile only predicate heads and collect information about defined predicates. The compilation of predicate bodies is delayed to the second stage. This greatly simplifies the second stage, improves the overall compiler performance, and allows reporting undefined and unknown predicates as they are found.
  • CHANGED: Message term and message text used for reporting calls to unknown predicates.
  • CHANGED: Calls to synchronized predicates are now wrapped using the `once/1` standard meta-predicate when using a single-threaded backend Prolog compiler.
  • REMOVED: The `synchronized/0` entity directive is no longer supported.
  • IMPROVED: It's no longer necessary for checking if a call to a meta-predicate or a coinductive predicate precedes the corresponding directive.
  • IMPROVED: Simplified compilation of synchronized predicates, which no longer require the generation and use of an auxiliary wrapper clause.
  • IMPROVED: Simplified compilation of coinductive predicates by moving some of the steps from the second compiler stage to the first stage.
  • IMPROVED: Debug code generated for calls to the `parameter/2`, `sender/1`, and `this/1` built-in context methods.
  • FIXED: Ensure closed-world semantics for predicates declared coinductive or synchronized but not defined.
  • FIXED: Compiler bug where compiling a list of files using an `hook/1` option would result in redundant cached clauses used for optimizing the calls to the term- and goal-expansion methods.
  • FIXED: Several cases where the compiler would miss instantiation errors when type-checking directives.
  • FIXED: Don't try to reuse internal entity functors when recompiling an entity as the `code_prefix` flag may have changed between compilations.
  • FIXED: Compiler bug when generating debug code for predicate rules where the rule head would be printed by the debugger as a fact.
  • FIXED: Type-checking bug when compiling calls to the `retract/1` built-in method when its argument is only known at runtime. Thanks to Andreas Becker for the bug report.
  • FIXED: The top-level interpreter versions of the `::/2` and `

New in Logtalk 3.00.0 Beta 5 (May 26, 2014)

  • Logtalk compiler and runtime:
  • ADDED: `include/1` source file and entity directive. Whew used as an entity directive, is supported in both file defined entities and dynamically created entities.
  • CHANGED: The compiler flag `misspelt_calls` is replaced by the new flags `unknown_predicates` and `undefined_predicates`.
  • CHANGED: Attempting to load a file now always registers it as loaded even if its compilation and loading fails due to some syntax error. This simplifies the make functionality for the user. Notably, it's no longer necessary to set the `reload` flag to `always` for loader files during development. Thanks to Jan Wielemaker for his feedback on this issue.
  • ADDED: Loaded file properties `object/1`, `protocol/1`, and `category/1`.
  • FIXED: Bugs that prevented calling the `parameter/2` built-in method or the `threaded_wait/2` and `threaded_notify/2` built-in predicates at runtime using the `

New in Logtalk 3.00.0 Beta 4 (May 14, 2014)

  • Logtalk compiler and runtime:
  • ADDED: Support for querying `meta_predicate/1` properties for Logtalk built-in predicates using the `predicate_property/2` built-in method.
  • ADDED: Initial support for the `foreign` predicate property (not yet in use).
  • IMPROVED: Detection, handling, and recovering when possible of user errors in the definition of library paths using the `logtalk_library_path/2` predicate.
  • IMPROVED: Perform basic error checking for file-level `ensure_loaded/1`, `use_module/1-2`, and `multifile/1` directives.
  • FIXED: The top-level interpreter versions of the `::/2` and `

New in Logtalk 3.00.0 Beta 3 (May 2, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: The `alias/3` predicate directive is deprecated and replaced by the new `alias/2` predicate directive.
  • ADDED: New infix operator `as`, used as an alternative and preferred notation for the declaration of predicate (and non-terminal) aliases within the `alias/2` and `uses/2` predicate directives. This operator is already in the use in e.g. YAP and SWI-Prolog for similar purposes.
  • ADDED: Built-in method `findall/4`.
  • ADDED: Support for accessing parametric object proxies when using the `

New in Logtalk 3.00.0 Beta 2 (Apr 23, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Code generated for calls to the `{}/1` compiler bypass control construct.
  • CHANGED: Restrict the valid values for the `code_prefix` flag to single character atoms. This is necessary to ensure that we can always reconstruct the entity identifier from the internal entity prefix.
  • FIXED: Bug when converting an internal entity prefix to the entity identifier when the identifier includes the character used as delimiter between the entity functor from the entity number of parameters in the entity internal prefix.
  • FIXED: Cases where sending a database message to an invalid object identifier would result in an existence error instead of a type error.
  • FIXED: Cases where sending a database message to a non-instantiated object identifier could result in misuse of the lookup cache for asserting and retracting dynamic facts instead of generating an instantiation error.
  • FIXED: Reporting of `multifile/1` predicate directive existence errors where the callable form of the predicate would be used instead of the predicate indicator.
  • FIXED: Bug introduced in previous release in handling errors found when calling the `::/1-2` message sending control constructs with arguments only bound at runtime.
  • FIXED: Sending a message to a parametric object proxy would not check for references to unknown objects during source file compilation.
  • Prolog adapter and integration files:
  • FIXED: Added missing dummy definition for the `mutex_property/2` predicate to the GNU Prolog adapter file (required when embedding Logtalk for generating an executable). Thanks to Michael Wernicki for the bug report.
  • FIXED: Updated the `core/logtalk.lgt` file to workaround an apparent `gplc` bug with multifile predicates when generating executables that embed Logtalk using GNU Prolog.
  • Tests:
  • ADDED: Built-in database and reflection method unit tests for testing the errors generated when sending the corresponding messages to invalid object identifiers.
  • FIXED: Bug in the test object for the `::/1` control construct.

New in Logtalk 3.00.0 Beta 1 (Apr 9, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: Logtalk and Prolog built-in predicates can no longer be used as messages. This change helps avoiding code portability issues due to different back-end Prolog compilers providing different sets of built-in predicates. In particular, it makes definitions for the `forward/1` unknown message handler work as expected across back-end Prolog compilers when some of them happen to provide a built-in predicate with the same predicate indicator as an otherwise unknown message sent to an object.
  • CHANGED: Allow the `{}/1` compiler bypass control construct to be used as a message. This provides a workaround for the fact that built-in predicates are no longer supported as messages and it's useful mainly within message broadcasting control constructs.
  • CHANGED: Simplification of the code generated when compiling source files with the `optimize` flag turned on is now only performed during the second compiler stage.
  • FIXED: Implemented support for using broadcasting control construct and built-in methods in runtime bound messages.
  • FIXED: Allow using `uses/2` directives to call meta-predicates defined in the `user` pseudo-object that are not built-in predicates.
  • FIXED: Only fold left unifications during optimization of the generated code if they don't result in cyclic terms.
  • FIXED: Calls to Prolog proprietary meta-predicates that are not built-in predicates but are specified in `uses/2` directives would not be checked for safety when called from a user-defined meta-predicate.
  • FIXED: Non-informative error message when trying to compile a call to a non-compatible proprietary built-in meta-predicate.
  • UPDATED: The `settings-sample.lgt` file now includes sample code for printing all otherwise silent compiler messages.
  • Prolog adapter and integration files:
  • UPDATED: The SICStus Prolog adapter file is now compatible with the forthcoming 4.3 release (tested with the 4.3.0 beta 7 version).
  • ADDED: Workaround definition for the missing `acyclic_term/1` standard predicate to the adapter files of Lean Prolog, Qu-Prolog, and SICStus Prolog.
  • CHANGED: The SWI-Prolog integration files no longer load the `xpcehooks.pl` file at startup to avoid errors due to broken XPCE installations, specially in some Linux distributions.
  • Installers and installation scripts:
  • ADDED: `update_html_docs.sh` POSIX shell script for updating the HTML documentation of the library and the development tools.
  • UPDATED: The Windows installer now also detects version 4.3 of SICStus Prolog.
  • Documentation:
  • IMPROVED: Documentation of the built-in predicates `logtalk_library_path/2` and `logtalk_load_context/2`.
  • Tools:
  • ADDED: Utility object `diagrams` to the `diagrams` tool for generating all supported diagrams in one step. This object provides an interface common to all diagrams. Suggested by Sergio Castro.
  • ADDED: The `diagrams` tool can now add URLs to clusters, file nodes, and entity nodes liking to, respectively, directories, source files, and entity documentation files.
  • CHANGED: Renamed the `diagrams` tool methods `files/0-1` to `all_files/0-1` and `libraries/0-1` to `all_libraries/0-1`.
  • CHANGED: Renamed the `diagrams` tool option `url_protocol/1` to `url_prefixes/2` and added new options `entity_url_suffix_target/2` and `omit_path_prefixes/1`.
  • CHANGED: The `diagrams` tool now uses a bigger font for node labels instead of a bold font style as these fail to render properly in e.g. PDF outputs when using the current Graphviz version (2.36.0).
  • IMPROVED: The `diagrams` tool processing of the `output_directory/1` option now creates the directory if it doesn't exist.
  • FIXED: Regression in the `diagrams` tool, introduced when working around the lack of support for character escapes in some back-end compilers, that would result in DOT warnings. Thanks to Sergio Castro for the bug report.
  • FIXED: Bug in the `diagrams` tool where cross-reference diagrams would not display external entities correctly.
  • FIXED: Bug in the `diagrams` tool where references to multifile predicates for parametric objects would be printed with internal variable names for the parameters.
  • FIXED: Bug in the `diagrams` tool where the name of the generated graph when using the DOT language could be invalid.
  • IMPROVED: The `lgtdoc` tool scripts that generate (X)HTML documentation now add anchors to each predicate section using as name the predicate indicator.
  • UPDATED: The `logtalk_tester.sh` POSIX shell script now returns an exit code of `1` when there are failed unit tests.
  • FIXED: Code coverage bug in the `lgtunit` tool where coverage statistics would be computed using the total number of clauses instead of the total number of user clauses.
  • CHANGED: New version of the `assertions` tool with changed semantics for the `assertion/1-2` predicates, which now always succeed by default. Added support for using the term-expansion mechanism for either suppressing all `assertion/1-2` calls or automatically adding context information to the `assertion/1` calls. Also added sample code for converting assertion failures into errors and updated the sample code for redirecting assertions messages to a file.
  • Tests:
  • ADDED: Two more unit tests for the `uses/2` directive for testing calling user-defined predicates and meta-predicates in `user`.
  • ADDED: Several tests for the `::/1-2` and `{}/1` control constructs for testing runtime bound messages.
  • Contributions:
  • FIXED: Minor changes to the `verdi_neruda` contribution to avoid a warning and a syntax error when using SICStus Prolog as the back-end compiler.
  • Examples:
  • NEW: An example, `jpl`, of a minimal abstraction of the JPL API for calling Java from Logtalk using familiar message sending syntax.
  • CHANGED: Names of the objects defined in the `wrappers` example to avoid name conflicts when loading this example with the `roots` example.
  • IDEs, text editors, and syntax highlighters support:
  • FIXED: TextMate 2 bundle commands for generating (X)HTML, PDF, and text documentation for source files.

New in Logtalk 3.00.0 Alpha 36 (Mar 1, 2014)

  • Logtalk compiler and runtime:
  • ADDED: Support for using runtime `(^^)/1` closures with the `call/2-N` built-in predicates.
  • ADDED: Support for calling Prolog proprietary built-in meta-predicates not declared in the adapter files as long as their meta-predicate templates are usable.
  • IMPROVED: When compiling `call/1` goals, only keep the `call/1` wrapper if necessary to ensure cut semantics.
  • IMPROVED: Compilation of `bagof/3` and `setof/3` calls and performance of calls whose goals are only know at runtime.
  • IMPROVED: Also support message sending static binding for meta-predicates when the sender is an existing object instead of only when it's the object being compiled.
  • FIXED: Don't make assumptions about the list functor. This change avoids a conflict with forthcoming SWI-Prolog versions. Thanks to Jan Wielemaker for his help in diagnosing this issue.
  • FIXED: Compilation of local meta-calls that result in calls to predicates that make meta-calls in the context of the sender.
  • CHANGED: Attempts to use `::Closure` closures as argument to meta-predicates called using message sending now always fails to prevent using the limitation of this closures to local meta-calls to break the encapsulation of the object defining the meta-predicate.
  • Library:
  • UPDATED: The library `os.lgt` file now uses the `getpid/1` built-in predicate provided by B-Prolog 8.1 when using this back-end compiler.
  • Tests:
  • ADDED: Unit tests for error conditions of `bagof/3` and `setof/3` built-in method calls.

New in Logtalk 3.00.0 Alpha 35 (Feb 17, 2014)

  • Logtalk compiler and runtime:
  • CHANGED: The `logtalk::print_message_token/2` method have been extended with two arguments (the line prefix and the list of remaining tokens) as some applications require this additional information. Definitions of this hook predicate must be changed to comply with the `logtalk::print_message_token/4` method declaration.
  • CHANGED: The `predicate_property/2` built-in method now returns the property `number_of_clauses(0)` for declared but not defined predicates.
  • FIXED: The `predicate_property/2` built-in method would not take into account multifile predicate clauses when computing the `number_of_clauses/1` property.
  • FIXED: Don't try to calculate the number of clauses of module multifile predicates defined within objects or categories as that information is not currently available using the reflection API.
  • FIXED: Debug code generated for clauses with pre-compiled heads now uses the form `user::Head` instead of `{Head}` in order to avoid predicate call reporting issues in the `debugger` and `lgtunit` tools.
  • Prolog adapter and integration files:
  • ADDED: Experimental support for Lean Prolog and Quintus Prolog. Consult the `adapters/NOTES.md` file for some of the know issues.
  • ADDED: Support for compiling `op/3` directives where the declared operators are module explicit-qualified by `user`.
  • UPDATED: The GNU Prolog adapter file now only provides dummy definitions for the `current_module/1`, `ensure_loaded/1`, and `use_module/1-2` predicates if they are not already built-in predicates. These dummy definitions are only used to avoid errors when embedding Logtalk in a GNU Prolog executable application.
  • Documentation:
  • IMPROVED: Navigation of the tools HTML documentation.
  • IMPROVED: Appearance of the POSIX shell script man pages.
  • Installers and installation scripts:
  • FIXED: The Windows installer failed to copy the `tests` directory to the Logtalk user folder.
  • Library:
  • ADDED: New utility loader file, `basic_types_loader.lgt`, to load only basic types as a lighter alternative to the `types_loader.lgt` file.
  • Tools:
  • ADDED: Support for generating entity predicate call graph diagrams for a single entity to the `diagrams` tool. These diagrams show internal entity predicate calling relations plus calls to external predicates.
  • FIXED: Replaced usage of the external `which` command by the bash `command` built-in command in the `logtalk_backend_select.sh`, `logtalk_tester.sh`, and `install.sh` POSIX shell scripts to avoid `which` verbose output in some operating-systems.
  • FIXED: The `logtalk_tester.sh` POSIX shell script now also prints the status of the current Logtalk release when printing its version string.
  • Tests:
  • IMPROVED: The `logtalk_tester.sh` POSIX shell script now accepts any directory for saving test results instead of only local directories.
  • FIXED: An issue with testing the `file` and `source` keys of the built-in predicate `logtalk_load_context/2`.

New in Logtalk 3.00.0 Alpha 34 (Jan 30, 2014)

  • Logtalk compiler and runtime:
  • IMPROVED: Performance of database `asserta/1`, `assertz/1`, `retract/1`, and `retractall/1` messages when sent to a known object with the `optimize` flag turned on by using static binding whenever possible.
  • Prolog adapter and integration files:
  • FIXED: Compatibility issues with the YAP adapter file when using versions older than 6.3.4.
  • CHANGED: The POSIX integration scripts for GNU Prolog and SWI-Prolog for compatibility with the bash shell implementation provided by Git for Windows.
  • FIXED: Issues with file paths containing spaces in the integration scripts when checking the version of an existing Logtalk user folder.
  • Tools:
  • IMPROVED: The `lgtdoc` tool now also lists the multifile predicates that an object or a category defines for other entities.
  • FIXED: Bash shell typos in the `logtalk_tester.sh` script.
  • ADDED: Notes on how to use the `logtalk_tester.sh` POSIX shell script on Windows to the `scripts/NOTES.md` file.
  • Library:
  • ADDED: Portable operating-system interface, moved from the `cc` example. It can be loaded using the `os_loader.lgt` file and notes on its limitations can be found in the `os.txt` file.
  • Documentation:
  • CHANGED: Renamed most documentation `NOTES.txt` files that use Markdown syntax to `NOTES.md`.
  • Installers and installation scripts:
  • UPDATED: The `logtalk.iss` Inno Setup script now ensures that `.md` files are recognized as text files if no HKCR registry entry exists when the installer is run by administrator users or if no HKCU registry entry exists when the installer is run by non-administrator users.
  • Examples:
  • UPDATED: The `benchmarks` example to illustrate the use of static binding when sending database messages to known objects.
  • CHANGED: The `cc/osp.lgt` and `cc/os.lgt` example files have been moved to the library. But the `cc/loader.lgt` file and unit test files are kept for compatibility with existing code.
  • Contributions:
  • UPDATED: Port of John Fletcher's Prolog XML parser to release 3.5.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Instructions on using the LaTeX `lstlang0.sty` file.

New in Logtalk 3.00.0 Alpha 33 (Jan 16, 2014)

  • Logtalk compiler and runtime:
  • FIXED: Compiler bug when saving predicate cross-referencing information that resulted in runtime errors when attempting to create objects with an initial set of clauses that includes calls to the `(::)/1` and `(^^)/1` control constructs. Thanks to Andreas Becker for the bug report.
  • FIXED: Bug where the directory from which a settings file have been loaded would not be reported.
  • FIXED: Messages where reporting a parametric entity would print internal variable names.
  • FIXED: A category parameter access bug when the category is indirectly imported by an object due to the use of extended categories.
  • Tools:
  • CHANGED: The `help` tool to remove a dependency on the standard library.
  • IMPROVED: The `diagrams` tool now supports several kinds of entity and file diagrams (including predicate call cross-referencing diagrams and file loading and dependency diagrams), includes multifile predicates when displaying entity interfaces, abstracts the graph language used in the generated diagram files, adds support for references to Prolog modules and Prolog module files, implements a more extensive set of options for diagram customization, greatly improves the appearance of the generated diagrams, and fixes all known bugs in its previous version.
  • Tests:
  • ADDED: Unit tests for the `create_object/4` and `create_category/4` built-in predicates to test creation of objects and categories with an initial set of predicate rules.
  • Library:
  • UPDATED: The library object `term` now uses the `subsumes_term/2`, `ground/1`, and `term_variables/2` ISO Prolog standard predicates as these are now widely supported by compatible backend Prolog compilers.
  • CHANGED: The library object `term` no longer uses the SWI-Prolog and YAP proprietary `(=@=)/2` built-in predicate in its implementation of the `variant/2` predicate due to inconsistent results when there are shared variables between the arguments.
  • Examples:
  • IMPROVED: Documentation and sample queries of the `named_databases` example.

New in Logtalk 3.00.0 Alpha 32 (Dec 19, 2013)

  • Logtalk compiler and runtime:
  • IMPROVED: The read-only `settings_file` flag can now also be set to the value `restrict` in the backend Prolog adapter files to restrict searching of settings files to the Logtalk user directory.
  • FIXED: Throw a permission error on attempts to redefine the `phrase//1` built-in non-terminal.
  • REMOVED: The `uses/3` and `use_module/3` entity properties are no longer supported.
  • ADDED: Entity property `calls/2` for querying cross-reference predicate call properties. These properties include `caller/1`, `line_count/1`, and `as/1` (when using a predicate alias). In the case of an `initialization/1` directive, the caller is identified as `(:-)/1`. Due to limitations on most backend Prolog compilers, the `line_count/1` property points to the clause head and not to the line of the call in the clause body.
  • ADDED: Entity property `number_of_user_clauses/1` for querying the number of user-defined clauses.
  • ADDED: Property `parent/1` to the `logtalk::loaded_file_property/2` method, allowing retrieving file loading dependencies.
  • ADDED: Property `non_terminal/1` to the list of properties returned by the entity predicate property `defines/2` when the predicate resulted from the compilation of a grammar rule.
  • IMPROVED: The `logtalk::loaded_file_property/2` method is now deterministic when called with both arguments instantiated.
  • ADDED: Property `library/1` to the `logtalk::loaded_file_property/2` method.
  • Prolog adapter and integration files:
  • UPDATED: YAP 6.3.4 or a later version is now required when using this backend compiler.
  • Tools:
  • NEW: Assertions tool, defining `assertion/1-2` meta-predicates, for adding assertions to your code.
  • NEW: The `diagrams` tool now support file loading dependency diagrams and predicate cross-referencing diagrams.
  • IMPROVED: Refactored the `diagrams` tool to allow using different output graph languages. Currently, only DOT is supported but GXL and GraphML support is being considered.
  • FIXED: Bug in the `lgtdoc` tool that prevented documenting libraries.
  • CHANGED: The `lgtunit` tool `test/2` dialect outcome argument now supports `true(Test)`, `error(Error)`, and `ball(Ball)` as additional values. Exception errors and terms must now be represented explicitly using the new values.
  • CHANGED: The `lgtunit` tool default messages for failed unit tests now include both the test file path and the test line numbers (allowing better integration with development tools such as PDT). Renamed the predicate `unit/1` to `cover/1` and updated its documentation to clarify its intent (the old name is deprecated but still supported for compatibility with existing code). Replaced all the failed unit test messages by a single one to simplify writing message hooks that intercept failed test messages.
  • IMPROVED: The `lgtunit` tool now ensures that unit test objects are compiled with context-switching calls enabled to help the user in debugging failed unit tests.
  • FIXED: Issue in the `help` tool when using SWI-Prolog V7 due to the empty list no longer being an atom in this backend Prolog compiler. Thanks to Andreas Becker for the bug report.
  • UPDATED: The `help` tool predicates `control/4`, `built_in_predicate/4`, `built_in_method/4`, `built_in_directive/4`, built_in_non_terminal/4` are now public.
  • Tests:
  • FIXED: Only runs tests for the `coinductive/1` directive with backend Prolog compilers that support coinduction.
  • Examples:
  • ADDED: Meta non-terminal unit tests to the `dcgs` example.
  • FIXED: Several issues with the `metaclasses` example.
  • IDEs, text editors, and syntax highlighters support:
  • UPDATED: Add tab triggers to all predicate and entity templates used in the TextMate text editor.

New in Logtalk 3.00.0 Alpha 31 (Dec 19, 2013)

  • Logtalk compiler and runtime:
  • CHANGED: The `{}/1` compiler bypass control construct is now opaque to cuts, ensuring that goals such as `{!}` and `G = !, {G}` have the same semantics.
  • FIXED: Bug where the argument of the `{}/1` compiler bypass control construct could be changed during the second compiler stage.
  • FIXED: Bug where the context-switching control construct would not
  • apply the compiler second pass to its goal argument. The bug fix, however, is
  • partial for runtime calls as some of the necessary information may not longer
  • be available.
  • IMPROVED: Compiler performance when compiling source files.
  • IMPROVED: Perform basic type checking of plain Prolog predicate clauses when compiling source files.
  • CHANGED: `current_predicate/1` and `predicate_property/2` messages to the pseudo-object `user` now call the backend Prolog compiler implementation of these predicates instead of using the corresponding Logtalk methods.
  • FIXED: Case where runtime translation of a message would result in leaking of compile-time only information on referenced objects and messages.
  • IMPROVED: Simplified the code generated by the compilation of messages to parametric object proxies.
  • Prolog adapter and integration files:
  • CHANGED: Removed from the SWI-Prolog adapter file the workaround for the `public` prefix operator defined by this compiler as the potential syntax clashes seldom occur in practice and the source file compilation performance hit was significant.
  • Installers and installation scripts:
  • FIXED: Bug in the `logtalk_version_select.sh` POSIX script that prevented switching the installed version.
  • Tests:
  • ADDED: Unit tests for the entity property built-in predicates for testing with the `source_data` flag turned on.
  • ADDED: Unit tests for the `meta_non_terminal/1` non-terminal directive and for the `alias/3`, `coinductive/1`, `meta_predicate/1`, and `mode/2`, predicate directives.
  • Examples:
  • UPDATED: Examples `expansion` and `inheritance` to avoid a syntax clash with some backend Prolog compilers such as SWI-Prolog that define a `public` prefix operator.

New in Logtalk 3.00.0 Alpha 30 (Nov 13, 2013)

  • Logtalk compiler and runtime:
  • ADDED: Experimental support for using strings in `info/1-2` directives argument pairs where atoms were previously required.
  • ADDED: Experimental support for using a backend Prolog compiler string built-in term type in DCGs.
  • FIXED: Ensure that the internal thread exit handler always succeeds to better deal with implementation differences between backend Prolog compilers.
  • FIXED: Cases where runtime processing of grammar rules could result in leaking of compile-time only information on defined and called non-terminals leading to misleading warnings when reloading files.
  • Prolog adapter and integration files:
  • ADDED: Internal predicates `'$lgt_string'/1` and `'$lgt_string_codes'/2` to the adapter files of all supported backend Prolog compilers for minimal support for a backend Prolog compiler string built-in term type. Currently only defined for SWI-Prolog and ECLiPSe.
  • UPDATED: Remove from the XSB adapter file the workaround for the lack of compliance bug in the implementation of the `thread_sleep/1` predicate, which is now fixed in the latest development version of XSB.
  • UPDATED: The Qu-Prolog adapter file with a better definition for the missing `sub_atom/5` standard predicate.
  • UPDATED: The YAP adapter file to ensure that auto-loading is not used when querying predicate properties.
  • Documentation:
  • IMPROVED: Documentation of the sample settings file.
  • ADDED: Sample loader file, `loader-sample.lgt`.
  • Examples:
  • UPDATED: The loader and tester files of the `dcgs` example for compatibility with upcoming changes with SWI-Prolog, which may change the default value of the Prolog `double_quotes` flag from `codes` to `string`.
  • UPDATED: The `parametric` example for compatibility with upcoming changes with SWI-Prolog, which changes the internal representation for lists.
  • Contributions:
  • UPDATED: The loader file of the `xml_parser` contribution for compatibility with upcoming changes with SWI-Prolog, which may change the default value of the Prolog `double_quotes` flag from `codes` to `string`.

New in Logtalk 2.44.1 (May 28, 2012)

  • Modified the message sending mechanism to call the "before" event handlers before performing the method lookup. This change should have no impact on existing code but allows some interesting applications (e.g. fail instead of throwing an exception when a message is not understood).
  • More consistent handling of compiler flags between setting flag values when compiling/loading a file and when using the set_logtalk_flag/2 built-in predicate: in both cases, setting the "smart_compilation" flag on will turn off the "clean" flag and setting the "clean" flag on will turn off the "smart_compilation" flag. Also, setting the "debug" flag on will turn off both the "smart_compilation" and "clean" flags.
  • Allows the soft-cut control construct, (*->)/2, when natively supported by the back-end Prolog compiler, to be used in the body of grammar rules (after a remark by Daniel Diaz while discussing GNU Prolog support for the soft-cut control construct).
  • Corrected a Logtalk compiler bug when the "source_data" flag is on with back-end Prolog compilers where is not possible to retrieve the position of a read term.
  • Corrected a bug in the compilation of the meta_non_terminal/1 directive where only the first meta-argument would be correctly processed.
  • Updated the ECLiPSe config file to detect when running on Windows 64 bits systems and to ignore non-predicate and non-operator exports when pre-processing lib/1 directives.
  • Updated the unit test framework to print more informative messages for failed unit tests.
  • Added predicate split/4 (for splitting a list into sublists with a given length) to the "listp", "list", and "difflist" library entities.
  • Updated the "cc" example with a definition for the shell/2 predicate for CxProlog.
  • Changed the names of the objects in the "mi" example to avoid a name conflict when running the example unit tests.
  • Corrected a bug in the Windows installer that prevented detection of YAP 64 bits versions. Thanks to Stepan Ipatov for the bug report.
  • Corrected a bug in the Windows installer that prevented users from customizing the installation directory. Thanks to Daniel Moniz for the bug report and to Gavin Lambert for diagnosing the bug.
  • Updated the Windows installer script for improved detection of XSB and to default to install only the per-user files when run by a non-admin user on a computer where Logtalk is already installed.
  • Added basic support for the LaTeX "listings "package. Added notes on the "minted" and "texmates" LaTeX packages.
  • Added notes on the Textastic iPad text editor.
  • Added basic syntax coloring and code folding support for the UltraEdit text editor.
  • Updated the TextMate bundle to disable the automatic indent corrections introduced in the development version of TextMate 2.0.

New in Logtalk 2.44.0 (Mar 7, 2012)

  • Changed the semantics of complementing categories to allow patching both predicate declarations and predicate definitions of complemented objects. This is accomplished by ensuring that predicate declaration and definition lookups start at the complementing categories before looking into the complemented object itself or into its related entities.
  • Updated the Logtalk compiler in order to generate a warning when compiling a complementing category for a complemented object that was compiled with support for complementing categories turned off.
  • Corrected a bug in the processing of meta-calls for meta-predicates where the calling context would be set to "this" instead of "sender" whenever a meta-argument was one of the ::/2, {}/1,

New in Logtalk 2.43.3 (Dec 21, 2011)

  • Changed the compiler to take into account the uses/2 directive when compiling calls to the reflection built-in methods. This change extends the semantics of the uses/2 directive and allows easier migration from plain Prolog applications to Logtalk.
  • Updated the implementation of the predicate_property/2 built-in method, adding a scope/1 property.
  • Updated the Logtalk compiler to add information about a source file name, source file directory, and source file compiler options to the generated Prolog files. In previous versions, this information was registered only when loading a source file. The changes simplify building applications where Logtalk libraries are pre-compiled and pre-loaded.
  • Updated the Logtalk compiler to print the name of the hook object used in the compilation of source files when the "hook" compiler flag is defined.
  • Updated the built-in debugger in order to avoid unnecessary choice points created by back-end Prolog compilers whose retract/1 implementation fails to take advantage of logical update semantics to make calls deterministic.
  • Corrected a bug in the Logtalk compiler runtime handler where it failed to decompile internal entity identifiers when throwing entity existence exceptions.
  • Updated the Lean Prolog config file, adding index/1 directives for some of the dynamic predicates used by the internal Logtalk runtime tables.
  • Updated the SWI-Prolog integration files to test for the availability of the index/1 directive, which is deprecated by the new experimental
  • SWI-Prolog support for just-in-time multi-argument indexing.
  • Added predicates subsequence/4 (for generating subsequences of a list with a given length), substitute/4 (for replacing elements in a list), and hamming_distance/3 to the library "listp" and "list" entities.
  • Added euclidean_norm/2, chebyshev_norm/2, manhattan_norm/2, euclidean_distance/3, chebyshev_distance/3, manhattan_distance/3, and scalar_product/3 predicates to the library "numberlistp" and "numberlist" entities.
  • Corrected some silly bugs in the definition of the "character" library object predicates is_bin_digit/1, is_octal_digit/1, is_dec_digit/1, and is_hex_digit/1.
  • Updated the library "all_loader.lgt" loader file to also load the "meta_compiler_loader.lgt" loader file.

New in Logtalk 2.43.2 (Oct 4, 2011)

  • This is a minor release with some bug fixes and minor compiler and runtime improvements.

New in Logtalk 2.43.1 (Sep 12, 2011)

  • Changed the compiler to take into account the uses/2 directive when compiling calls to the database built-in methods. This change extends the semantics of the uses/2 directive and allows easier migration from plain Prolog applications to Logtalk.
  • Added experimental support for using a predicate template as argument to the coinductive/1 directive. This template allows the specification of which arguments are meaningful for coinductive success. Based on similar functionality found on on Feliks Kluzniak's DRA meta-interpreter.
  • Improved support for debugging coinductive predicates when using the Logtalk built-in debugger.
  • Removed coinduction support for CxProlog. The current version of this compiler lacks a soft-cut built-in predicate or control construct, which is now required by the experimental coinduction implementation.
  • Lifted a long-standing limitation that prevented the user definition of wrapper predicates for the bagof/3 and setof/3 built-in methods whenever the goal argument may use the ^/2 existential quantifier.
  • Added support for the "^" meta-predicate meta-argument mode specifier suggested by Jan Wielemaker and found on SWI-Prolog 5.11.25. This mode specifier is useful when defining wrappers for the bagof/3 and setof/3 built-in methods whenever the goal argument may use the ^/2 existential quantifier.
  • Added "prolog_compiler" and "prolog_loader" compiler flags, which allow passing options to the back-end Prolog compiler built-in predicates that compile to disk and load a (compiled) Prolog flag. The default value for both flags is the empty list.
  • Corrected a bug when compiling calls to Prolog proprietary built-in meta- predicates where the Logtalk compiler could attempt to process non meta- arguments as goals. This bug only manifested itself with some back-end Prolog compilers such as ECLiPSe.
  • Corrected a bug in the processing of conditional compilation directives.
  • Corrected a bug that prevented passing alias/3 directives on calls to the create_object/4, create_category/4, and create_protocol/3 built-in predicates.
  • Removed from the built-in object "logtalk" the decompile_predicate_head/4 and decompile_predicate_indicator/4 deprecated methods.
  • Removed support for the long deprecated Logtalk metapredicate/1 directive.
  • Corrected a performance bug when caching calls to category predicates where the cached entries could be more specific than necessary when working with parametric categories.
  • Improved caching of "super" calls from within prototypes. Previously, all cached entries would be specialized by the value of "self" in order to properly deal with the special cases where an object both instantiates and specializes other objects.
  • Updated the Logtalk compiler to activate any operator declarations found on predicate scope directives during the compilation of the entities that contain the directives.
  • Improved the performance of coinductive predicates when using back-end Prolog compilers such as SICStus Prolog that don't provide the soft-cut control construct but provide the soft-cut built-in meta-predicate (if/3).
  • Corrected a bug where a spurious report of compilation/loading warnings could be printed when a source file was compiled/loaded with the compiler flag "report" turned off.
  • Added a "streamvars" library object, derived from the existing "assignvars" library category, featuring support for adding and retrieving terms (which may be variables) from a "stream" variable.
  • Updated the "coinduction" example, taking advantage of the enhanced coinductive/1 directive and broadening the number of individual examples that can be run using SICStus Prolog. Added a model checking example, using coinduction, coroutining, and constraints, contributed by Neda Saeedloei.
  • Updated the "metapredicates" example with sample code illustrating how to define wrappers for the bagof/3 and setof/3 built-in methods when the meta-argument may contain existentially qualified variables.
  • Updated the "cc" example, correcting predicate definitions for several back-end Prolog compilers and adding some basic unit tests.
  • Updated the "encodings" example with limited support for Lean Prolog.
  • Added missing entries for the meta_non_terminal/1 directive and for the call//N non-terminal to the "help" example.
  • Added a parser for PDDL 3.0 files, contributed by Robert Sasak.
  • Added code folding support to the SubEthaEdit text editor. Added code folding support for conditional compilation blocks to the Kate, Vim, and TextMate text editors.
  • Updated the integration scripts in order to load the library paths file before loading the Logtalk compiler/runtime. This change aims to simplify loading of library and example files from the settings files. In addition, also look for the Logtalk installation directory in $HOME/share when the LOGTALKHOME environment variable is not defined. Thanks To Vítor Santos Costa for the suggestion.
  • Updated the Windows installer in order to support Lean Prolog and detect YAP 64 bits versions.

New in Logtalk 2.43.0 (Aug 1, 2011)

  • Added experimental support for Lean Prolog.
  • Changed error reporting by the Logtalk compiler and runtime. All exception terms now use, whenever possible, the error(Error, logtalk(Goal, Entity)) format. Changed the internal error checking to use, whenever practical, the new '$lgt_must_be'/2-3 internal predicates.
  • Added an "optimize" flag, whose default value is "on". This flag allows the user to turn off existing optimizations for e.g. debugging tasks (the currently implemented optimizations include the removal of redundant calls to true/0 from the body of compiled predicate clauses and the removal of redundant calls to (=)/2 from the body of clauses generated by the expansion of grammar rules).
  • Added a "source_data" flag, whose default value is "on". With this flag set to "on", Logtalk will keep the information represented using mode/2, info/1-2, uses/2, and use_module/2 directives plus source location data (including source file names and line numbers), useful both for debugging and for integration with development tools. This flag can be turned off in order to generate more compact code. The parameter_names/1 object and category property is removed in order to avoid redundancy.
  • Implemented protected/1 and private/1 properties for objects, protocols, and categories. Together with the public/1 property, these properties allows the list of predicates declared in the entity to be accessed for reflective computations. Implemented declares/2, defines/2, includes/3, and provides/3 properties for accessing the properties of predicates declared and defined within an entity. Declaration properties include line_count/1, the line number of the predicate scope directive. Definition properties include line_count/1, the line number of the head of the first clause for the predicate, and number_of_clauses/1, the number of clauses for the predicate. Also implemented experimental uses/3 and use_module/3 properties.
  • Added a predicate property, redefined_from/1, allowing querying about the object or category that contains a predicate definition that is redefined.
  • Added a loaded_file/3 predicate to the "logtalk" built-in object, which complements the existing loaded_file/2 predicate and gives access to the explicit options used when the file was compiled and loaded.
  • Implemented compiler support for the meta_non_terminal/1 directive and the call//N built-in non-terminal.
  • Simplified the compilation of grammar rules by removing the support for dealing with non-terminal scope and existence errors at the grammar rule level instead of the predicate level. Although this feature could be helpful when debugging grammar rules, it complicated the integration of Logtalk with Prolog-native development tools.
  • Updated the Logtalk compiler in order to save the entity clause locations and make this information available to the back-end Prolog compilers.
  • Updated the Logtalk compiler in order to avoid generating unnecessary internal catchall clauses for the predicate declaration and definition tables for dynamic entities.
  • Updated the Logtalk compiler in order to preclude using multifile predicates for breaking object encapsulation. A primary declaration entity must exist, containing both a scope and a multifile directive for the predicate. In addition, defining clauses for a multifile Entity::Functor/Arity without a corresponding multifile/1 directive will now result in a compilation error instead of simply a warning.
  • Removed the Logtalk compiler restriction that forced discontiguous/1 and dynamic/1 directives to precede calls to the declared predicates.
  • Improved the Logtalk compiler report of misspelt calls to non-terminals in grammar rules.
  • Allow the use of the :/1 control construct on the body of grammar rules.
  • When debugging messages specified in uses/2 directives, the message is now printed implicitly qualified as in the source code written by the user.
  • Changed the internal predicates used in the implementation of the built-in multi-threading predicates in order to facilitate the integration with high-level debugging tools that require decompilation of the generated Prolog code.
  • Corrected a bug introduced in Logtalk 2.42.4 on the compilation of entity predicates that call synchronized predicates. This bug resulted in calls being made instead to the non-synchronized forms of the predicates, which would manifest in random failures of thread goals.
  • Corrected a long standing bug where a runtime-compiled meta-call within a category would be compiled as a call to a predicate of the object importing the category instead as a call to a local category predicate.
  • Corrected a long standing bug where entity flag values set locally using the set_logtalk_flag/2 directive would fail to be saved into the entity compiled code.
  • Corrected a long standing bug when abolish a dynamic predicate in a non-prototype object where the abolish/1 method would succeed without the predicate being actually abolished.
  • Corrected a bug in setting the correct execution context when calling a meta-argument that requires a runtime compilation in the context of "sender".
  • Corrected a bug in the compilation of explicit-qualified calls to module meta-predicates where the module qualification would be dropped from the compiled call. Note that these calls will use Logtalk meta-predicate semantics (i.e. the meta-arguments will be called in the context of the caller) instead of the usual Prolog module meta-predicate semantics.
  • Corrected a bug where the coinduction stacks was not initialized when using the

New in Logtalk 2.42.4 (Apr 4, 2011)

  • Added an entity_prefix/2 predicate and two sets of utility predicates, decompile_predicate_heads/2-4 and decompile_predicate_indicators/2-4, to the "logtalk" built-in object. Marked the decompile_predicate_head/4 and decompile_predicate_indicator/4 as deprecated.
  • Added support for preserving the scope information for operators declared using scope directives during compile time. Added information on entity declared operators to the XML documenting files. Updated the text, PDF, and (X)HTML conversion scripts to print out operator information.
  • Applied several low-level optimizations to the Logtalk compiler/runtime.
  • Moved the internal predicates that construct and access the predicate execution context from the compiler to the Prolog config files in order to support fine performance tuning that is Prolog compiler dependent.
  • Updated the implementation of the threaded/1 multi-threading built-in predicate in order to use a small performance optimization based on the term_variables/2 built-in predicate suggested by Timon Van Overveldt. This optimization aims to reduce unnecessary copy and unification of terms. In addition, replace the use of the setup_call_cleanup/3 built-in predicate with the catch/3 built-in predicate by simplifying handling of both master and slave threads, which also improves performance.
  • Corrected a bug in the implementation of the threaded/1 multi-threading built-in predicate where failure by the user to specify independent goals when attempting to use independent and-parallelism would result in zombie threads.
  • More informative exception terms when attempting to declare a synchronized predicate as dynamic or a dynamic predicate as synchronized.
  • Updated the XSB config file in order to support the compilation of modules as objects. Added a definition for the missing setup_call_catcher_cleanup/4 built-in predicate. XSB 3.3 (or a later version) is now required for compatibility with Logtalk.
  • Updated the SWI-Prolog config file in order to provide limited support for the arithmetic_function/1 proprietary directive (arithmetic functions are compile as global instead of as local to the objects or categories defining them).
  • Updated the YAP config file in order to ignore the style_check/1 directive and to interpret the yap_flag/2 directive as a set_prolog_flag/2 directive.
  • Changed the default XSL-FO processor (used to generate the PDF versions of the User and Reference manuals) from XEP to FOP.
  • Updated the "xml_parser" contribution in order to workaround portability issues with Qu-Prolog, SICStus Prolog, and XSB.
  • Updated the "encodings" example in order to ensure that the there is no whitespace before the encoding/1 directive.
  • Updated the "attvars" example in order to support B-Prolog and XSB. Also added support for using attributed variables within Logtalk parametric objects and parametric categories. Thanks to Jan Wielemaker, Vítor Santos Costa, and Bart Demoen for feedback and implementation suggestions.
  • Updated the "profilers" example with preliminary support for the changes to execution profiling in the SICStus Prolog 4.2 version.
  • Updated the "expansion" example with more sample code on how to combine term- and goal-expansion definitions from different hooks objects.
  • Updated the "coinduction" example, adding an experimental keysort/2 coinductive predicate. Thanks to Jan Burse for the suggestion.
  • Updated the "tak" multi-threading example where a missing cut would result in quickly exhausting the local stack when using SWI-Prolog due to the creation of a very large number of unnecessary choice points. Thanks to Timon Van Overveldt for the bug report.
  • Updated the "mtbatch" multi-threading example in order to provide expanded benchmarking of the "tak" example.
  • Updated the MacPorts portfile and the script that updates it in order to remove the calculation of the MD5 checksum, which is being phased out by MacPorts.
  • Updated the Inno Setup GUI Windows installer script in order to workaround a bug on the SWI-Prolog Windows installers where the uninstall procedure fail to delete the SWI-Prolog keys from the Windows registry.

New in Logtalk 2.42.3 (Feb 21, 2011)

  • Allow dynamic predicates declared in a category to be called in "this" from within the category. In previous versions, such calls would result in a compile-time error, forcing these predicates to be called in "self" (using the ::/1 message sending control construct).
  • Added Logtalk compiler support for pre-compiled clause heads (using the {}/1 control construct). This feature is mostly useful when using the term-expansion mechanism.
  • Corrected a bug on the code that simplifies the predicate clauses generated by the compilation of grammar rules. The code would loop when a grammar rule contained a meta-variable, which the Logtalk compiler should (but currently don't) report as illegal (the call/1 control construct should be used instead on this case). Thanks to Nicolas Pelletier for the bug report.
  • Simplified the compilation of calls in the context of the pseudo-object "user".
  • Added a debugger command "p" to the Logtalk built-in debugger. This command prints the current goal using the print/1 predicate when available. Renamed the debugger command "q" to "Q". Corrected a bug where the debugger command "w" would not be recognized. Changed the debugger command "d" to quote terms when necessary.
  • Added a partial implementation of the ISO Prolog predicate_property/2 predicate to the ECLiPSe config file.
  • Updated the SWI-Prolog config file in order to remove the erroneous declaration of the library meta-predicates dde_register_service/2, time/1, and when/2 as built-in meta-predicates.
  • Applied a bug fix to the "flags" contribution made available by its author, Theofrastos Mantadelis. Workaround a compatibility issue with GNU Prolog.
  • Added a memberchk/2 predicate to the library "setp" protocol and "set" object. Added predicates is_control/1, is_newline/1, and is_end_of_line/1 to the library "characterp" and "character" entities.
  • Added an experimental example of using attributed variables within Logtalk objects and categories. Currently requires the use of YAP or SWI-Prolog as the back-end Prolog compiler.
  • Added support for indexicals to the "constraints/sicstus" example.
  • Extended the "delegates" example with a sample implementation of a delegator using a parametric object.
  • Extended the "dynpred" example in order to illustrate how to define category predicates that handle dynamic predicates in the context of "this" and in the context of "self".
  • Added a wall_time/1 predicate to the "cc" example.
  • Updated the syntax highlighting test files, adding missing true/0 and fail/0 control constructs.

New in Logtalk 2.42.2 (Jan 25, 2011)

  • Updated the Logtalk compiler in order to allow checking for modulepredicate properties without requiring importing the predicates into"user" (note, however, that the module must still be loaded prior tothe compilation of source files calling the module predicates).
  • Updated the Logtalk compiler in order to check compile-time instantiatedclosure arguments on call/2-N goals for common programming errors.
  • Updated the Logtalk compiler in order to generate warnings for lambdaexpressions with variables that are not declared as either free variablesor lambda parameters or with variables that are declared as both freevariables and lambda parameters. Thanks to Jan Burse for suggestingthese sanity checks.
  • Updated the Logtalk runtime in order to support using the

New in Logtalk 2.42.1 (Dec 22, 2010)

  • Added support to the Logtalk compiler for detecting and reporting missing dynamic/1 and discontiguous/1 predicate directives.
  • Added a new lint flag, "missing_directives", with a default value of "warning", to all config files. This flag enables printing of compiler warnings for missing dynamic/1, discontiguous/1, and multifile/1 predicate directives.
  • Added support for new meta-predicate template mode indicators: (/) for a predicate indicator, [/] for a list of predicate indicators, and [0] for a list of goals.
  • Corrected a bug in the Logtalk compiler when checking meta-predicate clause heads for errors where the "::" meta-argument mode indicator was still being interpreted as "0".
  • Corrected a bug in the handling of closures (in meta-calls) that are used to construct calls to control constructs or built-in predicates which could result in calling some meta-arguments in the wrong context. Thanks to Ulrich Neumerkel for the illustrating example in the SWI-Prolog mailing list.
  • Updated the Logtalk compiler in order to avoid printing warnings about missing references to the "expanding" and "monitoring" built-in protocols when compiling modules as objects.
  • Reverted the changes in version 2.39.2 that allowed the pseudo-object "user" to virtually contain the definition of all Prolog built-in predicates. This could lead to different results depending on the back-end Prolog compiler, specially when calling meta-predicates in the context of "user".
  • Corrected a bug in the SWI-Prolog "swihooks.lgt" file that resulted in a bogus error message about an invalid Logtalk flag when consulting a Prolog file when there is a Logtalk source file with the same name in the same directory.
  • Added missing support for proprietary built-in meta-predicates to the B-Prolog, SICStus Prolog, SWI-Prolog, XSB, and YAP config files.
  • Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order to override the meta-predicate templates for the consult/1 and load_files/2 built-in predicates.
  • Added an implementation of a map_reduce/5 meta-predicate to the library object "meta".
  • Added an implementation of a command_line_arguments/1 predicate to the "cc" example.
  • Updated the "lambdas" and "metapredicates" examples, illustrating how to calculate Fibonacci numbers using a fold left meta-predicate. Updated the "metapredicates" example with an usage example of the map_reduce/5 meta- predicate.
  • Updated the "problog" example, adding preliminary support for the new annotated disjunctions syntax.
  • Added a "magic" element to the Logtalk mime-type file for the freedesktop.org shared mime-info database.

New in Logtalk 2.42.0 (Dec 2, 2010)

  • Added an implementation of persistent object flags, contributed by Theofrastos Mantadelis.
  • Added a new pair of built-in predicates, conforms_to_protocol/2-3, implementing the transitive closure of the protocol implementation relation.
  • Added an experimental directive, annotation/1, for supporting Logtalk integration with other languages such as ProbLog and CHR.
  • Reverted the changes in the previous release that allowed a stand-alone object to (also) be used as root of class hierarchies.
  • Defined a set of low-level utility predicates, available as public methods from the "logtalk" built-in object. Modified the (virtual) compilation of this object in order to always interpret it as a prototype.
  • Simplified and improved the performance of the predicate lookup caching code, resulting in improved dynamic binding performance. Simplified and improved the performance of the built-in methods asserta/1 and assertz/1 when asserting a clause for a new predicate. Simplified the updating of the internal table for dynamically defined predicates when using the built-in methods retract/1 and retractall/1. Simplified the compiler code used when creating new entities.
  • Changed the semantics of the "dynamic_declarations" flag so that it is only checked when sending an asserta/1 or assertz/1 message to an object. Local asserting of clauses for new predicates is now always allowed.
  • Updated the implementation of the built-in method abolish/1 in order to also support abolishing of local dynamic predicates.
  • Improved the performance of source file compilation by avoiding redundant cleaning of auxiliary compilation predicates.
  • Modified the Logtalk compiler in order to interpret occurrences of ":" in module meta-predicate directives as equivalent to "::" instead of "0" in Logtalk meta-predicate directives. This change follows the current trend for de facto standardization for meta-predicate directives but is still problematic for some Prolog compilers. Logtalk will throw an exception when compiling calls to Prolog built-in meta-predicates or Prolog module meta-predicates whose template includes a ":" meta-argument specifier.
  • Improved compiler error checking for entity relations, detecting and reporting most incorrect attempts to extend, instantiate, specialize, import, implement, or complement the wrong kind of entities.
  • Implemented a parameter_names/1 property for parametric categories and parametric objects. Implemented a public/1 property for objects, protocols, and categories.
  • Corrected a bug where the compilation (or dynamic creation) of parametric objects or parametric categories with instantiated parameters would fail to discard the parameter values in the runtime tables of defined entities.
  • Added support for using explicit object qualification and explicit module qualification in meta_predicate/1 directives.
  • Updated the implementation of the directives dynamic/1, discontiguous/1, and multifile/1 in order to remove explicit module qualification from the predicate indicator arguments when the module is "user".
  • Updated the compilation of clause heads for module multifile predicates in order to remove the explicit module qualification when the module is "user".
  • Updated the implementation of the built-in predicate logtalk_compile/2 in order to ensure the same compiler options semantics for compiled code as the built-in predicate logtalk_load/2.
  • Avoid a spurious choice-point created when reporting singleton variables during source file compilation with some back-end Prolog compilers such as ECLiPSe and SWI-Prolog.
  • Corrected a error handling issue in the implementation of the built-in predicates logtalk_compile/2 and logtalk_load/2 where the error terms would be wrapped in an extra error/2 term.
  • Updated the Logtalk compiler in order to also delete the intermediate files generated by the back-end Prolog compilers when compiling the Prolog files generated by Logtalk with the "clean" flag is set to "on".
  • Updated the built-in objects, "logtalk" and "debugger", and the built-in protocols, "expanding" and "monitoring", to support static binding.
  • Updated the term-expansion mechanism implementation in order to support the use of the {}/1 compiler bypass control construct to wrap elements in the list of expanded terms (returned by the term_expansion/2 built-in method when used in hook objects), to allow expansion of the end_of_file term, and to throw an instantiation error when term-expansion generates a list containing an element that is a variable.
  • Interpret "prolog_compatible_version", "tabling", and "coinduction" as read-only flags. Removed documentation on the deleted "multifile_directive" flag. Added missing documentation on the "prolog_compatible_version" flag.
  • Added support for accessing the compiler input stream using the built-in predicate logtalk_load_context/2 with the key "stream".
  • Improved compile-time and runtime error handling for the blackboard built-in predicates.
  • Updated the implementation of the built-in predicate set_logtalk_flag/2 in order to switch off the clean (smart_compilation) flag when switching on the smart_compilation (clean) flag.
  • Recognize logtalk_library_path/2 as a Logtalk built-in predicate when compiling source files.
  • Corrected a bug where abolishing a dynamic category or a dynamic protocol compiled in debug mode would fail to update the internal table of entities compiled in debug mode.
  • Corrected a bug in the processing of meta-calls when the called goal is an explicit message to an object where the receiver instead of the sender would be tested for events support.
  • Corrected a static binding bug where meta-predicates called within other meta-predicates would not be correctly compiled. This bug prevented the "mtbatch" example from running.
  • Corrected a bug in the Logtalk compiler second pass where processing calls to non-standard Prolog built-in meta-predicates would fail to test for Logtalk built-in predicates and Logtalk built-in methods with the same predicate indicator.
  • Removed references to the de facto standard predicates retractall/1, compare/3, and callable/1 from all the config files of Prolog compilers where these predicates are built-in.
  • Added declaration of file name extensions for intermediate files generated by the Prolog compilers themselves to the config files of B-Prolog, Ciao, Qu-Prolog, and XSB.
  • Updated the config files of SICStus Prolog, SWI-Prolog, and YAP in order to parse the Prolog proprietary directive public/1 (whose semantics depend on the Prolog compiler).
  • Updated the Qu-Prolog config file with support for accessing environment variables and updated definitions of file-system access predicates that avoid issues with file paths containing spaces. Logtalk now requires Qu-Prolog 8.12 or a later version.
  • Updated the GNU Prolog config file in order to support the built_in_fd/0, built_in_fd/1, built_in/0, built_in/1, and ensure_linked/1 proprietary directives.
  • Workaround a B-Prolog 7.4 bug where the built-in predicate callable/1 is missing the property "built_in". Declared the predicates and/3, equiv/3, and or/3 as built-in predicates. Added support for table/1 directives whose argument is predicate template with the cardinality limit omitted.
  • Updated the Qu-Prolog integration files in order to avoid a segmentation fault when using a 32 bits compilation of Qu-Prolog. Thanks to Peter Robinson for his help in solving this problem.
  • Added a YAP integration file, "yaphooks.pl", defining the hook predicate user:prolog_predicate_name/2.
  • Commented out the setting of the proprietary Prolog flag "iso" to "true" in the SWI-Prolog config file due to all the module libraries that fail to compile/work in "iso" mode. Updated the implementation of the internal predicate '$lgt_expand_path'/2 in order to also expand directory paths. Added a workaround for ignoring the new operator public/1 introduced in SWI-Prolog 5.11.9 while compiling Logtalk source files.
  • Renamed the SWI-Prolog integration files, "swihook.pl" and "xpcehook.pl" to, respectively, "swihooks.pl" and "xpcehooks.pl".
  • Added a definition for the hook predicate user:prolog_predicate_name/2 to the SWI-Prolog hook file, "swihooks.pl". This hook predicate allows a more user-friendly experience when using the SWI-Prolog profiler with Logtalk. Requires SWI-Prolog 5.10.2 (stable) or 5.11.8 (development) or later versions. Thanks to Jan Wielemaker for his support on improving the usage of the user:prolog_predicate_name/2 hook on the SWI-Prolog profiler.
  • Updated the library "types_loader.lgt" file to also load the heaps library files.
  • Added an example, "diagrams", illustrating how to generate entity diagrams for a source file and for a library of source files using Logtalk reflection features and the DOT language.
  • Added an example, "profilers", featuring simple wrappers for the SICStus Prolog 4 profiler and the YAP count profiler.
  • Added an example, "delegates", illustrating an implementation of the delegation design pattern.
  • Added a highly experimental example, "chr", of CHR integration. Currently requires the use of Qu-Prolog, SICStus Prolog, SWI-Prolog, or YAP as the back-end Prolog compiler.
  • Added an experimental example, "constraints/sicstus", illustrating how to use the SICStus Prolog CLP(FD) library within objects and categories.
  • Added individual examples of using B-Prolog Action Rules within objects to the "constraints/bp" example.
  • Updated the "cc" example, adding support for Qu-Prolog, adding an operating_system_type/1 predicate, and correcting the declaration of the predicate shell/1.
  • Updated the "help" example, allowing it to be loaded when using any supported back-end Prolog compiler. In addition, when help is requested for a functor that is both a built-in directive and a built-in predicate, both web pages will be open.
  • Updated the "benchmarks" example in order to use more realistic tests for the database built-in predicates and the methods assertz/1 and retract/1.
  • Updated the "operators" example in order to avoid a unit test failure when reloading the "triple.lgt" source file.
  • Updated the "modules" example in order to use the use_module/2 directive (which is supported by Logtalk) instead of the use_module/1 directive (which is only supported for some back-end Prolog compilers) in the "client" module.
  • Updated the "problog" example. Logtalk integration with ProbLog is much improved but requires the latest development version of ProbLog. Thanks to Theofrastos Mantadelis for his support on ProbLog.
  • Added a fully connected graph path search problem, contributed by Theofrastos Mantadelis, to the "benchmarks" example.
  • Corrected a bug in the use of the built-in predicate object_property/2 in the "roots" example that would result in errors when deleting dynamic objects.
  • Updated the "examples/tester.sh" script in order to also work when running Logtalk without using the installer packages or scripts.
  • Updated the "build_release.sh" script in order to calculate all the necessary checksums when building the MacOS X installer package.
  • Corrected a bug in the "logtalk_backend_select" shell script that prevented selecting GNU Prolog as the default back-end Prolog compiler.

New in Logtalk 2.41.1 (Oct 7, 2010)

  • Modified the compilation of objects that don't instantiate, specialize, or extend other objects in order to allow their use as roots of either class hierarchies or prototype hierarchies. This change simplifies the definition of class hierarchies when reflexive designs are not required.
  • Added support for the blackboard built-in predicates (bb_put/2, bb_get/2, bb_delete/2, and bb_update/3) found on some Prolog compilers such as YAP and SICStus Prolog. Note that a Prolog compiler natively supporting these predicates is required. This support aims to facilitate porting of Prolog applications using the blackboard; these predicates should be avoided when writing portable Logtalk applications.
  • Simplified the internal representation of entity prefixes and entity predicate functors. The new representation is also a bit more compact.
  • Corrected a bug in the compilation of clauses for multifile predicates defined in the pseudo-object "user" where the execution context for the clause body goals would be undefined.
  • Corrected an optimization bug in the compilation of grammar rules that resulted in failed compilations whenever the body of a grammar rule was equivalent to fail/0. Thanks to Ulrich Neumerkel for the bug report.
  • Corrected an optimization bug in the compilation of grammar rules that resulted in incorrect compilations when folding pairs of consecutive variable unifications generated as a by-product of the translation of grammar rules into clauses. Thanks to Ulrich Neumerkel for the bug report.
  • Corrected a bug in the table of ISO Prolog specified arithmetic functions that is used by the Logtalk compiler when checking arithmetic expressions for portability (wrong arity of the bitwise complement function).
  • Corrected a bug in the compilation of calls to Prolog proprietary built-in meta-predicates that are redefined within an object or category.
  • Corrected a race condition bug when running multi-threaded code compiled in debug mode that could result in bogus failures.
  • Corrected a bug in the definition of the built-in object "logtalk" when used as a root for a class hierarchy (two missing linking clauses for the implemented protocols).
  • Set the default value for the Logtalk flag "code_prefix" to '$' for all supported back-end Prolog compilers.
  • Updated the ECLiPSe config file in order to support compilation of the proprietary built-in predicate set_error_handler/2 and correct the buggy compilation of the proprietary built-in predicate set_event_handler/2. These two built-in predicates are only supported, however, when used as directives.
  • Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order to correct a bug in the compilation of the ensure_loaded/1 directive when used within a Prolog module being compiled as an object.
  • Updated the YAP config file to workaround a bug in the built-in predicate absolute_file_name/3 where a directory can be returned when looking for a regular file (fixed in the current beta of the 6.0.7 version).
  • Restored the hacks in the SWI-Prolog and YAP config files, broken in the previous release, that allow calling the Prolog built-in predicates phrase/2-3 with a Object::GRBody goal in the first argument.
  • Updated the SWI-Prolog config file in order to use the numbervars/3 option singleton(true) in the auxiliary predicates for pretty printing non-ground terms.
  • Added predicates intersection/4 and union/4 to the library support for ordered sets (protocol "setp" and object "set").
  • Added a highly experimental example of ProbLog integration. Requires Logtalk to be run with YAP; it may also require a patched version of the ProbLog distribution.
  • Updated the "multifile" example to illustrate how the body of clauses for multifile predicates is compiled.
  • Removed some unused files from the "coinduction" example.

New in Logtalk 2.41.0 (Sep 15, 2010)

  • Added experimental support for coinductive predicates to the Logtalk compiler using a coinductive/1 directive. Requires a back-end Prolog compiler providing minimal support for cyclic terms (currently, YAP, CxProlog, ECLiPSe, SICStus Prolog, and SWI-Prolog). Thanks to Gopal Gupta, Neda Saeedloei, Feliks Kluzniak, Ajay Bansal, and Vitor Santos Costa for feedback and implementation suggestions.
  • Added a "coinductive" predicate property.
  • Added a "coinduction" read-only flag.
  • Added a new Logtalk built-in predicate, logtalk_load_context/2, similar to the prolog_load_context/2 built-in predicate found in several Prolog compilers, in order to provide access to the compilation/loading context. The initial set of supported context keys is {entity_name, entity_prefix, entity_type, file, directory, term_position}. The term_position key is only supported in back-end Prolog compilers that provide the start and end lines of a read term.
  • Simplified the Logtalk compiler by using stream aliases.
  • Updated the implementation of the create_object/4 and create_category/4 built-in predicates in order to also support the definition of an initial set of grammar rules.
  • Corrected a bug in the runtime error handler that would result in entity existence errors being reported as (internal) predicate existence errors.
  • Corrected a bug where the protocols implemented by the built-in object "logtalk" would not be returned by the implements_protocol/2-3 built-in predicates.
  • Corrected a bug where multifile/1 directives would only accept a single predicate indicator as argument.
  • Corrected a bug where compiling an explicit module-qualified module meta- argument would result in a compilation loop when the qualified goal is a variable.
  • Ciao Prolog 1.10 is no longer supported as this compiler fails to provide support for ISO Prolog standard stream aliases and the stream_property/2 built-in predicate. Support for this Prolog compiler will be reevaluated when a new stable version becomes available.
  • ECLiPSe 6.0#141 or a later version is now required when using this back-end Prolog compiler due to use of stream aliases in the Logtalk compiler.
  • Updated the CxProlog config file to require version 0.97.5 or later. This version adds the epsilon/0 arithmetic constant that is used in the library unit test support.
  • Updated the SWI-Prolog and YAP config files in order to support the expects_dialect/1 proprietary directive.
  • Removed the definitions of the no longer necessary '$lgt_keysort'/2 and '$lgt_sort'/2 internal predicates from the supported config files.
  • Updated the shell scripts used for generating the PDF versions of the Logtalk User and Reference Manuals for better performance and to fix an incompatibility with recent versions of the xsltproc XSLT processor.
  • Updated the "library/lgtunit_loader.lgt" helper file to avoid entity redefinition warnings when loading the "library/all_loader.lgt" helper file from the "library" directory itself.
  • Added an example, "adventure", with Logtalk adaptations of Prolog text adventures originally written by David Matuszek and Dan Cliburn.
  • Added an experimental example of coinduction when using CxProlog, ECLiPSe, SICStus Prolog, SWI-Prolog, or YAP as the back-end Prolog compiler.
  • Updated the "constraints/swipl/loader.lgt" helper file to avoid the errors generated when loading the CLP(FD) library with the SWI-Prolog "iso" flag set to "true".
  • Updated the "dcgs" example unit tests to avoid a compilation error when using SWI-Prolog 5.11.3 and later versions due to changes in this compiler parser for stricter ISO Prolog syntax.
  • Updated the "help" example in order to provide help for Logtalk built-in directives.
  • Updated the "examples/tester.sh" script in order to fix a compatibility issue with XSB.
  • Added support for the SHJS syntax highlighter.
  • Added syntax coloring support for the new coinductive/1 predicate directive to all supported text editors and syntax highlighters.
  • Updated the TextMate commands used for generating (X)HTML, PDF, and TXT documentation in order to be independent of the default settings for the "altdirs" and "xmldir" compiler flags.

New in Logtalk 2.40.1 (Jun 30, 2010)

  • Restored support for GNU Prolog. Requires GNU Prolog version 1.4.0 (or later), which provides support for the ISO Prolog predicate directive multifile/1.
  • Improved the built-in debugger by making explicit the calls to the (\+)/1 built-in predicate.
  • Corrected a bug where a call to a local predicate would always fail when an object or category contains a declared but not defined non-terminal.
  • Corrected a bug in the compilation of (\+)//1 calls in grammar rules. Thanks to Bart Demoen, Ulrich Neumerkel, and Jan Burse for driving my attention to this bug.
  • Recognize retractall/1, ground/1, keysort/2, sort/2, and numbervars/3 as de facto Prolog standard built-in predicates. Calls to these predicates will no longer be reported when the portability flag is set to "warning". In addition, added syntax coloring support for these predicates.
  • Recognize e/0 and pi/0 as de facto Prolog standard built-in arithmetic functions. Calls to these functions will no longer be reported when the portability flag is set to "warning". In addition, added syntax coloring support for these two functions.
  • Updated the internal hook predicate '$lgt_tr_predicate_indicators'/2, used in the config files for processing proprietary Prolog directives, in order to translate both grammar rule non-terminal indicators and predicate indicators. A possible usage scenario is tabling grammar rule non-terminals.
  • Updated the definition of the Logtalk flag "prolog_version" for Ciao in order to compute major, minor, and patch version numbers.
  • Corrected a bug in the goal_expansion/2 clauses found on the SWI-Prolog and YAP config files that are used for expanding calls to the Prolog built-in predicates phrase/2-3 with a Object::GrammarRuleBody in the first argument.
  • Updated the B-Prolog config file to require version 7.4 or later and to workaround a missing "built_in" property for the built-in predicate setup_call_cleanup/3.
  • Added unit tests for the "securemp" and "constraints/gprolog" examples.
  • Improved the "debug_hooks" example, showing how to use a parametric hook object in alternative to two simple hook objects.
  • Improved the "help" example by adding a helper predicate for quick access to the Logtalk User and Reference manuals. Added support for CxProlog.
  • Added partial support for CxProlog to the "cc" example in order to support the "help" example.
  • Updated the "multifile" example in order to avoid compilation errors when using a back-end Prolog compiler (such as B-Prolog) that doesn't support discontiguous predicates.
  • Improved the "examples/tester.sh" script in order to print the current time and date, plus the Logtalk and back-end Prolog compiler versions, and to abstract the different syntax requirements for initialization goals used by Prolog compilers.

New in Logtalk 2.40.0 (Jun 16, 2010)

  • Bundled version 1.0 of Verdi Neruda, a meta-interpreter collection that includes both top-down and bottom-up search strategies. Thanks to Victor Lagerkvist for his contribution.
  • Added experimental on-line help support using the new "help" example. See the example "NOTES.txt" file for a list of current operating-system and back-end Prolog compiler limitations.
  • Changed the representation of meta-argument which are goals in the meta_predicate/1 directives from "::" to "0". When compiling calls to Prolog module meta-predicates, the meta-argument indicator ":" is interpreted as "0", which will work for most cases. Due to the lack of standardization of the Prolog meta_predicate/1 directive, special care
  • must taken when calling both Prolog proprietary built-in meta-predicates and Prolog module meta-predicates.
  • Changed the implementation of the term and goal expansion mechanisms in order to only be performed automatically by the Logtalk compiler when compiling a source file. When dynamically creating entities at runtime or when asserting clauses, the term_expansion/2 and goal_expansion/2 built-in methods must be called explicitly.
  • Corrected a bug when using the ::/2, ::/1, ^^/2, and :/1 Logtalk controlconstructs from bagof/3 and setof/3 calls with existentially quantified variables. This bug could result in missing alternative solutions when backtracking over the bagof/3 and setof/3 calls. Thanks to Victor Lagerkvist for his help in diagnosing the problem.
  • Updated the Logtalk compiler implementation in order to simplify passing of compilation context data.
  • Updated the Logtalk compiler in order to throw a permission error if the user attempts to define clauses for the (>>)/2 control construct used in lambda expressions.
  • Updated the Logtalk compiler in order to preprocess proprietary Prolog directives within entities (using any defined config file hooks) after term-expansion but before trying to compile the directives as Logtalk directives. This change allows for simpler and more robust handling of Prolog proprietary directives, specially module directives.
  • Recognize callable/1 and compare/3 as Prolog standard built-in predicates.
  • Calls to these predicates will no longer be reported when the portability flag is set to "warning". In addtion, added syntax coloring support for these two predicates.
  • Added support for the built-in non-terminal call//1 specified in the ISO Prolog standardization proposal for Definite Clause Grammars.
  • Improved the implementation of Definite Clause Grammars in order to rewrite exceptions generated when processing NonTerminal, ::NonTerminal, and Obj::NonTerminal goals in grammar rules to refer to non-terminals instead of compiled predicate forms when running in debug mode.
  • Changed the scope of the built-in methods phrase/2-3 from public to private for consistent meta-predicate semantics. Updated the "dcgs" example and the corresponding unit tests in order to comply with the new phrase/2-3 predicate scope.
  • Corrected a bug in the implementation of the phrase/2-3 built-in methods that could allow access to non-visible grammar rules.
  • Improved performance of Module:NonTerminal goals in grammar rules.
  • Corrected a bug in the implementation of the dynamic/0 directive where the Logtalk compiler would fail to generate all the necessary dynamic/1 predicate directives. Bug introduced in the previous stable release.
  • Corrected a bug in the implementation of the clause/2 built-in method where an error would be generated when trying to access clauses for local dynamic predicates without a corresponding dynamic/1 directive within objects and categories with a dynamic/0 directive.
  • Corrected a bug in the compilation of meta-calls and the /2 control construct in debug mode where the meta-arguments would not be compiled in debug mode.
  • Corrected a silly bug in the compilation of proprietary Prolog directives where meta-arguments would be compiled in debug mode if the "debug" flag as "off" and in normal mode of the "debug" flag was "on".
  • Corrected a bug in the processing of compiler options when recursively calling the logtalk_load/2 and logtalk_compile/2 built-in predicates with a list of source files which could result in failure to apply the compiler options to the compilation of all files.
  • Updated the ECLiPSe config file to always use atoms instead of strings in the file-system access internal predicates. Corrected some bugs in the processing of proprietary directives.
  • Added goal_expansion/2 clauses to the SWI-Prolog and YAP config files in order to allow calling the Prolog built-in predicates phrase/2-3 with a
  • Object::GrammarRuleBody in the first argument.
  • Corrected the definitions of the predicates '$lgt_current_date'/3 and '$lgt_current_time'/3 in the Qu-Prolog config file and rename it to "qp.pl". Updated the minimum required version to 8.11 and changed the value of the Logtalk flag "prolog_dialect" from "qu" to "qp" in order to match the value of the new Prolog flag "dialect" implemented in
  • Qu-Prolog 8.11. Added support for the "smart_compilation" compiler flag.
  • Improved startup time when using the "qplgt.sh" integration script.
  • Corrected a typo in the template of the predicate subsumes/2 in the library protocol "termp".
  • The SWI-Prolog POSIX integration shell script, "swilgt", now tries first to use a "swipl" executable and, if not found, tries to use instead a "pl" executable (thus preferring a recent SWI-Prolog version over an older one).
  • Added man pages for the POSIX "*lgt" Prolog integration shell scripts, for the Logtalk management shell scripts, and for the XML documenting files processing scripts.
  • Renamed the "logtalk_select" shell script to "logtalk_version_select".
  • Renamed the "cplgtdirs.*" scripts to "logtalk_user_setup.*".
  • Include a XHTML version of the library documentation on the directory "library/docs".
  • Improved the "examples/tester.sh" script in order to support running the example unit tests compiled in debug mode.
  • Added a a simple maze search problem using a depth-first strategy with loop detection to the "benchmarks" example.
  • Corrected a wrong declaration for the predicate environment_variable/2 in the "cc" example. Solved portability issues with Ciao Prolog, ECLiPSe, and XSB.
  • Added missing support for syntax coloring of the "complements" entity relation to Pygments.

New in Logtalk 2.39.2 (May 4, 2010)

  • Changed the internal representation of most entity properties to use amore compact bit representation, stored in the tables of loaded entities.
  • Changed the internal representation of non-critical predicate propertiesto use a more compact bit representation, which includes the "multifile"predicate property, stored in the tables of entity declared predicates.
  • Changed the type of the built-in methods (\+)/1, call/N, once/1, catch/3,throw/1, bagof/3, findall/3, forall/2, setof/3, self/1, sender/1, this/1and parameter/2 from local predicates to private predicates. Corrected abug in the predicate_property/2 built-in method where some of those built-in methods would be reported as public. These changes should only requireupdating any application code that explicitly expected the exception termpermission_error(access, local_predicate, Pred), which have been changedto permission_error(access, private_predicate, Pred).
  • Added support for parsing operator declarations in the uses/2, public/1,protected/1, and private/1 directives.
  • Updated the Logtalk compiler in order to avoid generating unnecessary (butharmless) catchall clauses for predicate declaration lookups when thereare no local predicate declarations.
  • Updated the Logtalk compiler in order to convert calls to the non-standardassert/1 built-in predicate as calls to the assertz/1 built-in predicate.
  • Updated the Logtalk compiler in order to reject use_module/2 directiveswhere the first argument is not an atom (assumed to be the module name).This change results in using the config files to find the module name fromthe module file name when the first argument of the use_module/2 directiveis a compound term (as usual when using library notation).
  • Updated the definition of the pseudo-object "user" in order to virtuallycontain the definition of all Prolog built-in predicates.
  • Updated the definition of the built-in object "logtalk" in order toimplement the built-in protocols "expanding" and "monitoring".
  • Updated the "expanding" built-in protocol in order to declare thepredicates goal_expansion/2 and term_expansion/2 as both dynamic andmultifile.
  • Corrected a bug in the Logtalk compiler where a misleading error would bereported when a source file contains a clause or a directive that is aplain variable.
  • Corrected a bug in the Logtalk compiler where a broken term_expansion/2definition expanding a term to a variable would succeed instead ofthrowing an error.
  • Optimized meta-calls when using closures wrapped in the {}/1 controlconstruct. Removed redundant check for debugging mode when executingmeta-calls.
  • Corrected a potential bug in the Logtalk runtime when updating the meta-call context for lambda expressions that could result in losing part ofthe context.
  • Corrected a bug in the Logtalk runtime where errors generated when callingthe phrase/2 built-in method would be reported as resulting from calls tothe phrase/3 built-in method.
  • Corrected a bug in the implementation of the predicate_property/2 built-inmethod that allowed access to properties on non-visible predicates.
  • Updated the predicate_property/2 built-in method in order to generatemeta-predicate templates for the call/2-N built-in methods, to return"multifile" properties for Prolog built-in predicates, and to supporttwo new properties, "logtalk" and "prolog", that allows us to distinguishbetween predicates defined by Logtalk and predicates defined by the back-end Prolog compiler.
  • Corrected a bug in the Logtalk built-in debugger that would prevent userinteraction at the "fact" and "rule" unification ports by always skippingto the next port, ignoring leash settings.
  • Corrected a bug in the processing of the conditional directives that wouldresult in an hanging else/0 directive when the "then" block of a false "if"was a "if...else...endif" block.
  • Added support for the predicate renaming operator as/2 found on SWI-Prologand YAP but only when parsing use_module/2 directives in modules that arebeing compiled as objects.
  • Updated the SWI-Prolog hooks file, "configs/swihook.pl", in order to avoidintercepting Prolog ensure_loaded/1 calls by the prolog_load_file/2 hookpredicate. This change solves issues when calling Prolog module librarypredicates from within Logtalk objects and categories. Thanks to ParkerJones for the bug report.
  • Changed the predicate '$lgt_pl_meta_predicate'/2 in all supported configfiles to '$lgt_pl_meta_predicate'/3 in order to simplify the handling ofproprietary built-in meta-predicates by the Logtalk compiler and runtime.
  • Updated the ECLiPSe, SICStus Prolog, SWI-Prolog, and YAP config files inorder to preprocess the use_module/2 directive, converting the module filename into the module name.
  • Updated the SWI-Prolog and YAP config files in order to preprocess thereexport/2 module directive, converting the module file name into themodule name, and in order to ignore the meta-predicate declaration ofthe directives/predicates use_module/1-2.
  • Updated the SWI-Prolog config file with more robust and fast code forpreprocessing module directives when the modules are already loaded.Also added support for the new use_foreign_library/1-2 proprietarydirectives and partial support for modules that take their name fromthe file name.
  • Updated the YAP config file in order to use the more standard predicateworking_directory/2.
  • Added support for parsing use_module/3 directives to the SICStus Prologconfig files. Improved finding the module name from the module file namewhen preprocessing the directives use_module/1-2.
  • Moved the "eclipse6.pl" config file to the "configs/unsupported" folderas Logtalk only supports ECLiPSe using the "eclipse6iso.pl" config file.Updated the "eclipse6iso.pl" config file with partial parsing solutionsfor some proprietary ECLiPSe directives.
  • Updated the ECLiPSe config file with more robust code for parsinguse_module/1 directives, capable of processing both ECLiPSe module/1directives and the module/2 directives used by other Prolog compilers.
  • Updated the B-Prolog config file in order to support foreach/2-N callsfor any valid value of N (previous versions of the config file onlysupported foreach/2-4 calls).
  • Updated the Qu-Prolog integration script, "qplgt.sh", in order to uselarger memory values for the code and environment areas an in preparationfor its next release.
  • Replaced the predicate as_dictionary/2 in the library object "bintree"with a new implementation, contributed by Paul Fodor, that returns asemi-balanced tree.
  • Added a predicate and an operator definition, =~=/2, for comparing floatsfor approximate equality to the library object "lgtunit". Updated the unittests of several examples in order to use this predicate.
  • Updated the "examples/tester.sh" script in order to report an error whenthe default Prolog back-end compiler is not found. Thanks to Parker Jonesfor the bug report. Updated the script to also report errors that are notwritten to standard error and to print a note when a unit test is notapplicable.
  • Updated the "encodings" example unit test loader file to correctly detectback-end Prolog compilers supporting the encoding/1 directive. Added newtest files for each supported text encoding.
  • Added some more unit tests for the "reflection" example.
  • Fixed a typo that prevented running the "mtbatch" example using XSB as theback-end Prolog compiler.
  • Simplified the "cc" example when using SICStus Prolog 4.x as the back-endcompiler by moving importing of the "system3" library shell/1-2 predicatesto the config file.
  • Added unit tests for the "constraints", "hooks", "miscellaneous", and"people" examples.
  • Corrected a bug in the "lambdas" example (a missing meta_predicate/1directive in the object "sigma").
  • Improved "inheritance" example in order to better illustrate inheritancesemantics for classes and instances. Added a set of unit tests.
  • Updated the implementation of the best first heuristic state space searchmethod in the "searching" example in order to avoid unnecessary meta-calls.

New in Logtalk 2.39.1 (Mar 31, 2010)

  • Updated the Logtalk compiler and runtime to support calls to the built-inpredicates threaded_peek/2 and threaded_exit/2 where the second argument(thread tag) is only instantiated at runtime. Updated the exception termthrown by threaded_exit/2 when the thread goal don't exist to use error/3instead of error/2.
  • Updated the implementation of the uses/2 directive in order to allowsafe use of the declared shortcuts at runtime.
  • Corrected a bug when using the use_module/2 directive that resulted ina performance penalty when calling module predicates.
  • Updated the Logtalk compiler to warn the user when finding deprecateddirectives.
  • Updated the Logtalk compiler to recognize "prolog_compatible_version"and "tabling" as valid flags.
  • Updated the Logtalk compiler to compile settings files with the compilerflag "altdirs" turned off in order to avoid problems with directorypermissions for back-end Prolog compilers, such as Ciao and XSB, whichrequire the first run of Logtalk to be made by an administrative user.
  • Corrected a bug in the Logtalk compiler that forced recompilation ofsource files when the "smart_compilation" flag was set to "on".
  • Corrected an erroneous compiler warning when reporting referenced butunknown objects when using the {Object}::Message notation. Thanks toParker Jones for the bug report.
  • Corrected a bug in the

New in Logtalk 2.39.0 (Mar 1, 2010)

  • Removed support for the following Prolog compilers: ALS Prolog, Amzi! Prolog, BinProlog, GNU Prolog, IF/Prolog, JIProlog, K-Prolog, LPA MacProlog, LPA WinProlog, MasterProlog, Open Prolog, Prolog II+, and Quintus Prolog. Only Amzi! Prolog, GNU Prolog, and Quintus Prolog seem to be actively maintained. Amzi! Prolog ignores the official and de facto Prolog standards. GNU Prolog is currently missing crucial support for the standard directive multifile/1. Quintus Prolog is superseded by SICStus Prolog (and required hacks to the Logtalk compiler that rendered it incompatible with all the other Prolog compilers).
  • Removed support for all Prolog compilers that don't support the ISO Prolog standard directive multifile/1. Removed the "multifile_directive" config flag from the config files of supported Prolog compilers.
  • Reintroduced parametric categories. Changed semantics of the parameter/2 built-in execution-context method when used in category predicates to access the category parameters instead of the parameters of the object importing the category. This change provides safer and more robust use of parameter/2 calls in categories.
  • Improved compile-time error-checking of calls to the parameter/2 built-in execution-context method
  • Removed the meta-predicate compilation safety rule that required the number of normal arguments to be equal or greater than the number of extra arguments required by a closure. This overly restrictive rule prevented the definition of some useful and safe meta-predicates.
  • Moved all config files for no longer supported Prolog compilers to the "configs/unsupported" folder. Moved all integration scripts for no longer supported Prolog compilers to the "integration/unsupported" folder.
  • Changed the default value of the compiler flags "altdirs" and "clean" to "on" for all supported Prolog compilers. Added a read-only compiler flag "modules".
  • Added index/1 directives for the predicate lookup caching predicates to the SWI-Prolog integration files (see "integration/logtalk_comp_swi.pl"). These directives may or may not improve performance, depending on your application.
  • Added meta-predicates sort/3 and msort/3 to the library object "list". These sorting predicates accept as first-argument a closure to be used for comparing list terms when sorting.
  • Added new predicate declarations to the "dictionaryp" library protocol: clone/3, clone/4, previous/4, next/4, min/3, max/3, apply/4, delete_min/3, delete_max/3, map/2, and update/4. Removed the insert_all/3 predicate declaration. Added a missing meta-predicate directive for the predicate map/3. Improved predicate documentation.
  • Added new predicates preorder/2, inorder/2, and postorder/2 to the library object "bintree". Corrected broken definition of the meta-predicate map/3. Added definitions for the new predicates in the updated "dictionaryp" library protocol.
  • Added a port of the Vitor Santos Costa implementation of Red-Black trees (found on the YAP library "rbtrees"). The port, "rbtree", implements the "dictionaryp" library protocol. Work in progress.
  • Added a port of the Richard O'Keefe implementation of heaps. This port provides both max-heap and min-heap implementations. Work in progress.
  • Updated the "parametric" example to also illustrate the use of parametric categories.
  • Updated the "metainterpreters" example, adding a new meta-interpreter for counting the number of resolution steps when proving a goal.
  • Added the classical naive list reverse benchmark test to the "benchmarks" example. Added a version of the benchmark test module for ECLiPSe. Updated the "benchmarks" object in order to also run the module tests whenever the back-end Prolog compiler supports modules.
  • Simplified usage of the "mtbatch" multi-threading benchmarks example by using conditional compilation directives for the Prolog-specific predicates instead of a parametric object.
  • Updated the loader file for the "encodings" example in order to only load the UTF-32 source file ("mythology.lgt") on Prolog compilers supporting this encoding (currently, only CxProlog and SICStus Prolog). This avoids misleading loading error messages when using SWI-Prolog or YAP.
  • Updated the "cc" example with predicate definitions for Ciao and added a new predicate, expand_path/2, for all supported back-end Prolog compilers.
  • Updated the Logtalk Windows installer in order to detect the ECLiPSe 6.1 version (both 32 and 64 bits versions). If both 6.0 and 6.1 versions are installed, the installer creates a shortcut for using version 6.1 as the back-end Prolog compiler.
  • Updated the Logtalk Windows installer in order to detect SICStus Prolog 4.x installations when running on Windows 64 bits versions.
  • Update the Windows installer script in order create integration shortcuts for both console and window versions of SWI-Prolog, to check for the new names of the SWI-Prolog executables ("swipl.exe" and "swipl-win.exe") when creating the shortcuts, and to detect SWI-Prolog 64 bits versions.
  • Updated the Windows installer to detect CxProlog 0.97.4 and later versions (which use a different registry entry from previous versions).

New in Logtalk 2.38.2 (Feb 1, 2010)

  • Added support for calling :/1 goals using the

New in Logtalk 2.38.1 (Dec 21, 2009)

  • Added support for using the {}/1 compiler bypass Logtalk control construct to wrap closures that should be executed within the context of the pseudo- object "user" (e.g. calls to Prolog built-in predicates).
  • Workaround module meta-predicate semantics in order to support calls to module meta-predicates specified in use_module/2 directives within objects and categories.
  • Added support for compiling calls to module meta-predicates that are explicitly qualified (may require that the modules are loaded, depending on the back-end Prolog compiler).
  • Code cleanup of meta-predicate directives compilation. Tighten checks of meta-predicate directives and meta-predicate directive arguments.
  • Improved compilation of call/2-N goals.
  • Improved performance of meta-calls that are compiled at runtime.
  • Improved performance of the lambda expression Free/Goal, usually used in bagof/3 and setof/3 calls.
  • Improved lambda expression error-checking and added support for using a (>>)/2 lambda expression as a goal.
  • Corrected a bug in handling the meta-call context for lambda expressions.
  • Corrected a typo in the exception term generated when sending a message to an object corresponding to a built-in local method.
  • Updated the CxProlog config file in order to set write term and write list limits that allow compilation of the Logtalk libraries and examples (the default values are two low in some cases leading to compilation errors). In addition, take advantage of the new "version_data" flag, thus requiring version 0.97.4 or a later version.
  • Updated the SWI-Prolog config file in order to recognize and compile the proprietary directive at_halt/1.
  • Updated the B-Prolog config file in order to add a missing meta-predicate declaration for the proprietary foreach/2 built-in predicate.
  • Updated the YAP config file by adding a missing declaration for the time/1 proprietary built-in meta-predicate and by commenting out setting the call that sets the "language" flag to "iso" due to all the YAP libraries that don't compile with this setting.
  • Updated the XSB config file by adding a missing declaration for the time/1 proprietary built-in meta-predicate and a definition for the predicate setup_call_cleanup/3 (in order to restore compatibility with the Logtalk multi-threading features).
  • Updated all config files with information on the availability of the setup_call_cleanup/3 predicate.
  • Expanded the "lambdas" example with a contribution by Artur Miguel Dias, more sample queries (including non-deterministic ones), and some simple benchmarks.
  • Added syntax coloring support for the ^/2 existential quantifier operator for most supported text editors and syntax highlighters. Added sample code using the ^/2 existential quantifier to the syntax coloring test file.

New in Logtalk 2.38.0 (Dec 4, 2009)

  • Added lambda expression support. Added an example, "lambdas", illustrating the use of lambda expressions.
  • Added a new compiler flag, "clean", for cleaning the intermediate Prolog files generated when compiling Logtalk source files.
  • Simplified representation of the runtime execution context using a simple list resulting in a small performance increase for some back-end Prolog compilers such as B-Prolog.
  • Added support for using the set_logtalk_flag/2 directive within Logtalk entities. This allows e.g. easy setting of entity properties such as "events" when creating new entities using the entity creation built-in predicates. Updated documentation on the set_logtalk_flag/2 directive and the set_logtalk_flag/2 built-in predicate exceptions.
  • Added support for runtime instantiation of the

New in Logtalk 2.37.5 (Oct 30, 2009)

  • Updated the Logtalk multi-threading features, replacing all calls tothe call_cleanup/2 built-in predicate with calls to the more reliablesetup_call_cleanup/3 built-in predicate. This change requires recentversions of SWI-Prolog, XSB, and YAP when writing multi-threading code.
  • Improved performance of the database built-in methods retractall/1 andretract/1 whenever their use requires updating the internal predicatedefinition lookup tables.
  • Corrected a bug in the Logtalk runtime when printing a compatibilitywarning regarding the back-end Prolog compiler version being used.
  • Corrected a bug in the implementation of the :/1 control construct whensome but not all imported categories are compiled for static binding.
  • Corrected a event handling bug in the processing of meta-calls whosemeta-arguments have the format Object::Closure.
  • Corrected a bug in the runtime error handler for top-level message sendingcalls where the reported exception term context argument would be unbound.
  • Corrected a bug in the compilation of multifile directives and multifilepredicate clauses within objects and categories for the pseudo-object"user". Corrected a bug in the compilation of multifile predicate clausesfor other objects and categories.
  • Corrected a safety meta-predicate compilation bug when using staticbinding to optimize a call to a local meta-predicate made by a normal,public predicate.
  • Corrected a safety meta-predicate compilation bug when using a meta-predicate call in the body of a user-defined meta-predicate clause inorder to change the number of extra arguments of a closure.
  • Added a monitor/1 predicate to the library event registry objects.Updated the definition of the monitors/1 and monitored/1 predicatesin order to avoid using the non-standard predicate sort/2.
  • Added support for adding the Logtalk mime-type to systems supportingthe freedesktop.org shared mime-info database.
  • Added support for adding the Logtalk mime-type and the file descriptionfor Logtalk source files to the Windows installer.
  • Updated the RPM spec file and build script to no longer require rootaccess. The RPM package built from these files is no longer relocatable.
  • Updated the POSIX (un)install shell scripts to print the version numberof the Logtalk release being (un)installed.
  • Updated the "lgt2pdf.sh" and "lgt2txt.sh" POSIX shell scripts in orderto prevent accidental deletion of the "logtal.dtd" and "logtalk.xsd"files in the Logtalk installation directory. Thanks to Michael Iglerfor the bug report.
  • Added information about using the Sublime Text Windows text editor forediting Logtalk source files.
  • Added a set of Logtalk source code snippets and a set of compilationand documenting tools for the Gnome's Gedit text editor (see the file "wenv/gedit/NOTES.txt" for details).
  • Replaced GeSHi support with a new language file written from scratch.
  • Added syntax coloring support for the module directive reexport/1 toall supported text editors and syntax highlighters.
  • Updated documentation in order to remove references to deprecated syntaxfor sequences of predicate indicators in predicate directives. Updated documentation on built-in meta-predicates to correctly described theirsemantics when used within categories.
  • Added a simple example, "multifile", illustrating how to use multifilepredicates within Logtalk objects and categories.
  • Updated the "securemp" example in order to illustrate using a call toa meta-predicate to change the number of extra arguments of a closure.

New in Logtalk 2.37.4 (Sep 18, 2009)

  • Updated the Logtalk compiler to expand calls to the forall/2 and once/1 built-in predicates in order to improve performance.
  • Corrected a bug in the Logtalk compiler that resulted in some calls to the built-in predicate call/1 being transparent to cuts in its goal argument.
  • Updated the Logtalk runtime to try to detect and warn about incompatible back-end Prolog compiler versions.
  • Updated the Logtalk runtime to avoid spurious type errors when working with parametric objects using ECLiPSe due to the weak ISO Prolog standard compliance of this compiler.
  • Added two new commands to the Logtalk built-in debugger for writing the current goal as a quoted term and for removing context spy points at leashed ports.
  • Added a logtalk_library_path/2 entry for the library "home" (the user home directory) when running on POSIX operating-systems.
  • The library object "pairs" in now loaded by the "types_loader.lgt" loader file.
  • Updated the Qu-Prolog integration script in order to set the choice point stack to 256KB in order to support loading larger Logtalk applications. Updated the Qu-Prolog config file in order to set the default value of the "tmpdir" to '.lgt_tmp/'.
  • Updated the B-Prolog and SICStus Prolog config files in order to set the default value of the "tmpdir" depending on the operating-system by checking for a POSIX-only default environment variable.
  • Added missing reference to the "settings.lgt" file to the spec file used for building the Logtalk RPM installer.
  • Modified the scripts used to generate the PDF versions of the User and Reference manuals to use a local catalog file for the XHTML DTD files.

New in Logtalk 2.37.3 (Aug 10, 2009)

  • Added a workaround for the lack of standardization of the Prolog built-in predicate predicate_property/2 when used in the if/1 and elif/1 conditional compilation directives.
  • Added support for using file name paths containing environment variables in the logtalk_library_path/2 predicate and in the "xmldir" and "tmpdir" compiler flags when using selected back-end Prolog compilers.
  • Corrected a code optimization bug in the Logtalk compiler when compiling bagof/3 and setof/3 calls whose goal is existentially qualified (using the ^/2 operator). Thanks to Joerg Schuster for the bug report.
  • Simplified compilation and improved performance of initialization/1 goals for Prolog compilers supporting the multifile/1 predicate directive.
  • Added a "libpaths/libpaths_no_multifile.pl" file for pesky back-end Prolog compilers that don't support the ISO Prolog standard multifile/1 predicate directive (e.g. GNU Prolog and K-Prolog).
  • Updated the library object "term" to use the built-in predicates ground/1 and subsumes/2 when available in the back-end Prolog compiler.
  • Updated the library object "list" to use the built-in predicates sort/2 and msort/2 when available in the back-end Prolog compiler.
  • Updated the library object "integer" to use the built-in predicates plus/3, between/3, and succ/2 when available in the back-end Prolog compiler.
  • Added a predicate add/3 to the library object "difflist".
  • Added a predicate '$lgt_expand_path'/2 to all config files in order to expand file name paths that may contain e.g. environment variables or relative paths into absolute file names (only supported in some back-end Prolog compilers).
  • Updated all Prolog integration shell scripts to avoid a compatibility issue in Ubuntu distributions when running the scripts using sudo.
  • Updated the SWI-Prolog integration support files in order to hide some of the Logtalk internal predicates from the SWI-Prolog native profiler.
  • Updated the ECLiPSe config files to ensure that attempts to create a directory that already exists succeed instead of throwing an error.
  • Updated text editor configuration files in order to remove references to the no longer used ".config" file name extension and to support syntax coloring and code completion of multifile/1 and use_module/1-2 directives.
  • Corrected some spelling and XHTML typos in the User and Reference Manuals.
  • Corrected some BibTeX typos in the "BIBLIOGRAPHY.bib" file.

New in Logtalk 2.37.2 (Jun 29, 2009)

  • Added support for parsing reexport/2 module directives when compiling Prolog modules as Logtalk objects. The predicate renaming operator as/2 found on SWI-Prolog and YAP is also supported.
  • Added support for using grammar rule non-terminal indicators in the uses/2, multifile/1, reexport/2, and use_module/2 directives.
  • Added support for parsing operator declarations in the module/2, export/1, reexport/2, and use_module/2 module directives.
  • Added support for declaring and defining object and category multifile grammar rules.
  • Corrected a bug where a failed load of a settings file could be reported as successful.
  • Corrected a bug when compiling an object or category normal predicate that redefines a built-in Prolog meta-predicate.
  • Added missing dynamic directives in the definition of the pseudo-objects "debugger" and "user".
  • Eliminated message-sending overheads when sending messages to the pseudo- object "user".
  • Allow the "debugger" built-in object to play the role of both a class and a prototype when being specialized or extended.
  • Added support for compiling module-qualified arguments in calls to Prolog database and reflection built-in predicates.
  • Added support for using multiple info/1 directives per entity and multiple info/2 directives per predicate (useful when compiling modules as objects).
  • Added limited support for translating queries as initialization goals when compiling modules as objects (queries must be calls to locally defined predicates or to predicates referenced in use_module/2 directives).
  • Optimized performance of meta-predicates whose meta-arguments are goals, not closures, when using static binding.
  • Improved automatic generation of XML documenting files for parametric objects when no parameter names are given.
  • Updated the SWI-Prolog config file in order to support the proprietary predicate directives format_predicate/2, noprofile/1, and volatile/1.
  • Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order to workaround broken meta-predicate declarations for the built-in predicates format/2-3 and in order to support the sloppy use of the ensure_loaded/1 directive within modules, rewriting it to a use_module/1 directive.
  • Updated the ECLiPSe, SWI-Prolog, and YAP config files in order to support parsing of reexport/1 module directives.
  • Updated the YAP config file in order to support parsing of the use_module/1 module directive.
  • Updated the ECLiPSe config files in order to make available the predicate numbervars/3 and to support parsing of comment/2, import/2, inline/2, and set_flag/3 proprietary directives.
  • Updated the SICStus Prolog config files in order to support parsing of the load_foreign_resource/1 proprietary directive.
  • Updated the B-Prolog config file in order to support the new foreach/3-4 meta-predicates and the new table mode directive in B-Prolog 7.3. Added definition for the "prolog_version" read-only compiler flag.
  • Updated the XSB config file in order to enable support for multifile directives (version 3.2 or later is required).
  • Improved conversion guide for migrating Prolog module code to Logtalk.
  • Improved documentation and examples of using the term and goal expansion mechanisms.
  • The "lgt2*.sh" documentation shell scripts have been updated to ignore XML files that are not XML documenting files generated by the Logtalk compiler.

New in Logtalk 2.37.1 (Jun 3, 2009)

  • Added support for declaring and defining object and category multifile predicates. This new feature is primarily intended to facilitate migration of Prolog code to Logtalk and should be used with caution as multifile support is spotty among back-end Prolog compilers (easily leading to portability problems). Multifile predicates can be both static or dynamic.
  • Added support for compiling clauses for module multifile predicates within objects and categories in order to provide better integration with CLP(FD) and similar constraint packages.
  • Added support for parsing module/2 directives whose export list contains operator declarations.
  • Improved Logtalk compiler error-checking of file-level op/3 directives.
  • Updated the Logtalk compiler to try to detect calls to proprietary built-in meta-predicates not declared in the config files. Detection may fail due to the lack of standardization of meta-predicate specifications.
  • Updated the Logtalk compiler to avoid unexpected compilation errors when querying predicate properties due to the lack of standardization of the Prolog predicate_property/2 built-in predicate.
  • Improved runtime error-checking for meta-calls whose closure argument is either Object::Closure or Module:Closure.
  • Corrected a Logtalk compiler bug where a redefinition of a proprietary built-in meta-predicate (declared in the config files) would be ignored.
  • Corrected a bug in the implementation of the Logtalk

New in Logtalk 2.37.0 (May 11, 2009)

  • Improved dynamic binding performance by making calls to the lookup caches call the cached methods instead of simply returning the corresponding callable terms, therefore no longer requiring a meta-call for executing the methods. For multi-threaded back-end Prolog compilers, the new caching mechanisms forces the lookup cache dynamic predicates to be declared thread shared instead of thread local.
  • Improved performance of the built-in database methods retractall/1 and retract/1.
  • Improved performance of user-defined object and category meta-predicates.
  • Added support for meta-calls whose closure argument is ::Closure.
  • Simplified compilation and improved performance of predicates that call local user meta-predicates.
  • Corrected a bug where calls to local user meta-predicates would fail.
  • Corrected a bug where local calls to user meta-predicates would not be visible to the built-in debugger.
  • Improved Logtalk compiler error checking for accidental redefinition of control constructs.
  • Improved Logtalk runtime error checking for message sending and "super" control constructs when the message is only bounded at runtime.
  • Updated the exception terms thrown when sending messages to self in order to use the ::/1 control construct for the culprit goal instead of the ::/2 control construct.
  • Simplified message sending implementation by removing the seldom used control constructs that allowed sending the same message to a conjunction or disjunction of objects.
  • Specify +/1, call/1-N, and once/1 as built-in local meta-predicates.
  • Disallow using Logtalk and Prolog built-in meta-predicates as messages in order to avoid conflicting semantics with user-defined object and category meta-predicates. The Logtalk control constructs (,)/2, (;)/2, (->)/2, and !/0 may still be used as syntactic sugar when sending a set of messages to a single object.
  • Updated the Logtalk compiler to ensure that calls to the built-in meta- predicate call/2-N within a category have the same semantics as other built-in meta-predicates whose meta-arguments are goals.
  • Improved performance of the :/1 control construct when using dynamic binding by adding a predicate lookup caching mechanism.
  • Added support for using the :/1 control construct with a non-instantiated argument at compile-time (handled using dynamic binding at runtime).
  • Allow a variable clause body to be interpreted as a meta-call instead of an instantiation error. Although is not recommended to use a variable as a goal instead of using the call/1 built-in meta-predicate, this change allows for uniform handling of variables as goals in clause bodies. Thanks to Victor Noel for the bug report.
  • Updated the ECLiPSe config files in order to support the non-standard *->/2 (aka "soft cut") control construct. Thanks to Victor Noel for the bug report.
  • Updated the Ciao config file in order to support the non-standard if/3 (aka "soft cut") control construct.
  • Updated the Qu-Prolog config file in order to enable support for multifile directives (version 8.9 or later is now required).
  • Updated the Windows installer in order to ensure compatibility with the new CxProlog 0.97.3 version. Updated the CxProlog config file in order to set the "underscore_variables" compiler flag to "dont_care".
  • The library object "varlist" is no longer derived from "list" as several of the "listp" predicates are not meaningful or cannot be used with the same modes. Added a new library protocol "varlistp". Corrected several bugs in the implementation of the library object "varlist" predicates. Thanks to Victor Noel for the bug report.
  • Added meta-predicates scan_left/4, scan_right/4, map/6-8, and partition/6 to the library object "meta". Optimized performance of the meta-predicates fold_left/4, fold_right/4, include/3, exclude/3, map/2-8, and partition/4.
  • Added predicates partition/5, same_length/3, selectchk/3, and subsequence/3 to the library objects "difflist" and "list".
  • Added predicates product/3 and selectchk/3 to the library object "set".
  • Updated the "puzzle" constraint example for SWI-Prolog to avoid leaking "clpfd" predicates in query binding results. Thanks to Ulrich Neumerkel for reporting the problem.
  • Corrected a bug in the "expansion" example that prevented some of the example queries from working.
  • Simplified running the "poem" example.

New in Logtalk 2.36.0 (Apr 10, 2009)

  • Added support for overriding Logtalk default compiler flags (specified in the back-end Prolog compiler config files) using new settings files.
  • Logtalk will load a "settings.lgt" file in the startup directory. If this file is not found, Logtalk will load a "settings.lgt" file in the Logtalk user directory. Requires running Logtalk with a back-end Prolog compiler supporting access to environment variables. Loading of settings files from the Logtalk startup directory is only available when running on Windows for B-Prolog, Ciao, GNU Prolog, SWI-Prolog, XSB, and YAP. SICStus Prolog is incompatible with this new feature, requiring manual loading of settings files after startup. Consult the "configs/NOTES.txt" file for compatibility details for other Prolog compilers.
  • Updated the "cplgtdirs.*" scripts to copy an existing "settings.lgt" file from the backup of the Logtalk user folder to the new Logtalk user folder.
  • Updated the Logtalk compiler and runtime and all the config files to use the more standard call/N predicates instead of the call_with_args/N predicates.
  • Improved the XML documentation automatically generated for objects and categories by appending to the compilation mode all the active optional features and the "threaded" and "synchronized" properties. Improved the XML documentation automatically generated for synchronized predicates by appending the "synchronized" property to the predicate compilation mode.
  • Improved error handling for the built-in predicates logtalk_load/2, logtalk_compile/2, current_logtalk_flag/2, and set_logtalk_flag/2 when checking flag names and values.
  • Improved Logtalk compiler error and warning reporting by printing, whenever possible, the range of lines where the problem was found instead of printing only the starting line.
  • Added new object properties "complements", "context_switching_calls", "events", and "dynamic_declarations". Added new category property "events". These properties are defined whenever the corresponding compiler flags are set to "allow" at the time of entity compilation.
  • Corrected a bug where some file-related entity properties would not be stored when using back-end Prolog compilers that don't support multifile predicates.
  • Corrected a bug (introduced in version 2.35.0) in the compilation and processing of "super" calls for objects that both instantiate and specialize other objects.
  • Corrected a bug (introduced in version 2.35.1) in the Logtalk compiler that prevented compilation of Prolog modules as objects.
  • Corrected a bug in the implementation of the Logtalk built-in predicate threaded/1 that would result in wasting space in the main thread message queue with duplicated messages. Thanks to Rui Marques for the bug report.
  • Corrected a bug where the Logtalk compiler would report the number of compilation warnings with the "report" compiler flag set to "off".
  • Updated the Logtalk compiler in order to avoid unwanted backtracking during source file compilation and when calling the entity creation built-in predicates.
  • The compiler flags "context_switching_calls", "startup_message", and "altdirs" are no longer read-only flags in order to support changing their default values from within "settings.lgt" files. The possible values for the compiler flags "dynamic_declarations", "complements", "context_switching_calls", and "events" are now "allow" and "deny".
  • Added a new read-only compiler flag "prolog_version". Renamed the compiler flag "prolog" to "prolog_dialect".
  • Changed object compilation in order to restrict the use of the

New in Logtalk 2.35.1 (Mar 2, 2009)

  • Allow explicitly qualified module calls in the body of category and object predicate clauses without requiring the calls to be wrapped within a {}/1control construct to ensure successful compilation.
  • This requires an hackin the config files of most back-end Prolog compilers with module systemsas the implementations of the predicate_property/2 built-in predicate cannot be used to test if :/2 is a built-in control construct. Updated theconfig files of Amzi! Prolog, Ciao, IF/Prolog, Quintus Prolog, SICStus Prolog, SWI-Prolog, XSB, and YAP.
  • Improved the Logtalk compiler compatibility with Prolog meta_predicate/1directives that use the integer zero as an alternative to the atom ':' fordenoting meta-arguments that are goals.
  • Added limited support for calling Prolog meta-predicates defined in modulelibraries (meta-arguments must be goals, not closures; the Logtalk compilerassumes that an imported_from/1 property is defined for these predicates).
  • Implemented a "warnings" value for the "report" compiler option, providinga less verbose compilation reporting where only warnings are printed.
  • Corrected a Logtalk compiler bug where warnings related to synchronizedpredicates would be reported even with the "report" flag set to "off".
  • Added support to the message sending mechanisms for using the object proxyaccess notation when the message receiver is only known at runtime.
  • Changed the semantics of the Logtalk notation for accessing object proxieswhen sending a message to allow backtracking over the proxy goal.
  • Updated the Logtalk compiler to avoid reporting multiples reference to thesame unknown parametric object.
  • Corrected a bug in the implementation of the "smart_compilation" compilerflag that would result in a misleading successful compilation of a sourcefile containing syntax errors after the first failed compilation when the errors are not corrected between compilations. Thanks to Joerg Schuster for the bug report.
  • Added a '$lgt_delete_file'/1 predicate to all config files. For back-endProlog compilers that don't support a built-in predicate for deleting files, the '$lgt_delete_file'/1 predicate simply fails. This predicate isused by the Logtalk compiler to ensure correct behavior of the compilerflag "smart_compilation".
  • Updated the YAP config file to ensure that the "syntax_errors" proprietaryflag is set to "error".
  • Integration with GNU Prolog now requires version 1.3.1 or later of thiscompiler.
  • Added a workaround to the ECLiPSE config files in order to support smart compilation of source files (due to the non-standard implementation of theread_term/3 predicate that fails for syntax errors instead of throwing anexception).
  • Updated the library object "term", adding a singletons/2 predicate andrenaming the predicate vars/2 to variables/2 (the old name is stillavailable but shall be considered deprecated). Both the variables/2 andthe singletons/2 predicates return variables ordered as found when doinga depth-first, left-to-right term traversal. Optimized the implementationof the predicates ground/1 and variables/2 to use the Prolog built-in versions of these predicates when available.
  • Moved the Prolog Integration and Migration Guide into the User Manual.
  • Updated the "BIBLIOGRAPHY.bib" file with recent Logtalk publications.
  • Updated the "build_release.sh" POSIX shell script steps for building theMacOS X installer.
  • Updated the Windows installer to disable by default the installation ofthe integration shortcuts for Ciao Prolog and Quintus Prolog as these compilers require patches that render Logtalk incompatible with the othercompilers.
  • Simplified loading and testing instructions for the XML parser includedin the "contributions" directory. Added a missing logtalk_library_path/2entry for XML parser directory.

New in Logtalk 2.35.0 (Jan 16, 2009)

  • Improved compilation of source code resulting in smaller intermediate Prolog files and better performance for most back-end Prolog compilers.
  • Improved caching of message sending predicate lookups (by generating more reusable cache entries for public predicates, improving lookup performance and cache hits).
  • Improved caching of ^^/1 calls (by generating more reusable cache entries, improving lookup performance and cache hits).
  • Simplified compilation of meta-predicates. Allow meta-predicates to be specialized and called using the ^^/1 control construct.
  • Simplified and improved performance of the multi-threading built-in predicates within the context of the pseudo-object "user" (e.g. for top-level queries).
  • Changed compilation of once/1 goals in debug mode in order to make them explicit when tracing using the built-in debugger.
  • Added support for multiple source-level and entity-level initialization/1 directives (matching the ISO Prolog standard and current Prolog practice).
  • Corrected a bug in the compilation of top-level queries for the Logtalk built-in predicates.
  • Corrected a predicate scope checking bug when using the dynamic-binding cache entries.
  • Corrected a bug when compiling entities in debug mode that contain initialization goals. Thanks to Parker Jones for the bug report.
  • Corrected a bug in the library object "meta" where the deprecated predicates filter/3 and succeeds/2 are declared (using aliases) but not defined.
  • Changed the formulas used for calculating sample skewness and sample kurtosis to match the formulas used in statistical software such as R.
  • Added declaration for the proprietary findall/4 meta-predicate to the SWI-Prolog and YAP config files.
  • Corrected processing of the proprietary load_foreign_files/3 directive in the YAP config file.
  • Switched off use of multifile/1 directives for Ciao due to its buggy implementation on this Prolog compiler.

New in Logtalk 2.34.1 (Dec 15, 2008)

  • Allow the ^^/1 control construct to be used for calling any inherited predicate instead of being restricted to calling inherited predicates in the context of their redefinitions.
  • Updated the Logtalk compiler to detect (and report as an error) the definition of two entities with the same name in a source file.
  • Updated the Logtalk compiler to detect (and report as an error) any invalid relation between an entity and itself. In most cases, these errors could result in predicate lookup endless loops.
  • Corrected a long-standing bug in the implementation of the Obj

New in Logtalk 2.34.0 (Nov 26, 2008)

  • Added conditional compilation support, as found in some Prolog compilers,using the new directives if/1, elif/1, else/0, and endif/0. The argumentsof the if/1 and elif/1 directives are subjected to goal expansion.
  • Added a "prolog" read-only compiler flag whose value is the name of theback-end Prolog compiler (an atom). This flag can be used for conditionalcompilation of Prolog specific code.
  • Added an expand_goal/2 built-in method to support explicit calls to thegoal_expansion/2 user-defined hook. Updated the term expansion mechanismto allow the expansion to be a single term instead of a list of terms.Improved the documentation of the term and goal expansion predicates.
  • Simplified the implementation of the threaded/1 built-in predicate.
  • Removed support for the deprecated message_queue_create/1 Prolog built-inpredicate.
  • Corrected a bug in the implementation of the predicate_property/2 built-inmethod which would return wrong meta-predicate templates for predicatealiases.
  • Corrected a bug in the compilation of meta-calls to predicates definedin the pseudo-object "user".
  • Corrected a bug that prevented goal expansion of source file initializationgoals (expressed using the initialization/1 directive).
  • Modified the "statistics" library to use the variance numerically stablealgorithm to calculate accurate values for the standard deviation for bothsamples and populations. Thanks to Parker Jones for the bug report. Addedcalculation of sample and population kurtosis.
  • Added predicates included/3, excluded/3, fold_left/4, and fold_right/4to the library entities "metap" and "meta" (requested by Paul Crocker).Renamed the predicates filter/3 and succeeds/2 to included/3 and map/2,respectively (the older names are still available using aliases definedin "meta").
  • Changed the file name extension of all config "*.config" files to "*.pl".Changed the file name extension of all library "*.notes" files to "*.txt".
  • Updated the "metapredicates" example with Paul Crocker's contributionsto illustrate the use of some of the meta-predicates implemented in theLogtalk library.
  • Updated the "expansion" example to illustrate the new expand_goal/2built-in method. Improved example documentation.
  • Added an example, "cc", of using conditional compilation directives toimplement a portable operating-system interface for selected back-endProlog compilers.
  • Added an example, "prototypes", illustrating the concept of "prototype".
  • Added syntax coloring support for the new expand_goal/2 method and forthe if/1, elif/1, else/0, endif/0, set_logtalk_flag/2, ensure_loaded/1and, set_prolog_flag/2 directives to the supported text editors andsyntax highlighters.
  • Fixed a block comment syntax coloring bug in the support for the Highlight syntax highlighter with the help of André Simon.

New in Logtalk 2.33.2 (Nov 3, 2008)

  • Added support for using the set_logtalk_flag/2 directive in source files.This directive is executed when read (thus affecting the compilationof the source code that follows) but its scope is restricted to the sourcefile being compiled.
  • Allow a complementing category to define aliases for predicates of thecomplemented object.
  • Improved reporting of line numbers for syntax warnings and errors when using YAP or SWI-Prolog as back-end compilers (requires YAP git version).
  • Improved reporting of entity existence errors for top-level queries.
  • Implemented a more flexible internal representation of entity properties.
  • Added entity properties file(File, Path) and lines(Start, End) for entities compiled and loaded from source files. The property lines/2 is only available when using YAP or SWI-Prolog as back-end compilers.
  • Added missing "built_in" properties for the built-in protocols "expanding"and "monitoring".
  • Corrected a bug where compiler options are not cleared after compilationof source files. This bug would result in wrong compilation of messages sent from the top-level interpreter (i.e. messages sent by the pseudo-object "user") whenever events or hooks compiler options are used.
  • Updated the Logtalk compiler to print a warning when defining clauses forthe built-in predicates term_expansion/2 and goal_expansion/2 without areference to the built-in protocol "expanding".
  • Updated the Logtalk compiler to provide file information when printingredefined entity warnings if the files of the new and the old definitionsare different (requires support for the file/2 entity property).
  • Updated the Logtalk compiler to prefix all informative messages with theline comment character, "%", to make it easier to use interactive sectiontranscripts as scripts.
  • Corrected a bug that prevented using synchronized/1 predicate directiveswithin protocols.
  • Corrected a bug where portability warnings would be reported even when the"report" compiler option is turned off. Corrected a bug where portabilitywarnings would not increment the warnings counter.
  • Added an optimization and safety compiler option, "complements", that allows objects to be compiled with support for complementing categories either enabled or disabled. The default value (set in the config files)is "off" (disabled).
  • Added an optimization and safety compiler option, "dynamic_declarations",that allows objects to be compiled with support for dynamic declaration ofpredicates (using the built-in database methods asserta/1 and assertz/1) either enabled or disabled. The default value (set in the config files) is"off" (disabled).
  • Updated the Logtalk built-in debugger to print goal invocation numbers and to accept the return and enter keys as alternatives to the "c" key("creep") when tracing.
  • Updated the implementation of the "display"command to include the write options quoted(false) and numbervars(false)(as common in most Prolog debuggers).
  • Added a "unify" command.
  • Modified the implementation of the built-in predicate define_events/5 tothrow an exception when the monitor object doesn't define the requiredevent handler methods (previously the define_events/5 call would simplyfail).
  • Added a customized version of the read_term/2 predicate to all config files that returns the line where a term starts for back-end Prolog compilers whose implementation of the read_term/2 predicate supports this information.
  • Updated the shortcut created by the Windows installer for integration withK-Prolog to require version 6.0.4 of this compiler.
  • Updated the User Manual comparison between Logtalk nomenclature and C++and Java nomenclatures.
  • Added a simple example, "instvars", illustrating how to define instancevariables, default variable values, and setter and getter methods.
  • Added a simple example, "classmethods", illustrating how to define "class methods" as found on class-based object-oriented programminglanguages.
  • Improved the documentation of the "complements", "hello_world", "hooks",and "msglog" examples.
  • Added a new logic puzzle programming example, adapted with permission from Kevin Stone's BrainBashers website (http://www.brainbashers.com/).
  • Updated all the examples that make use of event-driven programming("birthdays", "bricks", "complements", "msglog", "polygons", "profiling",and "searching") to ensure correct functionality after fixing the bug incleaning compiler options after compilation of source files.
  • Updated the "dynpred" example to use the new "dynamic_declarations" compiler option. Updated the "complements" example to use the new "complements" compiler option.
  • Corrected a Vim syntax coloring bug with line comments occurring withinentity opening directives.

New in Logtalk 2.33.1 (Oct 13, 2008)

  • Added a syntax construct for easy access to parametric object proxies represented as Prolog facts when sending a message ({Proxy}::Message). Updated the "proxies" example to illustrate this new functionality.
  • Improved the Logtalk built-in debugger to print clause numbers for static predicates at the unification ports ("fact" and "rule").
  • Modified the built-in methods create_category/4, create_object/4 and create_protocol/3 to accept a variable as the first argument, which will be instantiated to the identifier generated for the new entity.
  • Modified the database built-in methods to allow initialization of static predicates for dynamic objects when the predicates are declared in "this".
  • These changes simplify the initialization of dynamic objects when writing constructors. The dynamic objects must be descendants of "this".
  • Fixed a bug in the Logtalk compiler that would result in failure to restore the operator table in case of compilation error.
  • Removed support for the deprecated mutex_create/1 Prolog built-in predicate.
  • Updated the XSB config file by switching off the use of multifile/1 directives when compiling Logtalk source files as a workaround for know bugs in the implementation of this directive for dynamic predicates.
  • Updated the ECLiPSe 6.0 config files in order to switch on the use of multifile/1 directives.
  • Update the CxProlog config file to work with and require version 0.97.2.
  • Updated the Windows installer to warn the user when it fails to detect the installation of the selected Prolog compilers. Fixed a bug where the creation of the K-Prolog integration shortcut could fail when performing a custom installation. Fixed a bug in detecting a CxProlog installation.
  • Added a library for descriptive statistics. For details, see the file "library/statistics.notes".
  • Added a new library object, "pairs", defining predicates over lists of pairs (key-value terms).
  • Added a new library object, "gensym", defining predicates for generating unique atoms (object protocol based on the "gensym" module of SWI-Prolog).
  • Added a predicate partition/4 to the library entities "metap" and "meta".
  • Added predicates plus/3 and succ/2 to the library object "integer".
  • Added predicates is_ascii/1, is_white_space/1, is_quote/1, is_period/1, is_punctation/1, and parenthesis/2 to the library entities "characterp" and "character".
  • Modified the implementation of the predicate product/2 in the library object "numberlist" to fail for empty lists.
  • Added an example, "people", illustrating a simple implementation solution for object constructors.
  • Improved "metainterpreters" example.
  • Improved performance of the object initialization and release predicates defined in the category "initialization" of the "roots" example.

New in Logtalk 2.33.0 (Sep 1, 2008)

  • Applied several optimizations to the Logtalk compiler, mostly related to non-detected deterministic predicates due to calls to dynamic predicates or due to limitations in clause indexing by most Prolog compilers.
  • Added support for using Prolog use_module/2 directives in objects and categories. This allows module predicates to be called using implicit qualification, improving readability. The use_module/2 directive supports the declaration of predicate aliases using the notation Original:Alias.
  • Added support for meta-calls whose closure arguments are explicitly qualified (using either Object::Closure or Module:Closure).
  • Added support for using the ensure_loaded/1 and the set_prolog_flag/2 directives in source files. These directives are both processed when read (thus affecting the compilation of the source code that follows) and copied to the generated intermediate Prolog files.
  • Corrected a set of singleton variable related bugs in the Logtalk compiler and runtime. Thanks to Joachim Schimpf and Kish Shen work on the improved singleton variable checking code found on the new ECLiPSe 6.0 compiler.
  • Simplified the implementation of the Logtalk built-in debugger. Changed the implementation of the debugger abort command to use the de-facto standard Prolog built-in predicate abort/0. Corrected a bug that prevented the use of the command "ignore" at the redo port.
  • Removed the Logtalk dispatcher thread used for dispatching asynchronous multi-threading calls, simplifying the implementation and improving the performance of the asynchronous built-in multi-threading predicates.
  • Corrected a bug in the implementation of the threaded_once/1-2 built-in multi-threading predicates (use of detached threads could make the methods fail despite the success of the thread goals).
  • Improved performance of multi-threading applications (specially on MacOS X) when using SWI-Prolog as the back-end compiler by making the lookup caches thread local.
  • Small performance improvement of the threaded/1 built-in multi-threading predicate.
  • Added a multifile/1 directive for the logtalk_library_path/2 predicate.
  • Corrected a bug in the verification of portable calls that would fail to flag the soft-cut control construct (_ *-> _; _) found on some Prolog compilers.
  • Corrected a bug in the implementation of the built-in database predicates retract/1 and retractall/1 when adding a cache entry for a local dynamic predicate with no scope declaration.
  • Corrected a bug in the compilation of source file op/3 directives whose third argument is a list of operator specifiers instead of a single operator specifier.
  • Added ECLiPSe 6.0 config files. Modified the POSIX script "eclipselgt" to test for both ECLiPSe 5.10 and 6.0 versions. Added Windows shortcut to start Logtalk with ECLiPSe 6.0.
  • Updated the GNU Prolog config file to allow Logtalk to recognize as built-in predicates the finite domain solver built-in predicates.
  • Added a new set of examples, "constraints", illustrating how to use the Constraint Domain Solver libraries available with B-Prolog, ECLiPSe, GNU Prolog, SWI-Prolog, and YAP. Thanks to Markus Triska for his help with the YAP and SWI-Prolog CLP(FD) examples.
  • Updated the "mtbatch" example to provide multi-threading overhead data for the competitive or-parallelism benchmark.

New in Logtalk 2.32.2 (Jul 27, 2008)

  • Simplified the predicate lookup linking clauses that are generated when compiling private and protected entity relations, resulting in a small runtime performance improvement when looking up non-cached predicate declarations.
  • Simplified and optimized handling of predicate aliases when looking up predicate declarations and predicate definitions.
  • When sending a message to an object using the ::/2 control construct, also check if the sender matches the scope container when the message does not correspond to a public predicate. This is necessary in order to allow calling a protected or a private predicate in "this" from within a category.
  • Updated the Logtalk compiler to throw an error when detecting a call to a dynamic predicate in the body of a predicate clause defined in a category.
  • Optimized the implementation of the ^^/1 control construct. The Logtalk compiler now requires an instantiated, callable argument that must have the same functor and arity of the predicate being (re)defined.
  • Allow the ^^/1 control construct to be used within extended categories.Updated the "engines" example to illustrate this new functionality.
  • Moved support for categories that complement existing objects from the code generated when compiling objects to the Logtalk runtime, making the implementation of this feature easier to maintain and contributing to smaller code sizes of the intermediate Prolog files.
  • Corrected a typo in the exception term throw by the built-in database method assertz/1 when an error occurs while trying to assert a fact.
  • Restored the redefined entity warnings for back-end Prolog compilers that support multifile predicates (broken in the final version of 2.32.1).
  • Changed the format of the Logtalk compiler informative messages for better readability.
  • Improved simplification of the clauses generated by the compilation of object and category predicate clauses.
  • Corrected a bug that prevented asserting and retracting clauses in "this" from within a category.
  • Corrected a bug in the implementation of the built-in database method retractall/1 when retracting clauses in an object compiled in debug mode.Thanks to Parker Jones for the bug report.
  • Updated all config files due to changes to the predicate used to declare proprietary meta-predicates, '$lgt_pl_meta_predicate'/1. Added a second argument to represent if the meta-predicate is either a built-in predicate or a built-in control construct. This is necessary in order to properly compile calls to these proprietary meta-predicates when in debug mode.Thanks to Victor Noel for the bug report.
  • Corrected a bug in the config files hooks used in handling proprietary Prolog directives for the SWI-Prolog, B-Prolog YAP, SICStus, and XSB Prolog compilers. Added a new internal predicate for constructing predicate indicators for compiled entity predicates that simplifies the config files hooks used in handling proprietary Prolog directives.
  • Changed the valid values of the read-only compiler flag "break_predicate"to "supported" and "unsupported" for consistency with other read-only compiler flags.
  • Updated the SWI-Prolog config file to set the Prolog flag "optimise" to true. Added declaration for the setup_and_call_cleanup/3 meta-predicate.Removed setting of the deprecated "prompt_alternatives_no_bindings" Prolog flag. Oldest SWI-Prolog compatible version is now 5.6.44.
  • Updated the GNU-Prolog config file, adding a declaration for the call_det/2 proprietary meta-predicate. GNU-Prolog version 1.3.0 or later is now required.
  • Added list mapping predicates map/4 and map/5 to the "metap" library protocol and the "meta" library object.
  • Added a proper definition for the predicate select/3 to the "varlist" library object.
  • Added a new example, "logging", of using a category to define a set of predicates that handle a dynamic predicate in the context of "this" (i.e. in the context of the objects importing the category).
  • Added a new multi-threading example, "integration2d", implementing methodsfor numerical integration for functions of two variables, contributed by Paul Crocker.
  • Updated the "integration" multi-threading example by bringing all example functions under the same object in order to allow for static binding. Thisis essential for good results in operating-systems with poor mutex thread synchronization performance such as MacOS X.
  • Added experimental support for the GeSHi syntax highlighter, contributed by Clara Dimene.
  • Improved support for the Pygments syntax highlighter, correcting coloring bugs when there are single line comments in the same lines of an opening entity directive.

New in Logtalk 2.32.1 (Jul 8, 2008)

  • Restored the redefined entity warnings for back-end Prolog compilers that support multifile predicates. Simplified updating of the runtime tables when compiling and loading source files with back-end Prolog compilers that don't support multifile predicates.
  • Changed the representation of the runtime tables for loaded entities in order to drop the need of a "functors clause" per entity. This avoids some redundancy on the representation of entity functors and also helps reducing a bit the size of the generated Prolog files.
  • When reloading an object, also clean all entries in the event handlers table where the object plays the role of a monitor.
  • Modified the Logtalk runtime to clean all lookup caches when compiling and loading source files (instead of doing it only when the files redefine existing entities).
  • Corrected a bug that prevented using predicate aliases with the :/1 control construct without static binding.
  • Updated the CxProlog config file to take advantage and require the new 0.97.1 version (which implements some more ISO Prolog predicates and expands support for text encodings).
  • Updated the B-Prolog config file to take advantage and require the new 7.1 version (which adds support for the multifile/1 predicate directive).
  • Updated the SWI-Prolog config file notes about possible compatibility issues with the default setting of the proprietary "iso" Prolog flag to "true".
  • Updated the SWI-Prolog hook file, "swihook.pl", to avoid hijacking the arguments of use_module/1-2 calls (which resulted in wrongly loading Logtalk libraries with the same name as the SWI-Prolog library modules we intended to load).
  • Updated the "k6.config" config file for the K-Prolog 6.0.3 release.
  • Renamed the K-Prolog 5.1.x config file from "k.config" to "k5.config" to avoid being mistaken for the K-Prolog 6.0.x config file. Updated the "plclgt.sh" integration script to work with both K-Prolog 5.1.x and 6.0.x versions.
  • Renamed the SICStus Prolog 3 config file from "sicstus.config" to "sicstus3.config" to avoid being mistaken for the SICStus Prolog 4 config file.
  • Updated the POSIX integration scripts and the Windows installer script to detect outdated versions of the Logtalk user folder (setting the compatibility version to 2.32.0 or later).
  • Improved the Prolog migration guide on converting code that makes use of multifile predicates.
  • Added note on licensing conditions to several files. Clarified copyright and license conditions for files on the "contributions" folder. Clarified dual-licensing conditions for text editor and syntax highlighter supporting files. Added license file to the TextMate bundle.
  • Updated support for the Vim text editor (changed the Logtalk file type plug-in to set the path to the completion dictionary and updated the installation instructions).
  • Updated the support for the Pygments syntax highlighter to avoid marking as errors non-standard directives.

New in Logtalk 2.32.0 (Jun 17, 2008)

  • Updated the Logtalk compiler and runtime to use multifile predicates for the runtime tables of loaded entities and entities relations. This is necessary to generate sensible intermediate Prolog code for large files with tens of thousands of objects. The workaround of using the directive initialization/1 is still available (for now) for Prolog compilers that fail to support the thirteen years old ISO Prolog standard.
  • Updated the Logtalk runtime error handler to test for non-instantiated exception terms. Thanks to Joerg Schuster for the bug report.
  • Corrected two bugs in the implementation of the built-in meta-predicate threaded/1 when canceling individual threads. The first bug resulted from out-of-order thread status messages. The second bug resulted from a leak of thread results between calls to the threaded/1 predicate. Changed the thread cancellation process to not automatically releasing any locks, leaving that task to a catcher associated to the thread goal.
  • Added a new default compiler option, multifile_directive, to all config files. Possible values are "supported" and "unsupported".
  • Added instructions on how to patch the Logtalk compiler in order to use Quintus Prolog as the back-end compiler.
  • Removed from the YAP POSIX integration script the command-line options setting the initial stack, heap, and tail data area sizes. These settingsare no longer necessary for recent YAP versions.
  • Updated the Windows installer script to search the registry for the location of the YAP installation (for YAP 5.1.3 or later versions).
  • Added missing implementation of the predicate as_dictionary/2 to the "bintree" library object. Thanks to Victor Noel for the bug report.
  • Updated all the search methods in the "searching" example to delegate checking for cycles to the state space being searched (thus allowing state descriptions to carry additional information that should not be taken into account when comparing states). Updated the "salt" example to support heuristics.
  • Updated the "mtbatch" example to include a benchmark test for competitive or-parallelism applied to state-space search (using the resources from the"searching" example). Improved the example documentation.
  • Added a filetype plugin for the Vim text editor. Updated the installation instructions. Updated the syntax coloring support to properly highlight quoted atoms and strings in the opening directive of parametric objects. Fixed an auto-indentation bug when opening and closing a conditional block in a single line in the last goal a predicate clause body. Thanks to Victor Noel for the bug report.
  • Corrected missing installation of the "VERSION.txt" file when building Linux RPMs.

New in Logtalk 2.31.6 (May 26, 2008)

  • Fixed a Logtalk runtime bug when using the :/1 control construct to call a predicate defined in a category extended by a category that is imported by the object making the call.
  • Fixed a Logtalk compiler bug when compiling an alias/3 predicate directive within a category that extends other categories.
  • Fixed a Logtalk compiler bug when compiling a class that imports a category that extends other categories. Thanks to Victor Noel for the bug report.
  • Small performance improvement to the caching of category predicates when using static binding.
  • Removed from the YAP config file the definition of the forall/2 predicate, which have been added as a built-in predicate in YAP version 5.1.3 (the current YAP CVS version must be used; the last stable version, 5.1.2, is broken on Windows). Added support for the proprietary if/1, else/0, elif/1, and endif/0 directives (when used outside Logtalk entities).
  • Updated the SWI-Prolog config file with support for the proprietary if/1, else/0, elif/1, and endif/0 directives (when used outside Logtalk entities).
  • Improved the "complements" example, moving the category initialization goal to the beginning of the example source file.
  • Added support for the Pygments syntax highlighter (co-developed with Clara Dimene).
  • Added a new sample Logtalk source file for testing syntax coloring support.
  • Added missing auto-completion keywords for the ISO Prolog standard arithmetic functions to the SubEthaEdit, TextMate, Notepad , jEdit, Vim, and Smultron text editors.
  • Corrected a bug in the SubEthaEdit syntax coloring support for the imports_category/2-3 built-in predicate. Added some missing files (license and mode settings) to the SubEthaEdit mode bundle.
  • Corrected a bug in the Vim syntax coloring support for the ISO Prolog built-in predicate current_char_conversion/2 and added missing support for for quoted atom escape sequences.
  • Corrected a bug in the jEdit syntax coloring support for hexadecimal numbers and added missing support for the extends_category/2-3 and at_end_of_stream/0 built-in predicates.
  • Added missing support for the syntax coloring of the external call Logtalk control construct, {}/1, to the Highlight package. Corrected a bug with 0'Char constants and with octal and hexadecimal escape sequences.
  • Added missing support for the syntax coloring of the external call Logtalk control construct, {}/1, and for quoted atom escape sequences to the TextMate text editor.
  • Added missing support for the syntax coloring of quoted atom escape sequences and of the built-in predicate at_end_of_stream/0 to the Source-highlight package.
  • Added missing support for the syntax coloring of the built-in predicate at_end_of_stream/0 and of the scope operator ::/2 to the Kate text editor. Improved syntax coloring of parametric object opening directives.
  • Added missing support for the syntax coloring of the built-in predicate unify_with_occurs_check/2 to the Emacs text editor. Corrected a bug in the syntax coloring of arithmetic comparison operators.
  • Added missing support for the syntax coloring of quoted atom escape sequences and of the built-in control construct call/1 to the GtkSourceView 2.x text widget.
  • Added missing support for the syntax coloring of variables, of quoted atom escape sequences, of the built-in method clause/2, of the external call Logtalk control construct {}/1, and of variables to the Nedit text editor. Corrected a bug with 0'Char constants and corrected some typos in the support for the current_event/2, implements_protocol/2-3, and abolish_category/1 built-in predicates.

New in Logtalk 2.31.5 (Apr 29, 2008)

  • Added support for checking arithmetic expressions for calls to non-portable functions when using the "portability" compiler flag.
  • Updated the implementation of the threaded/1 built-in predicate to ensure that thread creation errors (usually, virtual memory address space exhaustion) result in the corresponding exception rather than in a non-terminating call. Improved cancellation of all individual threads when one of them terminates with an exception or a failure.
  • Simplified the terms used to post individual results from threaded/1 calls to the queue associated to the call.
  • Corrected a bug in the built-in predicate threaded/1 when its argument is a conjunction (disjunction) of conjunctions (disjunctions).
  • Added a workaround for a mutex creation error when reloading a source file with entities defining synchronized predicates.
  • Updated the Logtalk runtime to unlock all mutexes hold by a thread when upon thread cancellation.
  • Corrected a Logtalk compiler bug that allowed a predicate to be declared both dynamic and synchronized. Thanks to Paul Crocker for the bug report.
  • Corrected a Logtalk compiler bug where local definition clauses for dynamic predicates are being generated for categories.
  • Updated the YAP and SWI-Prolog config files to set the default value of the "tmpdir" flag depending on the host operating-system. Added missing declaration for the multi-threading predicate thread_initialization/1.
  • Added missing declarations for some proprietary built-in meta-predicates to the B-Prolog config file.
  • Corrected a bug in the SWI-Prolog config file in the declaration of the proprietary built-in meta-predicate "soft cut".
  • Updated the XSB config file to use the new optimized call/N predicates found on the current XSB CVS version.
  • Added an integration script, "xsbmt64lgt", for using Logtalk with the multi-threaded, 64 bits version of XSB.
  • Simplified building of MacOS X Installer packages. Updated the Windows installation script to use the "C:lgtsvn" as base. Simplified manual installation instructions.
  • Updated the definitions of the predicate valid/1 for the library objects "list", "list(Type)", "numberlist", "set", "set(Type)", "varlist" to fail for lists with unbound tails after discussion with Jan Wielemaker and Ulrich Neumerkel.
  • Corrected a bug in the library object "lgtunit" when running "throws" tests (make sure the generated exception is subsumed by the expected exception). Added a "lgtunit_loader" loader utility file for loading the Logtalk unit test library.
  • Added a simple example, "debug_hooks", of using compilation hooks and term expansion for conditional compilation of debug statements.
  • Updated the "primes" multi-threading example to allow any number of threads to be used in the computation of primes numbers.
  • Added a new multi-threading example, "integration", implementing Recursive Gaussian Quadrature Methods for Numerical Integration for functions of a single variable, contributed by Paul Crocker.
  • Added a new multi-threading example, "mtbatch", for benchmarking multi-threading performance.
  • Added a new example, "ack", implementing the Ackermann function (general recursive function).
  • Added support for using the Highlight package (version 2.6.9 or later) by Andre Simon with Logtalk source files.
  • Updated the TextMate Logtalk bundle and its configuration instructions to make the "Compile" and "Generate ..." commands more general, making it compatible with most Prolog compilers. Added syntax coloring for standard arithmetic functions. Added a command for generating plain text files from XML documenting files.
  • Corrected a syntax coloring bug with character codes using the 0'Char notation in the SubEthaEdit 2.x and Vim text editors and in the source-highlight package.
  • Removed some redundant regular expressions from the jEdit text editor syntax coloring support files.
  • Corrected syntax coloring bugs with variables starting with underscores (including anonymous variables) and with atoms containing an underscore in the Emacs text editor.
  • Updated the Logtalk grammar documentation to reflect the changes to category relations introduced in version 2.31.0.
  • Added a "lgttxt.xsl" XSLT style-sheet and two shell scripts, "lgt2txt.sh" and "lgt2txt.js", for converting XML documenting files into text files. Updated the "lgt2*.sh" shell scripts for POSIX compliance, removing dependencies on bash shell features.
  • Updated the "lgtxml.xsl" XSLT style-sheet to ensure that the generated HTML files are fully compliant with the HTML 4.01 standard.
  • Updated the Debian installer package shell scripts for POSIX compliance, removing dependencies on bash shell features.

New in Logtalk 2.31.4 (Feb 21, 2008)

  • Optimized the performance of threaded/1 calls by using a per-call message queue for collecting the individual call results and by using the message queue identifier as a tag for the individual calls. This solution avoids runtime synchronization of a large number of threads on the same message queue, simplifies compilation and runtime handling of threaded/1 calls, and simplifies thread cancellation, eliminating any risk of dangling individual thread results.
  • Removed two redundant calls to the built-in predicate thread_exit/1 on the Logtalk compiler.
  • Corrected a bug where a competitive or-parallelism call would prematurely fail with one or more individual calls still pending.
  • Corrected a bug where a competitive or-parallelism call would succeed when all the individual calls had failed.
  • Corrected a bug when compiling calls to the Logtalk multi-threading built-in predicates made from the top-level interpreter, i.e. from within the pseudo-object "user".
  • Added foreach/3, forto/5, and fordownto/5 meta-predicates to the library object "loop". Updated the definitions of the forto/3-4 and fordownto/3-4 meta-predicates to allow the use of arithmetic expressions as arguments for convenience and clarity.
  • Corrected a bug in the implementation of the predicate lookup/3 in the library object "bintree".
  • Added a multi-threading example of the Fast Fourier Transform, "fft", contributed by Paul Crocker.
  • Corrected a bug in the implementation of the bisection algorithm in the multi-threading example "functions". Added an implementation of the MATLAB humps function (contributed by Paul Crocker).
  • Updated the multi-threading example "sorting" to workaround a mutex performance issue with XSB when generating lists of random numbers.
  • Updated support for the TextMate text editor. Added a command for generating the PDF documentation of open source files. Added missing tab triggers to the Logtalk snippets. Updated installation notes.
  • Corrected a bug in the jEdit syntax coloring support for the is/2 operator.

New in Logtalk 2.31.3 (Jan 28, 2008)

  • Added a "VERSION.txt" file that is used to check compatibility between an existing Logtalk user folder (whose path is stored in the LOGTALKUSER environment variable) and a new Logtalk version.
  • Updated the POSIX Prolog integration scripts to check for an outdated Logtalk user folder, creating a new one if necessary by running the "cplgtdirs" script (a backup is automatically made of the old directory).
  • Updated the Windows installer to create a registry key with the Logtalk version number and to check for an outdated Logtalk user folder.
  • Changed the predicate used to load Prolog files, adding an additional argument that represents a list of load/compile options (notably, encoding/1, which is necessary for supporting source files encodings such as ISO-8859-X).
  • Updated the SICStus Prolog 4 config file to also accept UCS-2 encodings when using the encoding/1 directive (UCS-2 is subsumed by UTF-16).
  • Added a workaround to the Quintus Prolog integration scripts for its lack of support for expanding environment variables in file names.

New in Logtalk 2.31.2 (Jan 21, 2008)

  • Extended compatibility of the experimental Logtalk encoding/1 directive to CxProlog 0.96.3 and SICStus Prolog 4.0.2 and improved support for YAP and SWI-Prolog.
  • Improved source file encoding handling by ensuring that a BOM present in a source file being compiled is inherited by the generated Prolog and XML files.
  • Changed the atoms used to represent different encodings when using the encoding/1 directive; Logtalk now uses the encoding names specified by IANA (using the preferred MIME name whenever available).
  • Updated the Logtalk compiler to throw an exception when the specified encoding is not supported by the used back-end Prolog compiler.
  • Updated the "encodings" example to use the new encoding names and added new source files using UTF-16 and UTF-32 text encodings.
  • Added POSIX and Windows integration scripts for Quintus Prolog.

New in Logtalk 2.31.1 (Jan 4, 2008)

  • Duplicated the range of threaded_call/2 tags for multi-threading Prolog compilers with bounded integers.
  • Updated the YAP config file to set the flag "language" to "iso". This is not strictly necessary to run Logtalk with YAP but it helps prevent nasty surprises when writing portable applications that rely on ISO Prolog semantics.
  • Updated the SWI-Prolog integration script to test for the availability of the XPCE library before trying to load the "xpcehook.pl" XPCE hook file.
  • Updated the Linux (RMP and Debian) and MacOS X package build scripts to include Prolog version compatibility information.
  • Updated the "tak" multi-threading example to allow parameterization of the number of threads to use.
  • Updated the "sorting", "hanoi", and "fibonacci" multi-threading examples to interpret the object parameter as the number of leaf threads (i.e. working threads that will not recursively create additional threads).
  • Updated the TextMate text editor support to include commands to compile and to automatically generate the XHTML documentation of open source files.