Release Notes

3.86.0 - December 18, 2024

Logtalk compiler and runtime

  • ADDED: Experimental logtalk::message_prefix_file/6 hook predicate to the message printing mechanism.

  • FIXED: False left-recursion warning when compiling a grammar rule for a multifile non-terminal that calls a local non-terminal with the same indicator.

Prolog adapter and integration files

  • UPDATED: Ciao Prolog adapter file to pretend that modules are supported to allow loading libraries and examples that require file use_module/1 directives.

Documentation

  • ADDED: Notes on encrypting applications using XVM.

  • FIXED: Multiple Handbook grammar and spelling typos.

  • FIXED: Multiple man pages grammar and spelling typos.

Library

  • FIXED: The os::sleep/1 predicate for XSB to also accept floats.

Tools

  • CHANGED: The lgtunit tool test compilation warning and error messages to include the file context for better integration with other developer tools.

  • CHANGED: The diagrams tool now uses a Unicode glyph for the magnifying lens instead of a PNG image.

  • CHANGED: The diagrams tool now uses a Graphviz box shape for Prolog modules instead of a tab, which is now only used for directories and libraries.

  • REMOVED: Deprecated lgt2svg.js script from the diagrams tool.

  • ADDED: Experimental diagrams tool support for the d2 graph language.

  • UPDATED: The diagrams tool to support graph languages such as d2 where the node identifiers are not global.

  • UPDATED: The diagrams tool to also support the PearAI, Windsurf, PyCharm, and IDEA text editors when generating diagrams with local file links.

  • UPDATED: The tutor tool to also explain duplicated predicate/non-terminal reference linter warnings.

  • UPDATED: The tutor tool to call the new logtalk::message_prefix_file/6 hook predicate to support VSCode displaying warnings and errors augmented with explanations.

  • UPDATED: The help tool for the new logtalk::message_prefix_file/6 hook predicate.

  • FIXED: The diagrams tool to also generate an instance/class caption for metaclasses.

  • FIXED: Bug in the diagrams tool where repeated nodes could be created for external entities.

  • FIXED: Bug in the diagrams tool where file loading diagrams would miss “includes” edges.

  • FIXED: Bug in the diagrams tool where file loading diagrams would show duplicated “includes” edges.

  • FIXED: The diagrams tool support for the graph languages to quote atoms in predicate labels and predicate node contents when required.

  • FIXED: The diagrams tool exclude options to allow generating external nodes for the excluded directories, files, libraries, and entities.

  • FIXED: Bug in the lgtdoc tool when printing a warning on missing entity directive info/1 key.

Examples

  • ADDED: New permutations example providing benchmarks based on list permutations. Adapted from Prolog code written and contributed by Paul Tarau.

  • UPDATED: The assumptions example with another individual example.

Installers and installation scripts

Tests

  • ADDED: Additional tests for the left-recursion linter warning.

  • ADDED: Additional tests for the Prolog standard round/1 evaluable.

  • IMPROVED: The manual installation script and MacPorts Portfile instructions for defining the LOGTALKHOME and LOGTALKUSER environment variables.

IDEs, text editors, and syntax highlighters support

  • UPDATED: VSCode support to use the new logtalk::message_prefix_file/6 hook predicate to support displaying warnings and errors augmented with the tutor tool explanations.

  • UPDATED: VSCode support to also list the lgtunit tool warning and error messages in the “PROBLEMS” pane.

  • FIXED: Compilation errors when loading the VSCode support file using the XSB backend.

3.85.0 - November 12, 2024

Logtalk compiler and runtime

  • CHANGED: The logtalk_load_context/2 built-in predicate to type-check the key argument.

  • CHANGED: Attempting to define an entity/predicate alias equal to the original entity/predicate is now a compilation error instead of simply a warning.

  • CHANGED: Reclassified the underscore_variables flag as a backend flag instead of a linter flag.

  • ADDED: New meta-flag, linter, to manage the values of all the linter flags as a group.

  • ADDED: New linter flag, encodings, to control source file text encoding warnings.

  • ADDED: New linter flag, general, for warnings that are not controlled by a specific flag.

  • IMPROVED: Print a linter warning on redundant entity qualification in predicate directives.

  • IMPROVED: Detect and report as compilation errors use_module/1-2 and uses/1-2 directives when compiling a protocol.

  • IMPROVED: Report as compilation errors instead of compilation warnings use_module/1-2 directives when not compiling a module as an object while using a backend that doesn’t support modules.

  • IMPROVED: Report as compilation errors export/1 and reexport/2 directives when not compiling a module as an object.

  • FIXED: The compiler to prevent trying to compile a Prolog use_module/1 directive as a Logtalk directive when compiling a module as an object.

  • FIXED: Detection of a file trying to recursively load itself to not throw a permission error when reloading a file that previously failed to load.

  • FIXED: Misleading error when compiling dynamic/1, discontiguous/1, and multifile/1 directives with arguments with redundant entity qualification.

Prolog adapter and integration files

  • UPDATED: Trealla Prolog adapter file to require version 2.59.21 or later.

Documentation

  • IMPROVED: Documentation of the issue_creator tool.

  • IMPROVED: The Handbook documentation on performance, adding a section on circular references.

  • IMPROVED: The Handbook documentation on the logtalk_make/0-1 built-in predicates.

  • UPDATED: The Handbook documentation on the underscore_variables flag.

Library

  • ADDED: Additional test for the java library checking setting an array element to the empty list atom.

  • UPDATED: The meta_compiler library to support optimization of meta-calls with closure meta-arguments that are messages to parametric objects.

Tools

  • ADDED: Support to the diagrams tool for VSCode, VSCodium, Cursor, Zed, BBEdit, MacVim, and TextMate local file links.

  • UPDATED: Rewrite error and warning messages from the packs tool so that they can be explained by the tutor tool.

  • UPDATED: The tutor tool to explain the new redundant entity qualifier linter warning.

  • FIXED: Case where the packs tool would print repeated “Pack dependency not available” error messages when trying to install or update a pack with alternative dependencies where none is available.

  • FIXED: The debugger tool description of the p (print) port command.

  • FIXED: Typos in the mode/2 directives for the debuggerp protocol logging/3 and nolog/3 public predicates.

  • FIXED: Typo in the info/2 directive for the tutor object explain//1 public non-terminal.

  • FIXED: Harmless linter warning when loading the debugger tool with some backends.

Examples

  • IMPROVED: The searching example representation of some of the problems.

  • UPDATED: The errors example for the new redundant entity qualifier linter warning.

  • FIXED: Portability issue in the errors example tests.

  • FIXED: Cannot run the module_aliases example with XSB and Tau Prolog.

  • FIXED: The symbiosis example for Trealla Prolog removing its apply module.

Tests

  • CHANGED: Tests for the Prolog standard initialization/1 directive to not depend on support for the ensure_loaded/1 directive.

  • ADDED: Additional tests for the user built-in entity.

  • ADDED: Tests for the Logtalk consistency_error/3 built-in method.

  • ADDED: Additional tests for the Prolog standard bagof/3 and setof/3 built-in predicates.

  • ADDED: Tests for the Prolog standard write_term/2-3 built-in predicates support for the portrayed/1 option implemented by most systems.

  • ADDED: Tests for the Prolog de facto standard print/1-2 built-in predicates and the portray/1 user-defined hook predicate.

  • ADDED: Additional tests for the de facto Prolog standard format/2-3 predicates (~p control sequence).

  • IMPROVED: Tests for the de facto standard Prolog built-in predicates that take a clause reference argument.

  • FIXED: Compilation errors when running the always_true_or_false_goals and deprecated linter flag tests with XSB.

  • FIXED: Missing condition in test for Unicode UTB-8 (no BOM) encoding.

  • FIXED: Portability issue when running the tests for the Prolog standard call/1 control construct and call/N built-in predicates with JIProlog.

Installers and installation scripts

  • UPDATED: The Trealla Prolog embedding scripts to create a loader.pl file when the application loader option is provided.

  • UPDATED: The CxProlog, ECLiPSe, Trealla Prolog, and XVM embedding scripts to accept an optional startup application goal argument.

3.84.0 - October 22, 2024

Logtalk compiler and runtime

  • ADDED: New fails_if key to the info/2 predicate directive for documenting predicate fail conditions. Adopted from ECLiPSe similar fail_if key.

  • IMPROVED: Detect and report when a uses/2 directive references the object that contains it.

  • IMPROVED: Detect and report when a use_module/2 directive references the module (being compiled as an object) that contains it.

  • IMPROVED: Detect and report when an alias/2 directive references the entity that contains it.

  • IMPROVED: Detect and report when a source file attempts to load itself.

  • IMPROVED: Error reporting when a source file attempts to include itself.

  • FIXED: Prevent using grammar rules to try to redefine the (;)/2, (->)/2, and (*->)/2 control constructs.

Documentation

  • IMPROVED: Handbook glossary entries for “predicate”, “method”, “sender”, and “this”.

  • IMPROVED: Handbook section on running parallel Logtalk processes.

  • IMPROVED: Documentation of the packs tool on working with packs using git archive URLs, signing packs, and encrypting packs.

Library

  • CHANGED: The library object hook_pipeline/1 to not use default expansions and pass as-is any terms and goals not expanded by a hook object to the next hook object. This library object now calls the expanding protocol predicates directly instead of using the expand_term/2 and expand_goal/2 built-in methods.

  • CHANGED: The library object hook_set/1 to call the expanding protocol predicates directly instead of using the expand_term/2 and expand_goal/2 built-in methods.

  • ADDED: Predicates delete_directory_and_contents/1 and delete_directory_contents/1 to the os library.

  • ADDED: Additional tests for the dictionaries library.

  • IMPROVED: Documentation of the dictionaries library predicates.

  • FIXED: The library object type to properly load the SWI-Prolog unicode module library when running with this backend. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: The definition of the os::delete_file/1 library predicate for YAP.

  • FIXED: Bug in the meta_compiler library when attempting to compile a closure for a (::)/2 (or (:)/2) goal when the object (or module) argument is not bound at compile time. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: The meta_compiler library to not try to expand goals in clauses containing parameter variables. Thanks to Alex Kouznetsov for the bug report.

Tools

  • ADDED: Support for running just a selection of tests to the lgtunit tool. Thanks to Michael McNally for the suggestion.

  • ADDED: Support to the lgtunit tool for test/2-3 test dialects as facts.

  • ADDED: Requirements section to the documentation of the help and lgtdoc tools.

  • ADDED: Support to the packs tool for installing and updating packs from local archives.

  • ADDED: Support to the packs tool for gpg encrypted pack and registry archives.

  • ADDED: Support to the packs tool to use wget in alternative to curl.

  • ADDED: Support to the packs tool to use .sig signature files in alternative to .asc signature files.

  • ADDED: Support to the tutor tool to explain selected lgtunit, make, and packs tool error messages.

  • ADDED: Additional tests for the dead_code_scanner tool.

  • IMPROVED: Tests code coverage for the packs tool.

  • IMPROVED: Man page of the logtalk_tester.sh script.

  • UPDATED: The lgtdoc tool to process the new fails_if key of the info/2 predicate directive.

  • FIXED: The dead_code_scanner tool to avoid false positives when checking predicate aliases declared in uses/2 or use_module/2 directives.

  • FIXED: The dead_code_scanner tool to not report the user-defined coinductive_success_hook/1-2 hook predicates.

  • FIXED: The lgtdoc tool to recognize consistency errors as standard exceptions.

  • FIXED: Missing space between the tar command and non-empty extra tar options in the packs tool.

  • FIXED: The logtalk_tester.sh script to follow symbolic links when looking for test driver files. Thanks to Lindsey Spratt for the bug report.

Examples

  • ADDED: New tests_dsl example illustrating how to define a Domain Specific Language (DSL) for writing tests using a pipeline of hook objects to translate the tests to a test dialect natively supported by the lgtunit tool.

Tests

  • ADDED: Additional tests for the Prolog standard (=)/2, (=..)/2, arg/3, clause/2, copy_term/2, functor/3, predicate_property/2, term_variables/2, and term comparison built-in predicates.

  • ADDED: Additional tests for the Prolog de facto standard clause/3 built-in predicate.

3.83.0 - September 24, 2024

Logtalk compiler and runtime

  • CHANGED: The representation error argument when calling context/1 built-in method would create a cyclic term from cyclic_term to acyclic_term.

  • CHANGED: The exception term when trying to define a predicate inside a protocol to use a permission type of predicate instead of clause.

  • CHANGED: All compiler domain errors for consistency errors to use the new consistency_error/3 built-in method.

  • ADDED: New consistency_error/3 built-in method.

  • IMPROVED: Linter warnings for trivial fails to distinguish between predicate and non-terminal goals.

  • IMPROVED: Compiler warnings on missing scope directives for non-terminals.

  • IMPROVED: Internal documentation of the compiler and runtime.

  • FIXED: When calling threaded engines built-in predicates using a backend that doesn’t support engines, throw a resource_error(engines) instead of a resource_error(threads) error.

  • FIXED: Compiler redundant check if a recursive call to a meta-predicate complies with the expected number of additional arguments for closures.

  • FIXED: Compiler bug when using a uses/2 directive to change the order of the arguments of a predicate and using the predicate alias as a closure.

  • FIXED: Disjunction optimization bug when the left-side is a variable and the disjunction is an argument of the call/1 control construct.

  • FIXED: Case where the compiler would report the wrong error when a source file defined category declares a predicate or a non-terminal dynamic textually after its definition.

  • FIXED: Protect the linter check for goals that are always true or false from unexpected exceptions and report them instead of aborting compilation with an error.

Prolog adapter and integration files

  • UPDATED: The XVM adapter file with additional candidate built-in predicates for checking tautology and falsehood goals.

Documentation

  • ADDED: Handbook section with guidelines for describing predicates in info/2 directives.

  • IMPROVED: Handbook documentation of the representation_error/1, resource_error/1, existence_error/2, and permission_error/3 built-in methods.

  • IMPROVED: Handbook section on the mode/2 predicate directive.

  • IMPROVED: Handbook section on lambda expressions.

Tools

  • CHANGED: The lgtunit tool run_test_sets/1 predicate to also accept a list with a single test set or an empty list as argument.

  • UPDATED: The help tool to be aware of the new consistency_error/3 built-in method.

  • UPDATED: The tutor tool to explain consistency errors.

Examples

  • UPDATED: The errors example to illustrate consistency errors.

Tests

  • ADDED: Additional test for the Prolog standard logical update semantics.

  • ADDED: Additional tests for the Prolog standard arg/3, atom_chars/2, atom_codes/2, number_chars/2, number_codes/2, current_predicate/1, clause/2, nl/0-1, op/3, retractall/1, and term_variables/2 built-in predicates.

  • IMPROVED: Tests for the (=..)/2, abolish/1, and functor/3 Prolog standard predicates.

  • IMPROVED: Tests for the Prolog call/1 control construct to delay expected errors to runtime.

  • UPDATED: Tests for the missing_directives and trivial_goal_fails linter flags.

  • UPDATED: The tests for the Prolog standard op/3 for Trealla Prolog which now allows defining an atom as both an infix and a postfix operator.

Installers and installation scripts

  • FIXED: The Docker file for building the SWI-Prolog based image to properly define the INFOPATH and MANPATH environment variables.

3.82.0 - August 20, 2024

Logtalk compiler and runtime

  • CHANGED: Linter warnings on suspicious cuts in disjunctions are now controlled by the disjunctions flag.

  • CHANGED: Linter warnings on calling Logtalk/Prolog top-level shortcuts or Logtalk built-in predicates as directives are now controlled by the portability flag.

  • ADDED: Support for runtime constructed messages for the built-in methods. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: The handling of include/1 directives by the create_protocol/3, create_object/4, and create_category/4 built-in predicates to throw an error instead of failing when the included file is not valid. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: The message term of the linter warning for a missing predicate scope directive when an info/2 or mode/2 directive exists would misreport the existing directive.

  • FIXED: Duplicated linter warnings when checking if (\=)/2 goals are always true or false.

Prolog adapter and integration files

  • CHANGED: The default value of the underscore_variables linter flag to dont_care for all supported backends.

Documentation

  • IMPROVED: Handbook documentation of the underscore_variables linter flag.

  • IMPROVED: Handbook documentation of the logtalk::message_prefix_stream/4 predicate.

  • FIXED: Handbook documentation of the logtalk::ask_question/5 predicate. Thanks to Paul Brown for the bug report.

Library

  • CHANGED: The arbitrary library check if null is a valid character for the current backend to not rely on exceptions but instead use the backend identifier.

Tools

  • ADDED: Tests for the linter tool.

  • IMPROVED: The packs tool handling of alternative pack dependencies.

  • IMPROVED: Man page of the packs tool lgtenv script.

  • UPDATED: The lgtenv scripts to support specifying the name of the packs sub-directory.

  • FIXED: The logtalk_allure_report scripts when using both the single page and title options. Allure 2.26.0 or a later version is now required.

Tests

  • ADDED: Additional tests for the include/1 directive.

  • ADDED: Additional tests for the built-in database and reflection methods.

Installers and installation scripts

  • ADDED: Portable Docker image support for displaying man pages.

  • ADDED: Portable Docker image support for displaying the Handbook and the APIs Texinfo files using the help tool.

  • FIXED: The Docker file for building the portable image to properly define the INFOPATH and MANPATH environment variables.

3.81.0 - July 16, 2024

Logtalk compiler and runtime

  • CHANGED: The message delegation control construct, []/1, to preserve also the original meta-call context.

  • ADDED: Support for runtime constructed (^^)/2 goals. Thanks to Alex Kouznetsov for the bug report.

  • ADDED: Support for using the (<<)/2 and catch/3 control constructs in a grammar rule body.

  • IMPROVED: Linter warning for calls to the {}/1 control construct.

  • FIXED: Consistent handling of meta-arguments when a meta-predicate calls another local meta-predicate with meta-arguments that are not meta-arguments of the caller.

  • FIXED: Cases where the meta-argument of phrase//1 and phrase/2-3 goals would not be called in the meta-call context. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: Clean the dynamic lookup caches when changing the values of the debug and optimize flags. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: Detect and report as a compiler error calls to the context(Context) built-in method from clauses with heads containing the Context variable.

  • FIXED: Calls to the clause/3 built-in method when the clause reference is bound and the clause is compiled in debug mode.

Prolog adapter and integration files

  • CHANGED: Account for the renaming of the LVM backend to XVM.

Documentation

  • ADDED: Notes on backend support for clause references to the adapters/NOTES.md file.

  • ADDED: Handbook documentation on using predicate aliases in uses/2 directives to use a different order of the predicate arguments.

  • ADDED: Handbook mention on the backend dependent support for clause reference built-in methods.

  • ADDED: Handbook glossary entry for “clause reference”.

  • IMPROVED: Handbook documentation on meta-predicate semantics.

  • IMPROVED: Handbook documentation on the meta_predicate/1 directive.

  • IMPROVED: Handbook documentation of the (::)/2, (::)/1, (<<)/2 control constructs.

  • IMPROVED: Handbook documentation on the this/1 built-in method.

  • IMPROVED: Documentation of the lgtunit tool on how to use the assertion/1-2 utility predicates.

  • UPDATED: Handbook documentation on debugging using conditional breakpoints and log points.

Library

  • IMPROVED: Performance of the json library when parsing large files. Thanks to Yurii Rashkovskii for the bug report.

  • IMPROVED: Performance of the meta_compiler library when generating auxiliary functors with backends that provide the atomic_list_concat/2 predicate.

  • FIXED: Error in the meta_compiler library when expanding a meta-argument that is a call to a Prolog module predicate. Thanks to Alex Kouznetsov for the bug report.

  • FIXED: Harmless linter warning when loading the types library using XSB.

Tools

  • CHANGED: The lgtunit object test/3 private predicate is no longer declared as a meta-predicate.

  • ADDED: Support for conditional and triggered breakpoints to the debugger tool.

  • IMPROVED: The debugger tool implementation of log points to support printing the default port message, the default port message followed by a comment, and replacing the default port message with a text with term placeholders that are expanded at runtime.

  • IMPROVED: The debugger tool performance when checking for leashed ports.

  • UPDATED: Documentation on developer tools requirements.

  • UPDATED: The lgtunit tool to print a new line after reporting a failed test to simplify parsing by other tools.

  • FIXED: Removed non-required meta_predicate/1 directives for some auxiliary lgtunit object predicates.

  • FIXED: Bug in the lgtdoc tool where invalid reStructuredText files could be generated when entities are defined in source file at the root level of the documented project.

Examples

  • ADDED: New self_vs_super example illustrating the semantics of calling an inherited meta-predicate using a message to “self” versus using a “super” call.

  • FIXED: The neo4j example finding of the Neo4j installation directory.

  • FIXED: The emetas example definition of the best_of/3 meta-predicate.

Tests

  • ADDED: Additional tests for the (^^)/2 control construct.

Installers and installation scripts

  • ADDED: Docker file for building an image with Logtalk, a subset of the supported Prolog backends, Jupyter, JupyterLab, and the Logtalk kernel.

  • FIXED: The SWI-Prolog based Docker image to also define the INFOPATH environment variable.

  • FIXED: The install.sh manual installation script to avoid install-info warnings and delete any old Logtalk info files.

IDEs, text editors, and syntax highlighters support

  • REMOVED: Outdated VSCode support file vscode_message_streamer.lgt.

  • UPDATED: VSCode support to support setting conditional breakpoints.

  • UPDATED: VSCode support to add failed tests to the “Problems” pane.

  • UPDATED: VSCode support to ensure the debugger tool is loaded when calling the “Make - Debug” command.

  • FIXED: VSCode support to workaround SICStus Prolog and SWI-Prolog down-casing file paths on Windows and breaking handling of breakpoints.

3.80.0 - June 4, 2024

Logtalk compiler and runtime

  • CHANGED: Also print a silent compiling_file/2 message when processing include/1 directives that can be intercepted by tools.

  • CHANGED: Renamed the logtalk object debug_handler_provider/1 predicate to debug_handler/1 and the debug_handler/2 predicate to debug_handler/3.

  • ADDED: New activate_debug_handler/1, deactivate_debug_handler/0, and active_debug_handler/1 predicates to the logtalk object supporting the activation and deactivation of debug handler providers.

  • ADDED: New entity property, directive/2, providing the entity opening directive start and end lines when defined in a source file.

  • ADDED: Compiler support for using backend proprietary directives in calls to the create_object/4 and create_category/4 built-in predicates.

  • IMPROVED: Allow multiple debug handler providers to be loaded simultaneously (with the restriction that only one of them can be active at any given time).

  • FIXED: Regression preventing linter warnings for duplicated clauses and grammar rules.

  • FIXED: Reporting of the number of compilation warnings will fail to count some of the warnings.

  • FIXED: The phrase/2-3 built-in methods to properly handle a runtime bound first argument when called from a meta-predicate. Thanks to Alex Kouznetsov for the bug report.

Prolog adapter and integration files

  • UPDATED: The LVM adapter file to support encryption of the intermediate Prolog files generated by the compiler by setting the prolog_compiler flag to [encrypt(true)] and the clean flag to off.

  • ADDED: SWI-Prolog adapter file initial support for using tabling directives and predicates in dynamically created objects.

Documentation

  • ADDED: A “Known issues” section to the embedding scripts documentation.

  • ADDED: Handbook documentation on how to define debug handler providers.

  • ADDED: Handbook documentation on debugging using log points.

Library

  • ADDED: New sequential_occurrences/2-3 list predicates to the types library.

Tools

  • CHANGED: The debugger and ports_profiler tools for the new debug handler predicates.

  • ADDED: New start/0 and stop/0 predicates to the ports_profiler object to simplify activating and deactivating it as the debug handler provider.

  • ADDED: Support for log points to the debugger tool.

  • ADDED: New public explain//1 non-terminal to the tutor tool.

  • UPDATED: The debugger object debug/0 and trace/0 predicates to activate the object as the current debug handler provider. Updated also the nodebug/0 predicate to deactivate the debugger object as the current debug handler provider.

  • UPDATED: The debugger tool to print silent port messages (when leashed) that can be intercepted by tools.

  • IMPROVED: The packs tool to clarify when trying to install a pack that’s already installed if it’s installed from a different registry.

Examples

  • FIXED: The missing_data example loader file.

  • FIXED: Lambda expression warnings when loading the missing_data example.

IDEs, text editors, and syntax highlighters support

  • ADDED: VSCode support for managing spy points and log points.

  • ADDED: VSCode handling of compiling_file/2 messages to support clearing file diagnostics when recompiling files.

  • UPDATED: VSCode support to allow the find_implementations/4 predicate to also find protocol implementations.

  • FIXED: VSCode cases where non-terminal declarations and definitions would not be found.

  • FIXED: VSCode case where the definition for a predicate listed in a uses/2 directive would not be found.

  • FIXED: VSCode finding of entity references to avoid false positives.

  • FIXED: VSCode support when (re-)running tests without using the GUI command.

  • FIXED: VSCode support for clearing file diagnostics when recompiling files.

3.79.0 - May 15, 2024

Logtalk compiler and runtime

  • FIXED: Regression in the logtalk_make/1 predicate check target where the file location for a missing predicate reference would not be reported correctly.

  • FIXED: Don’t print left-recursion linter warnings for coinductive predicates.

  • FIXED: Allow term-expansion to generate multiple entity definitions. Thanks to Alex Kouznetsov for the bug report.

Documentation

  • IMPROVED: Handbook documentation of the term-expansion mechanism.

Library

  • FIXED: Silence harmless left-recursion linter warning in the timeout library tests.

Tools

  • CHANGED: The dead_code_scanner and lgtdoc tools to print warnings using the same format used by the compiler.

  • FIXED: The code_metrics tool computation of entity cyclomatic complexity to also consider multifile predicate definitions contributed by the entity to other entities when computing graph connected components.

  • FIXED: The code_metrics tool computation of entity Unique Predicate Nodes (UPN) to also count multifile predicate definitions contributed by the entity to other entities.

  • FIXED: Code coverage for tests of the Halstead complexity metric.

  • FIXED: Deleted dead code in the code_metrics and lgtdoc tools.

  • FIXED: The wrapper reporting of missing meta_predicate/1 directives. Thanks to Alex Kouznetsov for the bug report.

Examples

  • FIXED: Silence harmless left-recursion linter warning in the tbbt example.

  • FIXED: Missing predicates in the relations example.

IDEs, text editors, and syntax highlighters support

  • ADDED: VSCode support predicates for using the dead_code_scanner, make, and code_metrics tools and for recursively generating documentation and diagrams.

  • UPDATED: VSCode support predicates for running tests and doclets to add compiler warnings and errors to the “Problems” pane.

  • UPDATED: VSCode support predicates for running tests the VSCode to make the tests results available for code lens.

  • UPDATED: VSCode support predicate that finds the parent file of a loaded file to also work for included files.

  • FIXED: Avoid missing entity warnings when loading the VSCode support.

3.78.0 - May 6, 2024

Logtalk compiler and runtime

  • ADDED: Linter warning for left-recursion in clauses and grammar rules. Controlled by the new left_recursion flag with default value warning.

  • ADDED: Object and category alias/2 property for object and module aliases declared using the uses/1 and use_module/1 directives. Also added the alias properties object, module, and predicate.

  • ADDED: Object and category declares/2, defines/2, alias/2,, calls/2, updates/2, includes/3, and provides/3 properties now include an entity and predicate lines/2 property.

  • FIXED: Bug where the entity properties includes/3 and provides/3 could be missing after reloading modified source files containing predicate multifile directives.

Documentation

  • ADDED: A glossary definition for homoiconic programming languages.

  • IMPROVED: Handbook section on declarative object-oriented programming.

  • UPDATED: Handbook documentation on developer tools requirements.

  • UPDATED: The help tool documentation on known issues.

  • UPDATED: Notes on the VSCode and VSCodium text editors support.

Tools

  • UPDATED: The tutor tool to explain the new linter warning for left-recursion in clauses and grammar rules.

  • FIXED: Dependency on non-standard predicate in the dead_code_scanner tool.

  • FIXED: Harmless Texinfo warning when using the help::man/1 predicate.

Examples

  • IMPROVED: Documentation of the shapes example.

  • UPDATED: The errors example to illustrate the new linter warning for left-recursion in clauses and grammar rules.

  • UPDATED: The multifile example to also illustrate multifile non-terminals.

  • FIXED: Spurious choice-points in the blocks and bricks examples.

  • FIXED: The SICStus Prolog specific constraints/sicstus example to not depend on the default double_quotes flag value.

  • FIXED: The SWI-Prolog specific constraints/swipl example to not depend on the default double_quotes flag value.

  • FIXED: The SWI-Prolog specific constraints/swipl example to always load the knight object.

  • FIXED: The SWI-Prolog specific pengines example to not depend on the default double_quotes flag value.

Tests

  • ADDED: Additional tests for the Prolog standard (=..)/2 and is/2 predicates.

IDEs, text editors, and syntax highlighters support

  • ADDED: Support for VSCode and VSCodium code navigation features.

3.77.0 - April 2, 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.

3.76.0 - March 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.

3.75.0 - February 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.

3.74.0 - January 31, 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.

3.73.0 - December 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.

3.72.0 - November 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.

3.71.0 - October 12, 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.

3.70.0 - September 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.

3.69.0 - August 21, 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.

3.68.0 - July 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.

3.67.0 - July 4, 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.

3.66.0 - May 30, 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.

3.65.0 - April 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-prolog\scryer-prolog.exe executable.

  • ADDED: Preliminary support for Trealla Prolog to the Windows installer. Assumes a C:\tpl-windows-x64\tpl.exe executable.

3.64.0 - March 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.

3.63.0 - February 27, 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.

3.62.0 - January 31, 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.

3.61.0 - December 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.

3.60.0 - November 15, 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.

3.59.0 - October 18, 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.

3.58.0 - September 27, 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.

3.57.0 - July 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.

3.56.0 - June 9, 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.

3.55.0 - April 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.

3.54.0 - March 22, 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.

3.53.0 - January 20, 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.

3.52.0 - December 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.

3.51.0 - October 26, 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.

3.50.0 - August 31, 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.

3.49.0 - July 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.

3.48.0 - July 6, 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.

3.47.0 - June 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.

3.46.0 - May 4, 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.

3.45.0 - March 23, 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.

3.44.0 - February 3, 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.

3.43.0 - December 22, 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 <</2 context-switching control construct.

  • FIXED: The os::directory_files/2 predicate for LVM to also return the . and .. directories as per the osp protocol.

  • FIXED: Test failure for the hook_objects library due to missing setup step.

  • FIXED: Fix the os::shell/1 library predicate for ECLiPSe (broken due to a bug in its system/1 built-in predicate).

  • FIXED: The os::command_line_arguments/1 predicate for Tau Prolog.

  • FIXED: The os library predicates cpu_time/1 and wall_time/1 for LVM.

Tools

  • CHANGED: The lgtunit tool now requires and checks that test identifiers are ground callable terms.

  • ADDED: Predicates set_text_output/3 and set_binary_output/3 to the lgtunit tool.

  • ADDED: Support for Trealla ProLog to the debugger, lgtunit, and ports_profiler tools.

  • ADDED: Additional test for the debugger::trace/0 predicate.

  • IMPROVED: Advice given by the tutor tool for warnings generated by compile time references to unknown entities.

  • IMPROVED: Documentation of the ports_profiler tool.

  • UPDATED: The logtalk_tester script support for the LVM backend.

  • FIXED: The lgtunit::run_test_sets/1 predicate to type-check the test set objects.

  • FIXED: The lgtunit tool expansion of discontiguous/1 directives to apply only to entity directives.

  • FIXED: The debugger tool to call the reset/0 predicate at loading time to ensure that code compiled in debug mode will also run even when not tracing or debugging. Thanks to Camilo Correa Restrepo for the bug report.

  • FIXED: The lgtdoc tool to abolish the temporary objects created to find inherited predicates when documenting entities.

Examples

  • ADDED: Crude solution to the bench example to run all benchmarks.

  • ADDED: Tests for some of the individual benchmarks in the bench example.

  • IMPROVED: Fixed some lint warnings and improved the portability of the bench example.

  • UPDATED: The encodings example to support Tau Prolog and Trealla ProLog.

  • UPDATED: The module_aliases example to support Trealla ProLog.

  • FIXED: Changed an operator declaration in the metainterpreters example to avoid a conflict with a LVM built-in operator.

  • FIXED: The expansion example to only expand entity terms in the expansion pipeline demo.

  • FIXED: The modules example to avoid a spurious loading error when running its tests using a backend that doesn’t natively support modules.

  • FIXED: The bench example reducer benchmark compatibility with GNU Prolog and SICStus Prolog.

  • FIXED: The bench example flatten and mu benchmarks compatibility with GNU Prolog.

  • FIXED: The bench example serialise benchmark portability.

Contributions

  • CHANGED: The operators used by verdi_neruda to avoid conflicts with some backends.

Tests

  • CHANGED: The tests for the Prolog standard log/1 function to also accept an evaluation_error(zero_divisor) exception term when the argument is zero.

  • CHANGED: The tests for the asserta/1 and assertz/1 Prolog standard predicates to accept alternative callable type errors to account for current practice.

  • ADDED: Additional tests for the Prolog standard syntax for atoms and curly bracketed terms.

  • ADDED: Additional tests for the Prolog standard call/1 control construct.

  • ADDED: Additional tests for the atom_concat/3 Prolog standard predicate. Contributed by John Stewart.

  • ADDED: Additional tests for the current_predicate/1, write_term/2-3, writeq/2, read_term/2-3, at_end_of_stream/1, set_stream_position/2, peek_byte/1-2, get_byte/1-2, and put_byte/1-2, open/4, close/2, set_stream_position/2, and retractall/1 Prolog standard predicates.

  • ADDED: Additional test for the Prolog standard (**)/2 function.

  • ADDED: Test for the zero_divisor exception for the Prolog standard (//)/2 function.

  • ADDED: Integer overflow tests for the Prolog standard truncate/1, round/1, and ceiling/1 functions.

  • ADDED: Missing type error tests for the Prolog standard xor/2 function.

  • ADDED: Additional tests for the de facto standard findall/4, length/2, numbervars/3, predicate_property/2, and succ/2 Prolog predicates.

  • ADDED: Additional tests for the user pseudo-object.

  • IMPROVED: Some tests for the Prolog standard disjunction control construct and the call/N predicate to try to delay expected errors to runtime.

  • IMPROVED: Tests for Prolog standard double-quoted terms.

  • IMPROVED: Tests for the Prolog standard atom_length/2 built-in predicate.

  • IMPROVED: Test for the logtalk_make/0-1 predicates to ensure that an updated main file or included file will have a different file modification time from the previous version.

  • FIXED: Test for the op/3 standard Prolog predicate for compliance with the ISO/IEC 13211-1:1995/Cor.2:2012(en) standard update.

  • FIXED: Typo in test for the Prolog standard char_code/2 built-in predicate that would cause a test failure with some backends.

  • FIXED: Tests the Prolog standard bitwise functions to skip those that would require a system using two’s complement representation for negative integers.

  • FIXED: Prevent tests for the clause reference predicates and for the setup_call_cleanup/3 predicate to run with the GNU Prolog backend.

  • FIXED: Only run tests for the setup_call_cleanup/3 predicate on backends defining it as a built-in predicate or when the adapter file emulates it.

IDEs, text editors, and syntax highlighters support

  • ADDED: Sample EditorConfig file and link to the official website to the coding directory.

  • ADDED: Instructions on how to provide better git diff hunk header context that includes the first line of the entity opening directive.

  • ADDED: UltiSnips support for the Vim text editor. Contributed by Paul Brown.

3.42.0 - October 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.

3.41.0 - September 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.

3.40.0 - July 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.

3.39.0 - June 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.

3.38.0 - April 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.

3.37.0 - April 2, 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.

3.36.0 - March 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 <</2 goals.

  • FIXED: Overriding a hook object specified using a compiler option when a hook object is already specified using a file local set_logtalk_flag/2 directive.

  • FIXED: Generate a compiler error when trying to redefine a built-in method or a built-in control construct using a uses/2 or use_module/2 directive.

  • FIXED: Bug where a compilation error in a compiler generated auxiliary clause (usually caused by a call in the body to a module predicate with an ambiguous meta-predicate template) would result in a failure instead of an error message.

  • FIXED: Search for settings files in the $XDG_CONFIG_HOME/logtalk and $HOME/.config/logtalk directories, not in a $HOME/.config directory for compliance with the XDG Base Directory Specification.

Prolog adapter and integration files

  • CHANGED: The Qu-Prolog adapter file to redefine the :/2 operator per its ISO Prolog standard definition.

  • IMPROVED: The SWI-Prolog adapter file now deletes use_module(library(yall)) directives when compiling modules as objects as this library implements Logtalk lambda expressions and is thus redundant.

  • UPDATED: The SWI-Prolog adapter file to expand its new autoload/1-2 directives into the corresponding use_module/1-2 directives when compiling modules as objects.

  • FIXED: The SWI-Prolog integration file to load the lock_predicate/1 library predicate explicitly.

Documentation

  • ADDED: A glossary definition for expansion workflow.

  • IMPROVED: The Handbook objects, categories, nomenclature, and term-expansion sections.

  • IMPROVED: The linter tool documentation.

  • UPDATED: Handbook for the changes to version and date formats in info/1 directives.

  • UPDATED: Handbook user and reference manual links to API documentation to not require an Internet connection when browsed locally.

Library

  • ADDED: New hook_objects library providing convenient hook objects for defining custom expansion workflows.

  • IMPROVED: Portability of the random, statistics, and types libraries by safe guarding against backend Prolog compilers where the (/)/2 operator may return an integer or a rational number depending on proprietary flags.

  • FIXED: The numberlist::average/2 predicate to fail for empty lists as specified in the numberlistp protocol.

  • FIXED: The difflist::append/3 predicate for the case where the difference lists are unbound.

  • FIXED: Added missing definition for predicate difflist::append/2.

Tools

  • CHANGED: The code_metrics, dead_code_scanner, diagrams, and lgtunit tools to print dates using the ISO 8601 standard format.

  • CHANGED: The lgtunit tool no longer prints a running_tests_from_object/1 message as test objects are always compiled with the source_data flag turned on.

  • ADDED: Support to the logtalk_tester shell script to pass additional command-line options to the integration script used to run the tests.

  • ADDED: Object minimal_output to the lgtunit tool that can be loaded before running a test suite to minimize the test results output.

  • ADDED: Object automation_report to the lgtunit tool that is loaded automatically by the logtalk_tester automation shell script.

  • ADDED: Output verbosity option to the logtalk_tester shell script.

  • IMPROVED: The logtalk_tester shell script now uses the report generated by the automation_report object provided by the lgtunit tool for reliable reporting independent of the default tests results output format.

  • IMPROVED: The lgtunit tool now prints a warning when unknown entities are declared as covered.

  • IMPROVED: The code_metrics, dead_code_scanner, lgtdoc, and lgtunit tools to pad month, day, hours, minutes, and seconds when single digit when writing timestamps.

  • IMPROVED: The tutor explanations of unknown entity, variables shared by both arguments of is/2 goals, float comparisons, plus date and version format warnings.

  • UPDATED: The tutor tool for the new lint warning on cyclic terms.

  • FIXED: The logtalk_tester shell script to not display text from comment messages when listing compilation errors, warnings, and failed unit tests.

  • FIXED: The lgtunit tool code coverage reports to print the parameters passed to a parametric test object instead of printing an object template.

  • FIXED: The lgtunit tool API documentation for the quick_check/2 predicate failed to mention the s/1 option for specifying the maximum number of shrink operations.

  • FIXED: The lgtunit tool to ensure that test objects are compiled with the source_data flag turned on.

  • FIXED: Unknown entity declared as covered in the code_metrics tool.

Tests

  • ADDED: Tests for the term_expansion/2 built-in method.

  • ADDED: Tests for the presence of the standard ISO Prolog operators.

  • ADDED: Tests for the write_term/3 ISO Prolog standard predicate for writing atoms that contain a % character.

Examples

  • CHANGED: Internal representation used by the eight_puzzle object in the searching example to avoid a clash with SWI-Prolog when configured to represent rational numbers as N/D terms.

  • ADDED: New example, closed_world_assumption, illustrating the difference between declaring a predicate and defining a predicate and the Closed World Assumption (CWA) semantics when calling predicates and sending messages.

  • ADDED: New example, predicate_lookups, illustrating the lookup algorithms used when sending messages to objects to locate predicate declarations and predicate definitions.

  • ADDED: New example, self_vs_this, illustrating the difference between self and this and the corresponding execution-context built-in methods.

  • ADDED: New example, pengines, of using SWI-Prolog pengines from objects. Joint work with Michael T. Richter.

  • ADDED: New example, around_methods, of defining a complementing category that uses the experimental @/1 goal annotation to define an “around method”.

  • IMPROVED: Tests for the sicstus example.

  • UPDATED: The errors example to illustrate float comparisons and cyclic terms lint warnings.

  • FIXED: Library name typo preventing loading of the edcgs example.

  • FIXED: Missing library path definition for the object_aliases example.

  • FIXED: No need to use floats in the threads/primes example.

  • FIXED: Lint warnings when compiling the mtbatch example in optimized mode.

Ports

  • CHANGED: Internal representation used by the robots example in the metagol port to avoid a clash with SWI-Prolog when configured to represent rational numbers as N/D terms.

IDEs, text editors, and syntax highlighters support

  • CHANGED: Code snippets for entities to use the ISO 8601 standard format for dates, Year-Month-Day, in info/1 directives.

  • ADDED: Instructions on how to configure bat to use the Logtalk syntax highlighting support with Prolog files.

3.35.0 - January 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.

3.34.0 - January 7, 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.

3.33.0 - December 3, 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.

3.32.0 - November 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.

3.31.0 - October 15, 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.

3.30.0 - September 17, 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.

3.29.0 - September 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.

3.28.0 - August 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.

3.27.0 - June 18, 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.

3.26.0 - May 8, 2019

Logtalk compiler and runtime

  • FIXED: Decompilation of exceptions thrown by the <</2 control construct when in debug mode.

Prolog adapter and integration files

  • ADDED: SWI-Prolog adapter file specification for the built-in meta-predicate call_with_inference_limit/3.

  • ADDED: Unsupported adapter file for Scryer Prolog.

Documentation

  • ADDED: Predicate cross-referencing diagrams linked from the core, library, tools, ports, and contributions inheritance diagrams.

Library

  • ADDED: Timeout portability library supporting B-Prolog, ECLiPSe, SICStus Prolog, SWI-Prolog, and YAP as backend Prolog systems. Provides a portable abstraction over how the to call a predicate with a time limit.

Tools

  • CHANGED: Predicate nodes in cross-referencing diagrams (with the exception of external nodes) now link to source code instead of documentation.

  • CHANGED: Predicate cross-referencing diagrams now use ::Predicate and ^^Predicate external nodes for, respectively, calls in self and super calls.

  • CHANGED: Predicate cross-referencing call edges to use a normal arrow and dynamic predicate update edges to use a diamond arrow.

  • CHANGED: Directory and library nodes to use a tab instead of a 3D box and predicate nodes to use a rectangle instead of an ellipse for more compact diagrams.

  • CHANGED: When using the zoom(true) option, also link to non-empty protocol cross-referencing diagrams to allow linking and thus quick access to the source file lines of the predicate declarations.

  • CHANGED: Diagram external nodes are no longer grouped to allow for better layouts.

  • CHANGED: Default value for the entity_url_suffix_target/2 option for the library diagrams for compatibility with Sphinx-based API documentation.

  • CHANGED: Default uses diagram layout to top to bottom.

  • CHANGED: Don’t define a default value for the url_prefixes/2 option to allow preventing the generation of node URLs for prefixes that are not specified in path_url_prefixes/2 options.

  • ADDED: Support for generating sub-diagrams when using the zoom(true) option.

  • ADDED: Support for generating directory loading and directory dependency diagrams.

  • ADDED: Predicates rdirectory/1-3 to the diagrams tool for generating diagrams for a directory and its sub-directories.

  • ADDED: POSIX and Windows scripts for converting Graphviz .dot files into .svg files to the diagrams tool.

  • ADDED: Boolean option externals/1 to the diagrams tool to control printing of external modes.

  • ADDED: Support for URL links for module predicate external nodes.

  • UPDATED: The diagrams tool predicates to print log messages for the diagrams being created. These log messages can be suppressed by setting the report flag to warnings or off.

  • IMPROVED: The diagrams tool support for Prolog module applications is now able to detect and report implicit module dependencies that are handled by the autoloading mechanism when using SWI-Prolog as the backend compiler.

  • IMPROVED: Print the diagram description after the user supplied title.

  • IMPROVED: Library diagrams now clearly show that the container of a library node is the library directory.

  • IMPROVED: Output missing external nodes (usually due to unloaded resources) that are referenced from diagram edges.

  • IMPROVED: Associate directory and file URLs with graph labels instead of the whole graph background to avoid accidental clicks.

  • IMPROVED: Support for initialization/1 directive nodes in predicate cross-referencing diagrams.

  • IMPROVED: The diagrams tool now prints a warning when failing to locate a library, directory, or file.

  • FIXED: Predicate documentation cross-reference nodes to link to the actual predicate declaration.

  • FIXED: Bug when generating predicate cross-referencing diagrams where a call to a multifile predicate for a parametric entity would result in a duplicated node.

  • FIXED: Bug where a diagram node with an empty label could be generated.

  • FIXED: Don’t append line numbers to local file URLs when generating diagrams.

  • FIXED: Cases where a diagram node identifier would not be unique.

  • FIXED: Bug where a diagram predicate node would be generated instead of a non-terminal node due to a predicate calling a declared but not defined non-terminal.

  • FIXED: Only generate diagram node documentation links when the documentation URL prefix is defined.

  • FIXED: Label for root directory in directory diagrams.

  • FIXED: Use only SVG colors for diagram elements.

  • FIXED: Bug where a non-terminal diagram node could be wrongly captioned as local instead of using its scope for the caption.

  • FIXED: Case where URL links would not be generated for external Logtalk entities in entity, inheritance, or uses diagrams.

  • FIXED: Case where predicate cross-referencing diagrams would includes nodes for local auxiliary predicates.

Tests

  • ADDED: Unit tests for the new timeout library.

Examples

  • UPDATED: The super_calls example to illustrate that super calls force dynamic binding when the called predicate is dynamic.

  • UPDATED: The sicstus example to use parameter variables.

Ports

  • ADDED: Port of Metagol examples from the (Evans & Greffenstette, 2018) paper. Original Prolog examples source code files contributed by MystikNinja.

  • UPDATED: Sync Metagol port with upstream changes (commit 044f337).

Installers and installation scripts

  • IMPROVED: The update_svg_diagrams.sh script to use a git hash to keep node URLs links to source file lines accurate.

3.25.0 - April 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.

3.24.0 - February 28, 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.

3.23.0 - January 30, 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.

3.22.0 - December 18, 2018

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.

3.21.0 - October 30, 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.

3.20.0 - September 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.

3.19.0 - August 1, 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 <</2 debugging control construct would fail instead of generating a predicate existence error.

  • FIXED: The compiler would not recognize the logtalk_make_target_action/1 predicate as a built-in predicate.

Prolog adapter and integration files

  • CHANGED: The representation of the Prolog version as returned by the prolog_version flag now uses a v/3 compound term.

  • REMOVED: The '$lgt_startup_directory'/1, '$lgt_user_directory'/1, and '$lgt_home_directory'/1 internal predicates from all adapter files.

  • UPDATED: GNU Prolog adapter file to assume version 1.4.5 or later.

  • FIXED: Quintus Prolog adapter file no longer tries to redefine the built-in peek_char/1-2 predicates.

  • FIXED: Workaround Lean Prolog lack of compliance of when returning the list of variables of a read term.

  • FIXED: Workaround Qu-Prolog lack of support for the standard float/1 arithmetic function.

Documentation

  • IMPROVED: Fixed several typos and improved several sections of the reference manual.

Library

  • ADDED: Utility predicates approximately_equal/3, essentially_equal/3, tolerance_equal/4, and =~=/2 to the number object. These predicates are non type-checked variants of the same predicates found in the lgtunit tool.

  • ADDED: Predicates maybe/0-2 to the random library.

  • UPDATED: Several library objects to take advantage of the recently introduced error throwing built-in methods.

  • FIXED: Workaround for some backend Prolog compilers (such as SWI-Prolog) lack of float arithmetic standard compliance to ensure that statistics and number list predicates that compute floats don’t return integers when the fractional part is zero.

Tools

  • CHANGED: The number of entity clauses metric to compute both the total number of clauses and the number of user clauses.

  • ADDED: Number of entity rules metric, computing both the total number of rules and the number of user rules.

  • ADDED: Cyclomatic complexity metric. Experimental.

  • UPDATED: The Halstead metric to also take into account updates to dynamic predicates.

  • ADDED: Utility predicates approximately_equal/3, essentially_equal/3, and tolerance_equal/4 to the lgtunit tool. These are type-checked variants of the same predicates found in the number library object.

  • IMPROVED: Simplified handling of quick_test/3 test dialect by lgtunit.

  • IMPROVED: Simplified the implementation of the lgtunit predicate =~=/2 and added more strict type-checking.

  • UPDATED: The lgtunit tool to use an accurate epsilon value when using ECLiPSe as the backend compiler.

  • UPDATED: The lgtunit tool to take advantage of the recently introduced error throwing built-in methods.

  • FIXED: Float type error in the code_metrics documentation metric when using some backend Prolog systems such as ECLiPSe.

  • FIXED: Workaround for some backend Prolog compilers (such as SWI-Prolog) lack of float arithmetic standard compliance to ensure that coupling metric entity scores return float values for instability and abstractness instead of integers when the fractional part is zero.

  • FIXED: Workaround lgtunit portability issue when running on XSB due to the de facto standard between/3 predicate being a library predicate and the semantics of the XSB atom-based module system.

  • FIXED: Bug in the lgtunit tool that prevented marking tests using the quick_check/2-3 dialects as skipped.

  • FIXED: Generation of auxiliary predicates for test options by the lgtunit tool would result in unexpected failures when the predicates accessed entity parameters.

Tests

  • ADDED: Tests for the de facto standard epsilon/0 evaluable functor.

  • ADDED: Tests for syntax errors in atoms, lists, numbers, and curly bracketed terms to the Prolog compliance suite.

  • ADDED: Test for included files that contain op/3 operators.

  • ADDED: Tests for the random library maybe/0-2 predicates. The tests use a 2% margin for checking for an even distribution.

  • CHANGED: Skip the tests for the random library predicates get_seed/1 and set_seed/1 when testing the backend_random object as several backend Prolog systems don’t provide implementations for these predicates.

  • ADDED: Tests for the retract/1 and retractall/1 built-in methods for local dynamic predicates with no scope directives.

  • ADDED: Tests for the abolish/1 built-in method when calling an abolished dynamic predicate with a dynamic declaration.

Examples

  • ADDED: Example now_you_see_me illustrating requirements dictated by inheritance semantics for the implementation of ^^/1 calls and dynamic predicates.

  • ADDED: Example bench with a classic set of Prolog benchmark programs and Logtalk wrappers for those programs. Copied from SWI-Prolog after discussion with Jan Wielemaker.

IDEs, text editors, and syntax highlighters support

  • ADDED: Support for the highlight.js syntax highlighter.

  • ADDED: Syntax coloring support for the new error throwing built-in methods.

  • ADDED: Syntax coloring support for the logtalk_make_target_action/1 built-in predicate.

  • ADDED: Note on Textadept Logtalk syntax coloring support contributed by Michael T. Richter.

  • UPDATED: Text completions for supported text editors.

3.18.0 - June 26, 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.

3.17.0 - May 21, 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.

3.16.0 - April 24, 2018

Logtalk compiler and runtime

  • CHANGED: All cases where exception context arguments used the old format logtalk(Call, Entity) to use the new logtalk(Call, ExecutionContext) format.

  • CHANGED: Compile calls to the built-in predicates to perform compile time type-checking when the arguments are sufficiently instantiated and to return the actual execution context in case of runtime error.

  • CHANGED: The compilation of calls to the built-in logtalk_compile/1-2 and logtalk_load/1-2 predicates to pass the directory of the source file containing the call, which is used for default resolving of relative source file paths. This notably allows the generated code for loader files to be relocatable, thus simplifying embedding of applications.

  • CHANGED: Resolve calls to the logtalk_load_context/2 built-in predicate from source file initialization/1 directives at compile time when the first argument is instantiated.

  • CHANGED: Report assert/1 predicate calls and messages as deprecated.

  • CHANGED: The paths.pl and paths_core.pl files to always set the library aliases logtalk_home and logtalk_user to the corresponding environment variables. Previously, the aliases would be set to the current directory when the variables are not defined but that is no longer necessary when embedding Logtalk and Logtalk applications.

  • ADDED: Compiler option relative_to/1 to allow specifying a directory for resolving relative source file paths.

  • ADDED: Compiler option duplicated_directives/1 to control printing of duplicated directive warnings.

  • ADDED: Compiler option lambda_variables/1 to control printing of lambda variable related warnings.

  • ADDED: Compiler option trivial_goal_fails/1 to control printing of warnings for calls to local static predicates with no matching clauses.

  • ADDED: Compiler option always_true_or_false_goals/1 to control printing of warnings for goals that are always true or false.

  • ADDED: Compiler option lambda_variables/1 to control printing of lambda variable related warnings.

  • ADDED: Compiler option deprecated/1 to control printing of deprecated directive, control construct, and flag warnings.

  • ADDED: Support for goal-expansion of complex goal arguments found in initialization/1, if/1, and elif/1 directives.

  • ADDED: Read-only compiler option engines. Useful to signal that a backend Prolog compiler provides sufficient low level multi-threading features for supporting Logtalk threaded engines.

  • IMPROVED: Compile calls to the set_logtalk_flag/2 built-in predicate from source file initialization/1 directives when sufficiently instantiated to improve performance by avoid runtime type-checking.

  • IMPROVED: Feedback to user when using the logtalk_make/1 predicate with targets debug, normal, or optimal.

FIXED: Avoid trying to redo the startup initialization when including Logtalk in a backend Prolog saved state.

Prolog adapter and integration files

  • CHANGED: The ECLiPSe adapter file to enable Logtalk threaded engines when running version 7.0.35 or later.

  • CHANGED: The GNU Prolog integration script and the Windows shortcut to use the --entry-goal command-line option to load Logtalk. This change allows the previously used --init-goal option to be available for passing goals that must be run before loading Logtalk (e.g. for setting unique scratch directories when running parallel Logtalk processes).

  • CHANGED: Restore using of default values for the scratch_directory flag on XSB.

  • IMPROVED: Less verbose Logtalk startup when using SICStus Prolog.

Documentation

  • UPDATED: The documentation of the built-in predicates logtalk_load/1-2, logtalk_compile/1-2, and logtalk_load_context/2.

  • FIXED: Typo in link to the context/1 built-in method from the Reference Manual index.

Library

  • ADDED: Prolog file, parallel_logtalk_processes_setup.pl, with sample code for selected backend Prolog compilers for initializing Logtalk processes such that each process uses a unique scratch directory therefore allowing parallel process execution (e.g. for usage at continuous integration servers).

  • ADDED: Hook object, expand_library_alias_paths, for expanding library alias paths in logtalk_library_path/2 facts. Mainly used when embedding Logtalk and Logtalk applications.

  • ADDED: Type-check and arbitrary term generation for grammar rules.

  • FIXED: Portability issue with some backend Prolog compilers when embedding the character library object.

Tools

  • IMPROVED: The lgtunit tool output format for failed tests due to the wrong error being generated.

  • FIXED: Workaround a Lean Prolog parser bug when loading the lgtunit tool.

Tests

  • CHANGED: Refactoring of the built-in entity and event tests.

  • ADDED: Tests for calls to the logtalk_load_context/2 built-in predicate from file and entity initialization/1 directives.

  • ADDED: Missing tests for error conditions of the create_protocol/3 built-in predicate.

  • ADDED: Missing tests for several flags for the current_logtalk_flag/2 built-in predicate.

  • FIXED: The tests for the blackboard multi-threading example to suppress irrelevant output.

Examples

  • CHANGED: Enable running the threaded engines examples when using ECLiPSe 7.0.35 or a later version.

  • FIXED: Singleton variable in branch warnings in the searching example slat/3 object heuristics.

Installers and installation scripts

  • ADDED: Sample embedding settings file and examples of using the embedding scripts.

  • ADDED: Sample Bash shell embedding scripts for CxProlog and YAP.

  • UPDATED: The sample embedding scripts to also allow embedding an optional settings file and an optional application.

  • UPDATED: The sample embedding scripts to allow selecting a library paths file other than the paths_core.pl default file.

  • UPDATED: The sample embedding scripts to allow expanding library aliases paths to avoid dependencies on environment variables.

  • FIXED: The sample embedding scripts for ECLiPSe, SICStus Prolog, and SWI-Prolog to avoid discontiguous predicate warnings.

  • UPDATED: The logtalk_user_setup.sh script and the Windows installer to also create links to the ACKNOWLEDGMENTS.md and CONTRIBUTING.md files.

  • UPDATED: The logtalk_user_setup.sh script to also create links to the integration and scripts directories.

3.15.0 - March 21, 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.

3.14.0 - January 4, 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.

3.13.0 - November 8, 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.

3.12.0 - October 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.

3.11.2 - August 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.

3.11.1 - July 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.

3.11.0 - July 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.

3.10.9 - June 14, 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.

3.10.8 - May 30, 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.

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.

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.

3.10.5 - April 17, 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.

3.10.4 - April 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.

3.10.3 - March 20, 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.

3.10.2 - March 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.

3.10.1 - March 2, 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.

3.10.0 - February 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.

3.09.2 - February 15, 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.

3.09.1 - January 16, 2017

Logtalk compiler and runtime

  • ADDED: Support for number_of_rules/1 and number_of_user_rules/1 object and category properties.

  • ADDED: Support for number_of_rules/1 predicate property.

  • ADDED: Detection of meta_predicate/1 directives that wrongly specify a goal meta-argument that is actually a closure passed to call/2-N meta-predicate calls. Thanks to Arun Majumdar for the report.

  • ADDED: Detection of missing predicate scope directives in the presence of mode/2 directives.

Prolog adapter and integration files

  • FIXED: SWI-Prolog integration hooks that allowed editing or loading a Logtalk source file specified library notation using the edit/1, load_files/1-2, and consult/1 SWI-Prolog predicates.

  • FIXED: Workaround an incompatible change in the concept of working directory in recent XSB development versions that prevents setting the scratch_directory flag to a value other than ./.

Documentation

  • UPDATED: Documentation of the SWI-Prolog Logtalk pack.

  • IMPROVED: User Manual description of object properties, category properties, and calling of category predicates.

Library

  • ADDED: Predicates terms_to_array/2 and array_to_terms/2-3 to the java library object. Currently only implemented for the SWI-Prolog/YAP JPL library.

Tools

  • ADDED: Prototype code metrics tool contributed by Ebrahim Azarisooreh.

  • FIXED: Bug in the diagrams tool when writing node captions for calls to external Prolog module predicates, when running using SWI-Prolog or YAP as the backend compiler, where the module prefix would be omitted.

  • FIXED: Error in the dead_code_scanner and diagrams tools when trying to get properties for referenced entities (usually external) that for some reason failed to load.

Tests

  • ADDED: Additional unit tests for the 0’Char number notation.

  • ADDED: Additional unit tests for the multifile example.

  • FIXED: Workaround an operator related syntax error when using XSB as the backend compiler for running the category_property/2 and object_property/2 unit tests.

Installers and installation scripts

  • ADDED: Docker support (using SWI-Prolog as the backend compiler). Contributed by Sergio Castro.

  • IMPROVED: Use a shallow clone in the build_release.sh script.

  • FIXED: Issue with the build release script when writing the MacPorts portfile used for generating the macOS installer.

IDEs, text editors, and syntax highlighters support

  • FIXED: Emacs syntax coloring support for using tab-based indentation as per coding guidelines but to default to user-defined tab width.

  • FIXED: Emacs syntax coloring support for numbers in hexadecimal notation and for the create_logtalk_flag/2 built-in predicate.

3.09.0 - November 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/1directives in included files would be ignored when the main file also have one or more initialization/1directives.

  • 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.

3.08.0 - October 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, <</2, and :/2 arguments.

  • IMPROVED: Documentation and usage examples of the doclet tool.

  • IMPROVED: When generating cross-referencing diagrams, label predicate call edges for non-terminals using the non-terminal indicator instead of the corresponding predicate indicator.

  • FIXED: An off-by-one error in the logtalk_tester.sh automation script when no test sets are found.

  • FIXED: Bug in the lgtunit::benchmark/2 predicate where it would fail when benchmarking goals that fail. Also fixed the lgtunit::benchmark/2-3 predicate mode directives to specify that the predicates are expected to always succeed.

  • FIXED: Printing of notes when using the test/3 dialect with error/1, errors/1, ball/1, and balls/1 outcomes.

  • FIXED: Filtering of local calls when generating predicate cross-referencing diagrams using the diagrams tool.

  • FIXED: Added implementation of the files/1-3 predicates for the library diagrams. This is a partial fix that just converts calls to the files/1-3 predicates into calls to the directories/3 predicate as the files/1-3 predicates are usually not useful when generating library diagrams.

  • FIXED: Non-determinism of the debugger::nospy/1 predicate and cases where it would fail to delete all matching spy points.

Tests

  • ADDED: Unit tests for the lgtunit tool test dialects and utility predicates.

  • ADDED: Unit tests for the debugger, diagrams, and lgtdoc tools.

  • ADDED: Unit tests for the calls/2 property of the object_property/2 and category_property built-in predicates.

  • ADDED: Unit tests for the info/1, info/2, and include/1 directives.

  • ADDED: Unit tests for the before/3 and after/3 built-in methods.

  • ADDED: Some more unit tests for the self/1, sender/1, and this/1 built-in execution context methods.

Installers and installation scripts

  • UPDATED: The build_release.sh script to also build a RPM installer.

  • UPDATED: The Windows installer to also detect ECLiPSe 7.0 (the current development version).

VCS support

  • ADDED: Logtalk.gitignore, Logtalk.hgignore, and Logtalk.p4ignore template files for versioning Logtalk projects using Git, Mercurial, and Perforce.

Examples

  • ADDED: An example of object-based composition, laptops, to contrast with category-based composition.

  • RENAMED: The jpl example to java. Also updated the example benchmarks and some of the individual examples to run when using JIProlog as the backend compiler. This example now relies on the new library Java support.

  • UPDATED: The errors example to also illustrate the warnings printed for unused predicates and non-terminals referenced in uses/2 and use_module/2 directives when using the new dead_code_scanner tool.

IDEs, text editors, and syntax highlighters support

  • ADDED: Sample commands for compiling files, scanning for dead code, and generating HTML documentation from within the Atom text editor.

  • ADDED: Experimental build and REPL support for the Sublime Text 3 editor.

  • ADDED: Note on GNU Global, a source code tagging system that can be used via its Pygments parser in Logtalk projects.

  • UPDATED: Rogue support.

  • UPDATED: The ctags support to parse parametric entity identifiers and most entity and predicate directives.

3.07.0 - August 31, 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.

3.07.0 - July 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 to the $LOGTALKUSER folder.

3.06.1 - June 19, 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.

3.06.0 - June 12, 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.

3.05.0 - May 16, 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-2directives 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.

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.

3.04.1 - March 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_reportno 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.

3.04.0 - March 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.

3.03.0 - February 16, 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.

3.02.2 - December 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.

3.02.1 - November 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.

3.02.0 - November 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.

3.01.2 - October 18, 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.

3.01.1 - September 30, 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.

3.01.0 - September 12, 2015

Logtalk license

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

3.00.7 - September 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.

3.00.6 - August 3, 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.

3.00.5 - July 27, 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.

3.00.4 - June 23, 2015

Logtalk compiler and runtime

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

3.00.3 - June 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.

3.00.2 - May 27, 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.

3.00.1 - February 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.

3.00.0 - January 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. Thanks to Andrew Becker for the bug report.

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.

3.00.0 Release Candidate 9 - December 19, 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.

3.00.0 Release Candidate 8 - December 9, 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.

3.00.0 Release Candidate 7 - December 1, 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.

3.00.0 Release Candidate 6 - November 19, 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.

3.00.0 Release Candidate 5 - November 12, 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.

3.00.0 Release Candidate 4 - October 28, 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.

3.00.0 Release Candidate 3 - October 3, 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.

3.00.0 Release Candidate 2 - September 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.

3.00.0 Release Candidate 1 - September 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, <, when using a backend Prolog compiler other than B-Prolog, CxProlog, and Lean Prolog.

  • IMPROVED: The debugger tool now provides both extended help (?) and condensed help (h) commands.

  • IMPROVED: The debugger tool now allows using the skip command (s) at the rule unification port.

  • IMPROVED: The debugger tool now prefixes the exit port with an asterisk when a call succeeds leaving choice-points when using a backend Prolog compiler other than Lean Prolog and Quintus Prolog.

  • FIXED: Issue in the debugger tool where the status code at the beginning of a trace line would not be updated after setting a spy point.

  • UPDATED: The diagrams tool now allows using documentation URLs for Prolog module nodes.

  • IMPROVED: The diagrams tool now shows non-terminals instead of predicates whenever applicable when generating entity diagrams.

  • IMPROVED: Updated the diagrams tool by moving the registry of graph languages and the objects implementing them to an independent object.

  • FIXED: Bug in the diagrams tool when checking if a predicate is public or exported that could result in local predicates being misclassified as external predicates when generating entity predicate cross-referencing diagrams.

  • FIXED: Bug in the diagrams tool when generating entity predicate cross- referencing diagrams where documentation links would be added for predicate nodes without documentation.

  • FIXED: Bug in the diagrams tool which would ignore Prolog files listed in the exclusion list when specified without an extension.

  • FIXED: Compile the diagrams and lgtunit tool files in optimized mode.

Tests

  • ADDED: Unit tests for the multifile/1 directive when the multifile predicates are used with parametric entities.

  • ADDED: Unit tests for the parameter/2 built-in execution context method when used from parametric categories to the parametric example.

3.00.0 Beta 9 - July 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.

3.00.0 Beta 8 - July 4, 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.

3.00.0 Beta 7 - June 17, 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.

3.00.0 Beta 6 - June 11, 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 <</2 control constructs would fail to detect an instantiation error with the debug flag turned on while using the {}/1 syntax to access parametric object proxies.

Prolog adapter and integration files

  • FIXED: Added missing definition for the standard acyclic_term/1 predicate to the Quintus Prolog adapter file.

Documentation

  • ADDED: Sample tester file, tester-sample.lgt, for helping automating running unit tests.

Tools

  • CHANGED: The diagrams tool now uses by default lighter colors for files and categories for better contrast when printing diagrams.

  • IMPROVED: The debugger tool now avoids introducing spurious choice-points when using a backend Prolog compiler other than Lean Prolog and Quintus Prolog.

  • FIXED: Bug in the debugger tool that prevented printing information at unification ports.

  • FIXED: The debugger tool failed to declare itself as a debug handler provider due to recent changes to the meaning of this in multifile predicate clauses.

IDEs, text editors, and syntax highlighters support

  • ADDED: Syntax coloring support for the as/2 predicate alias operator to most of the supported text editors and syntax highlighters.

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 <</2 control construct.

  • FIXED: Compiler failure instead of an informative error when trying to compile a user meta-predicate defined in plain Prolog with an ambiguous meta-predicate template.

  • FIXED: Code generation bug when compiling an object that instantiates or specializes multiple classes using the instantiates/2-N or specializes/2-N syntax.

Prolog adapter and integration files

  • CHANGED: The adapters/xpcehooks.pl file have been renamed and moved to the xpce example.

Library

  • FIXED: Bug in the assignvars object where getting the current value for an empty assignable variable would succeed (bug in the original code adapted to Logtalk). Also, this object now uses standard error/2 terms.

Examples

  • ADDED: Example includes, illustrating the use of the new include/1 directive.

  • ADDED: SWI-Prolog backend only example, pardicts, of using a native dictionary term for representing object parameters.

  • ADDED: SWI-Prolog backend only example, xpce, of using XPCE from 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 <</2 control constructs would fail to correctly set the execution context and to test if the receiver object was compiled in debug mode when using the {}/1 syntax to access parametric object proxies.

  • FIXED: The built-in method predicate_property/2 would return properties for Logtalk and Prolog built-in predicates (which are interpreted as private predicates) when the sender is not the same object as this.

  • FIXED: The built-in method predicate_property/2 would not return the scope/1 property for Logtalk or Prolog built-in predicates.

  • FIXED: The compiler would try to expand source file terms wrapped using the {}/1 control construct.

  • FIXED: Protocol initialization/1 goals would not be lint checked.

Tests

  • ADDED: Some more unit tests for the built-in methods current_predicate/1 and predicate_property/2.

  • ADDED: Tests for several predicate directives to check the less used syntax where a conjunction of predicate indicators is used instead of a list.

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 <</2 control construct using the standard {Proxy} syntax.

  • ADDED: Workaround for lack of standardization of the predicate_property/2 predicate when used as negated argument in conditional compilation directives. Notably, this allows using the PDDL parser contribution when using ECLiPSe as the back-end Prolog compiler.

  • IMPROVED: Faster generation of entity identifiers when dynamically creating a large number of entities at runtime.

  • IMPROVED: Eliminate the (remote) possibility that a user defined entity predicate would clash with an internal entity bookkeeping predicate.

  • IMPROVED: Ensure that the logtalk built-in object is compiled (as required by the compiler/runtime) with the code_prefix flag set to $ independently of the setting of this flag.

  • FIXED: Compilation in debug mode of calls to meta-predicates specified in uses/2 directives.

  • FIXED: Compilation error when compiling classes or instances that define predicate aliases.

  • FIXED: The predicate_property/2 built-in method would fail to return all predicate properties when querying for a predicate alias.

Prolog adapter and integration files

  • ADDED: Support for the de facto standard predicate findall/4 (when not a built-in predicate) to all adapter files.

  • IMPROVED: Updated Qu-Prolog adapter and integration files for more reliable startup. Complex applications, however, may still need to adjust memory areas.

Documentation

  • IMPROVED: User Manual sections on calling user-defined Prolog predicates from within objects and categories and on the closed-world assumption semantics used by the ::/1-2 and ^^/2 control constructs when a predicate is declared but not defined.

Library

  • IMPROVED: More efficient interval representation for the implementation of temporal interval relations in the interval object. Added a constructor predicate, new/3, to the intervalp protocol and the interval object.

Tools

  • CHANGED: The lgtunit tool now prints invalid test identifier messages as errors instead of warnings as a non-instantiated or repeated test identifier can result in misleading test reports.

  • FIXED: Regression on the lgtunit tool where duplicated test identifiers would no longer be detected and reported.

  • FIXED: Workaround lack of support for static multifile predicates in XSB and Qu-Prolog when running the diagrams tool.

Tests

  • ADDED: Unit tests for testing the {Proxy}<<Goal syntax support.

  • ADDED: Unit tests for the use_module/2 predicate directive.

  • ADDED: Unit tests for the definition of predicate aliases in protocols, categories, instances and classes.

  • ADDED: Unit tests for the findall/3, bagof/3, and setof/3 built-in methods adapted from the corresponding examples in the ISO Prolog Core standard.

Contributions

  • CHANGED: Loading of the test files used in the unit tests of the PDDL parser contribution to workaround portability issues when using SICStus Prolog as the back-end compiler.

Examples

  • IMPROVED: Extended the complements example to better illustrate the functionality of complementing categories when using different settings for the complements flag.

IDEs, text editors, and syntax highlighters support

  • ADDED: Support for the JavaScript-based Ace embeddable code editor.

  • ADDED: Support for the JavaScript-based Google Code Prettify syntax highlighter.

3.00.0 Beta 2 - April 21, 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.

3.00.0 Beta 1 - April 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.

3.00.0 Alpha 36 - February 26, 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.

3.00.0 Alpha 35 - February 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.

3.00.0 Alpha 34 - January 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.

3.00.0 Alpha 33 - January 15, 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.

3.00.0 Alpha 32 - December 18, 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.

3.00.0 Alpha 31 - November 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 (<<)/2 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.

3.00.0 Alpha 30 - November 12, 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.

3.00.0 Alpha 29 - October 31, 2013

Logtalk compiler and runtime

  • ADDED: * Property mode/1 representing the file compilation mode (with possible values optimal, normal, and debug) to the predicate logtalk::loaded_file_property/2.

  • IMPROVED: Also reload a source file when the reload flag is set to changed and the file is not modified but the compilation mode changed due to a change to the global value of the flags debug or optimize.

  • IMPROVED: The compiler now accepts explicit-qualified module calls for the built-in database predicates without requiring wrapping the module call with the {}/1 control construct (due to the frequently ambiguous meta-predicate templates of the database predicates).

Prolog adapter and integration files

  • ADDED: Declaration of non-standard built-in database predicates to the adapter files of all supported backend Prolog compilers.

  • UPDATED: POSIX integration scripts and the Windows installer script to deal with alphanumeric version data.

  • UPDATED: The XSB adapter file to goal-expand calls to the thread_sleep/1 built-in predicate as the current implementation assumes mili-seconds instead of seconds as per the standardization proposal.

Installers and installation scripts

  • CHANGED: The VERSION.txt file now includes the development status data. Besides consistency with the version_data flag value, this change allows the installers to be automatically named after the development status and version.

  • CHANGED: The logtalk_version_select.sh POSIX script no longer supports listing and switching to Logtalk 2.x versions as these require incompatible user folder contents.

  • CHANGED: For consistency, the sources and manuals archives, the POSIX installation directive, and the Debian, RPM, MacOS X, and Windows installers all start with the logtalk- prefix.

Documentation

  • ADDED: PDF versions of the User and Reference manuals.

Examples

  • NEW: Metered concurrency multi-threading example, metered_concurrency, originally coded for a Rosetta Code programming task.

  • NEW: Barrier synchronization multi-threading example, checkpoint, originally coded for a Rosetta Code programming task.

  • NEW: Synchronized predicates multi-threading example, slow_print, originally coded for a Rosetta Code programming task (added to the threads/sync example).

3.00.0 Alpha 28 - October 16, 2013

Logtalk compiler and runtime

  • ADDED: Read-only flag version_data, whose value is the compound term logtalk(Major,Minor,Patch,Status) where the first three arguments are integers and the last argument is an atom, possibly empty, representing alpha or beta version status. The old version flag is still available for compatibility with Logtalk 2.x applications.

  • CHANGED: The logtalk::loaded_file_property/2 property flags/1 now returns both the explicit flags from a logtalk_load/2 call and the flags set within the loaded file using source-file level set_logtalk_flag/2 directives. This allows e.g. flags such as reload/1 to be set locally in loader files with the expected consequences.

  • FIXED: Bug where source-file level set_logtalk_flag/2 directives would not be local to a file containing them and would leak into files loaded after it in a group as a consequence of an ancestor logtalk_load/1-2 or logtalk_compile/1-2 call.

Prolog adapter and integration files

  • FIXED: The swilgt.sh POSIX integration script to throw away the output generated while detecting the name of the SWI-Prolog executable to make it silent for batch processing by applying a patch contributed by Daniel Lyons.

  • UPDATED: The ECLiPSe adapter file to interpret the ++ meta-predicate mode indicator for ground terms as * (i.e. a normal argument in Logtalk syntax).

Documentation

  • UPDATED: User Manual section on loader files, explaining how to set the reload flag locally to improve their usability during development.

Tools

  • IMPROVED: Extended the lgtdoc and diagrams tools with support for the alternative .logtalk source file extension. Allow the file argument of the file/1-2 predicates to be given by its name, basename, full path, or by using library notation. Fixed bugs that could prevent using the file/1-2 predicates.

Examples

  • NEW: Atomic updates multi-threading example, buckets, based on the description of the corresponding Rosetta Code programming task.

  • NEW: Synchronous concurrency multi-threading example, team, based on the description of the corresponding Rosetta Code programming task.

3.00.0 Alpha 27 - October 10, 2013

Logtalk compiler and runtime

  • ADDED: Key variable_names/1 to the logtalk_load_context/2 built-in predicate for getting the variable names of the last term read (first introduced by SWI-Prolog). This key, however, requires calling the standard built-in predicate term_variables/2 on the term read and unifying the term variables with the variables in the names list.

  • IMPROVED: Support defining meta-predicate directives for module predicates when the backend Prolog compilers that don’t provide access to meta-predicate templates.

  • FIXED: Execution context access performance regression when only the value of this is required.

  • FIXED: The definition of the user pseudo-object was missing the reference to the forwarding protocol.

  • FIXED: The multifile directives for the logtalk object debugging methods must be repeated also in the compiler/runtime file where they are called to allow constructing GNU Prolog executables that embed Logtalk.

  • FIXED: When compiling calls to built-in or library Prolog meta-predicates, take into account that the ECLiPSe module system does not provide a user pseudo-module.

Prolog adapter and integration files

  • CHANGED: The adapter files of Prolog compilers supporting a module system no longer declare the (:)/2 control construct as a built-in predicate.

  • IMPROVED: Definition of the internal '$lgt_predicate_property'/2 predicate for ECLiPSe, which now returns properties (including meta-predicate templates) for both built-in and module predicates. Documentation ————-

  • IMPROVED: Indexing of the documentation of the contribution entities.

Examples

  • ADDED: Support for using ECLiPSe as the backend Prolog compiler for the symbiosis example.

3.00.0 Alpha 26 - October 4, 2013

Logtalk compiler and runtime

  • CHANGED: The built-in object logtalk and the pseudo-object user are now provided in source code instead of being included in the compiler as pre-compiled objects.

  • CHANGED: The format of the execution context terms is now defined on the logtalk built-in object as is the same for all backend Prolog compilers.

  • CHANGED: The logtalk object methods compile_predicate_indicators/3 and compile_predicate_heads/4 are generalized, allowing them to be called with an entity argument other than a loaded entity or the entity under compilation.

  • RENAMED: The logtalk::loaded_file_property/2 method stream_properties/1 property to text_properties/1.

  • FIXED: Regression in previous release when optimizing (::)/2 calls due to the introduction of the new restrict value for the complements flag.

  • FIXED: When compiling a module as an object, occurrences of ensure_loaded/1 and use_module/1 directives that the backend Prolog compiler adapter file failed to expand into supported use_module/2 directives would be compiled as initialization goals, resulting in runtime instead of compile time errors.

  • ADDED: Defined a new library path, core, using the logtalk_library_path/2 built-in predicate.

  • IMPROVED: Throw an error when attempting to dynamically create or define in a source file a {}/1 parametric object as it would clash with the syntax for parametric object proxies.

Prolog adapter and integration files

  • REMOVED: Auxiliary predicates used to customize and access the execution context term representation (moved back into the compiler).

  • UPDATED: The XSB adapter file now declares 3.4.1 as the minimum compatible version. This version, however, is not yet released but the current XSB development version includes a critical bug fix that is required for loading Logtalk.

Documentation

  • IMPROVED: Use a single directory, docs, for the XHTML documentation of all the core, library, tool, and contribution entities.

Tools

  • ADDED: Unit tests for the built-in entities.

  • FIXED: The SICStus Prolog profiler support failed to also filter object internal clauses for alias and super lookups.

Examples

  • UPDATED: The constraints/swipl example to avoid deprecated warnings for continuation lines with recent versions of SWI-Prolog.

3.00.0 Alpha 25 - September 25, 2013

Logtalk compiler and runtime

  • ADDED: Refined complementing category semantics, allowing the complements object flag to be set to a new value, restrict, to prevent hot patching but still allow new functionality to be added to complemented objects.

  • ADDED: New logtalk::loaded_file/1 and logtalk::loaded_file_property/2 methods. The valid loaded file properties are basename/1, directory/1, flags/1, stream_properties/1, target/1, and modified/1.

  • REMOVED: The logtalk::loaded_file/2-4 methods are no longer available.

  • REMOVED: The logtalk object methods decompile_predicate_heads/2-3, compile_predicate_heads/2-3, decompile_predicate_indicators/2-3, and compile_predicate_indicators/2 are no longer available.

  • FIXED: Ensure that meta-predicate mode indicators in the declaration of Prolog proprietary built-in meta-predicates are converted into Logtalk compatible ones before being used in the second compiler pass or reported by the built-in predicate_property/2 method.

  • FIXED: The category_property/2 built-in predicate would not recognize events as a valid category property.

Prolog adapter and integration files

  • UPDATED: B-Prolog adapter file for the new 8.0 version, which removes the change_directory/2 built-in predicate without notice. Restored compatibility with Windows fixing an issue with the hack used to expand file paths.

  • UPDATED: CxProlog adapter file, taking advantage of the new position/1 stream property and the new built-in predicate stream_position_data/3 introduced in release 0.97.7, which is now the minimum version required.

  • IMPROVED: Simplified the adapter files for B-Prolog, ECLiPSe, GNU Prolog, SICStus Prolog, SWI-Prolog, XSB, and YAP by taking advantage of the internal '$lgt_prolog_meta_directive'/2 predicate.

Documentation

  • IMPROVED: Documentation of meta-predicate argument mode indicators and their intended use.

Installers and installation scripts

  • UPDATED: The logtalk.iss Inno Setup script, used for building binary Windows installers, to detect B-Prolog 8.0 (assuming that the BPDIR environment variable is defined).

Library

  • FIXED: The instructions for generating the library HTML documentation would wrongly include non-library entities.

  • FIXED: The library all_loader.lgt loader file would not load some library files (assignvars.lgt, counters.lgt, and streamvars.lgt).

Tools

  • UPDATED: The lgtdoc tool now reports the new complements/1 flag when documenting objects.

  • FIXED: The lgtdoc tool would print wrong information about protocol and category compilation flags.

  • CHANGED: The lgtunit tool code coverage output now writes the list of predicate clause indexes at the end. Also added information about backend Prolog compiler features for limiting the print depth of the list.

  • CHANGED: The lgtunit tool code coverage no longer reports statistics on compiler-generated auxiliary predicates (such as the ones resulting from use_module/2 directives and optimized meta-predicate definitions).

Examples

  • FIXED: Restored testing of use_module/1 directives (whose support depend on the backend Prolog compiler) for the modules example.

  • FIXED: Definition for the predicate expand_path/2 for B-Prolog in the cc example.

3.00.0 Alpha 24 - September 16, 2013

Logtalk compiler and runtime

  • ADDED: Built-in predicate logtalk_make/1, with possible argument all, for reload all modified source files, and clean, for deleting intermediate files generated by the compilation of source files.

  • ADDED: Key target to the logtalk_load_context/2 built-in predicate for getting the full path of the intermediate Prolog file for the Logtalk source file under compilation.

  • ADDED: Restored the reload compiler flag but with a new valid value, changed, which is now the default value (i.e. a file will be reloaded if changed since last loaded provided that any explicit flags remain the same). Note that this flag non longer affects static binding optimizations, which now only depend on the optimize flag.

  • CHANGED: To avoid performance penalties, the built-in methods phrase/2-3 no longer check that the list arguments are lists or partial lists. This is in line with current practice in Prolog compilers and draft standardization proposals where such checks are specified as optional.

  • CHANGED: Turning on the debug compiler flag no longer turns on the clean compiler flag.

  • IMPROVED: Performance of local meta-calls when using the call/2-N built-in predicates and the call//1-N built-in non-terminals with a callable closure known at compile time.

  • FIXED: Restore the current directory when a call to the logtalk_load/1-2 built-in predicates fail due to a syntax error in a source file for which the backend Prolog compiler read_term/3 built-in predicate prints an error message and fails instead of throwing an exception.

  • FIXED: Don’t try to compile calls to call//0 in a grammar rule body as a call to a built-in non-terminal. Don’t try to compile calls to call/0 in a clause body as a call to a built-in predicate.

  • FIXED: Avoid a spurious choice-point in local meta-calls resolved at runtime from within a category.

  • FIXED: Only consider skipping reloading a source file when the explicit compiler flags are the same used before.

Prolog adapter and integration files

  • ADDED: Aliases {*} for the logtalk_make(all) call and {!} for the logtalk_make(clean) call.

  • REMOVED: Alias {} for the built-in predicate logtalk_make/0.

Tests

  • ADDED: Two unit tests for the setof/3 built-in method taken from a thread in the SWI-Prolog mailing list on existential variables.

Examples

  • ADDED: Two unit tests to the dcgs examples illustrating a nasty but also sometimes useful solution to get a grammar rule difference list arguments using lambda expressions.

Documentation

  • IMPROVED: Documentation of available shorthands for the logtalk_load/1 and logtalk_make/1 built-in predicates.

IDEs, text editors, and syntax highlighters support

  • ADDED: Syntax coloring support for the new logtalk_make/1 built-in predicate to all supported text editors and syntax highlighters.

  • ADDED: Support for Highlight 3.15 or later version.

  • IMPROVED: Syntax coloring test files.

  • FIXED: Some syntax coloring support files missed highlighting of the logtalk_load_context/2 built-in predicate.

  • FIXED: GtkSourceView 2.x support file had a wrong language specification version number that resulted in a reading language specification file error when using editors such as Gedit and IDEs such as Anjuta.

  • FIXED: Several typos in the Emacs support file that prevented syntax coloring of some operators, directives, and built-in predicates.

  • FIXED: Typo in the SHJS support file that prevented syntax coloring of the else/0 directive and added missing support for the include/1 directive.

  • FIXED: Missing jEdit text editor syntax coloring support for the directive meta_non_terminal/1.

  • FIXED: Workaround a Nedit size limitation in language highlight patterns that prevented importing the logtalk.pts support file.

3.00.0 Alpha 23 - August 28, 2013

Logtalk compiler and runtime

  • CHANGED: The expanding built-in protocol no longer declares the predicates term_expansion/2 and goal_expansion/2 as dynamic. Applications requiring runtime changes to the definitions of these predicates can simply define them as calling dynamic predicates that perform the actual expansions.

  • CHANGED: The logtalk_load_context/2 key file now returns the full path of the file being compiled, the same as the source key. This complies with the de fact standard meaning of this key in Prolog compilers implementing a prolog_load_context/2 predicate. The name of the file is now available using the new basename key.

  • CHANGED: The logtalk::loaded_file/3-4 methods now return compiler flags in the same format used by the logtalk_compile/2 and logtalk_load/2 built-in predicates.

  • ADDED: Commented out settings to the settings-sample.lgt file for using the SWI-Prolog graphical profiler and for using .eco or .qlf files when running with, respectively, ECLiPSe or SWI-Prolog as the backend compilers.

Prolog adapter and integration files

  • ADDED: Instructions on how to add support for running Logtalk with the new MacOS X SWI-Prolog.app application.

  • ADDED: The ECLiPSe adapter file now recognizes as temporary files the object files (which use a .eco file extension by default) that can be generated by precompiling Prolog files. Also changed the definition of the internal '$lgt_delete_file'/1 predicate to succeed when a file doesn’t exist.

  • CHANGED: The ECLiPSe adapter file now loads object files (which use a .eco file extension by default) if they exist and are up-to-date instead of the corresponding Prolog files.

  • ADDED: Instructions on how to automatically generate .eco or .qlf files when using, respectively, ECLiPSe or SWI-Prolog as the backend compilers.

Documentation

  • IMPROVED: Documentation of the term expansion mechanism and its predicates.

Examples

  • CHANGED: Comment out the individual examples on the constraints/bp example that require support for B-Prolog action rules as these are currently not supported.

IDEs, text editors, and syntax highlighters support

  • IMPROVED: Text layout of info/1-2 directives found in the entity and predicate declaration templates for several text editors.

3.00.0 Alpha 22 - August 16, 2013

Logtalk compiler and runtime

  • NEW: Read-only flag, settings_file, with possible values allow and deny, that allows or disables loading a settings file at Logtalk startup. The adapter files set this flag to allow by default but the value can be changed by editing the adapter files when embedding Logtalk in a compiled application.

  • IMPROVED: When the LOGTALKHOME or the LOGTALKUSER environment variables are not defined, assume the current directory as their value. This enables Logtalk to startup when embedded in a compiled application if the variables are not defined.

  • FIXED: The compiler would try to close the wrong stream when processing an error generated while checking a source file for an encoding/1 directive.

  • FIXED: A bug deleting Prolog-specific auxiliary files generated during the compilation of the intermediate Prolog files when the clean flag is on. This bug resulted in directory existence errors when using SWI-Prolog as the back-end compiler and a loader file loading source files in subdirectories using relative paths.

Prolog adapter and integration files

  • CHANGED: The SWI-Prolog adapter file now turns off singleton variables check when loading the intermediate Prolog files generated by the compilation of Logtalk source files. This is not an ideal solution but a workaround for avoiding reporting singleton variables in generated code that don’t exist or aren’t detected in the original code.

  • ADDED: Partial support to the SWI-Prolog adapter file for using the built-in meta-predicates dynamic/1 and multifile/1 within objects and categories when their argument is a single predicate indicator.

  • CHANGED: Moved Lean Prolog adapter and integration files to the unsupported directories as its current version lacks the necessary features to run Logtalk.

  • FIXED: Bug in most of the lgt*.sh integration scripts when the environment variable LOGTALKHOME is not defined and a Logtalk installation is located using the script own directory.

  • FIXED: The definition for the internal predicate '$lgt_expand_path'/2 for B-Prolog adapter file would fail to expand some relative file paths.

  • FIXED: An issue with the Qu-Prolog adapter file that prevented deleting the files generated by the compilation of the intermediate Prolog files when the clean flag is on.

3.00.0 Alpha 21 - August 6, 2013

Logtalk compiler and runtime

  • NEW: Added logtalk_make/0 built-in predicate for reloading source files modified since the last time they are loaded.

  • IMPROVED: Avoid reloading a source file if it was not modified since it was loaded.

  • FIXED: Reloading a source file would result in duplicated entries in the internal runtime table of loaded files.

Prolog adapter and integration files

  • CHANGED: Moved the '$lgt_compare_file_modification_times'/3 internal predicate into the compiler and added a '$lgt_file_modification_time'/2 predicate to all adapter files.

  • UPDATED: The SWI-Prolog swihooks.pl file to also take into account the alternative .logtalk source file name extension.

  • NEW: Added shortcut {}/0 for the new logtalk_make/0 built-in predicate.

  • FIXED: The definition for the internal predicate '$lgt_expand_path'/2 for B-Prolog adapter file would fail to expand relative file paths.

Documentation

  • FIXED: Some unresolved internal links in the Reference Manual that affected generating the PDF version.

Installers and installation scripts

  • FIXED: The logtalk.iss Inno Setup script, used for building binary Windows installers, would use an incompatible ECLiPSe 6.0 version if no ECLiPSe 6.1 version was detected.

Tools

  • FIXED: Issues with debugging support when using Qu-Prolog or XSB as the back-end Prolog compilers due to the lack of support for static multifile predicates in these systems.

  • FIXED: The diagrams tool loader file would try to load the library pairs.lgt file twice.

  • IMPROVED: Compile the diagrams, help, and lgtdoc tools with the optimize flag turned on.

Tests

  • FIXED: Skip the discontiguous/1 directive unit tests when using B-Prolog or XSB as the back-end Prolog compilers as they lack support for discontiguous predicates.

  • FIXED: Make the multifile predicates used in the parameter/2 and this/1 built-in methods unit tests also dynamic to allow the tests to run when using back-end Prolog compilers such as Qu-Prolog and XSB that don’t support static multifile predicates.

3.00.0 Alpha 20 - July 31, 2013

Logtalk compiler and runtime

  • IMPROVED: Only load the default built-in entities if not already loaded in order to simplify embedding Logtalk in compiled Prolog applications.

  • ADDED: Sample code to the settings-sample.lgt file for suppressing some or all startup messages.

  • CHANGED: Print the startup message that a settings files could not be found as a comment instead of as a warning and also make it more informative about which directories are searched.

  • CHANGED: Call source file global use_module/1-2 directives immediately at compilation time. This simplifies working with Prolog module resources that must be loaded prior to the compilation of the rest of the source file but it also assumes that there are equivalent use_module/1-2 predicates. This change is also consistent with the current processing of ensure_loaded/1 source file global directives.

Prolog adapter and integration files

  • ADDED: Description of a workaround for supporting settings files in the current directory when using ECLiPSe as the back-end Prolog compiler on Windows.

Examples

  • FIXED: The benchmarks example loader.lgt file didn’t ensure compilation of the source files with the optimize flag set.

3.00.0 Alpha 19 - June 10, 2013

Logtalk compiler and runtime

  • IMPROVED: Avoid unnecessary compile-time instantiations of this in the execution-context argument of compiled predicate clauses for non-parametric objects.

  • FIXED: Calls to the parameter/2 and this/1 built-in execution-context methods in a multifile predicate clause now return solutions based on the entity for which the clause is defined as per documentation.

  • FIXED: Asserting predicate rules using the asserta/1 and assertz/1 built-in methods. Thanks to Andreas Becker for the bug report.

  • FIXED: Clauses for a multifile predicate would not be found if the entity holding the primary declaration defined no clauses for the predicate.

Tests

  • ADDED: Some more unit tests for the built-in database methods.

  • ADDED: Some more unit tests for the parameter/2 and this/1 built-in execution-context methods.

  • UPDATED: The logtalk_tester.sh script now also looks for tester.logtalk files.

Installers and installation scripts

  • UPDATED: The freedesktop.org shared mime-info database entry for Logtalk now also registers the alternative .logtalk source code file extension.

  • UPDATED: The logtalk.iss Inno Setup script, used for building binary Windows installers, now also registers the alternative .logtalk source code file extension.

  • UPDATED: The logtalk_user_setup.sh and logtalk_user_setup.js scripts now also copy back any settings.logtalk file found when creating a backup of the $LOGTALKUSER directory.

3.00.0 Alpha 18 - June 3, 2013

Logtalk compiler and runtime

  • ADDED: Support for defining and using alternative extensions for Logtalk source code files (e.g. .logtalk).

  • REMOVED: Experimental support for the annotation expansion predicates. This functionality can be implemented, although with more coding work, using the term- and goal-expansion predicates.

  • IMPROVED: Faster compilation of info/1-2 and uses/2 directives.

  • FIXED: Compile the clauses that allow runtime use of predicates specified in uses/2 and use_module/2 directives as auxiliary clauses.

  • FIXED: The pseudo-object user no longer have the complements flag set.

  • FIXED: When compiling a module as an object, the compilation of reexport/2 directives could result in duplicated predicate linking clauses when using the as/2 operator to define predicate aliases.

  • FIXED: Compilation in debug mode for the built-in current_logtalk_flag/2 and set_logtalk_flag/2 predicates.

  • FIXED: When using the {}/1 bypass control construct for marking an expanded term as final, the compiler would not check that the expanded term is callable.

Prolog adapter and integration files

  • ADDED: Alternative .logtalk file name extension definition to all adapter files.

  • REMOVED: Support for action rules, implemented using annotation expansion predicates, from the B-Prolog adapter file.

  • FIXED: Avoid a spurious missing meta_predicate/1 directive warning for a compiler internal predicate when using the make/0 utility of SWI-Prolog.

Tests

  • IMPROVED: The logtalk_tester shell script now supports running unit tests in optimal mode, besides the already supported normal and debug modes.

  • IMPROVED: The logtalk_tester shell script now prints the total number of tests skipped, passed, and failed.

  • ADDED: Unit tests for the catch/3, forall/2, and (\+)/1 built-in methods and the discontiguous/1, initialization/1, multifile/1 and set_logtalk_flag/2 built-in directives.

Examples

  • REMOVED: Experimental examples chr and problog, which were implemented using the now removed support for annotation expansion predicates.

IDEs, text editors, and syntax highlighters support

  • ADDED: Support for the alternative .logtalk file name extension to most of the supported text editors and syntax highlighters.

3.00.0 Alpha 17 - May 20, 2013

Logtalk compiler and runtime

  • FIXED: When compiling a message delegation call, the compiler would not check if the object to which the message is delegated is known.

  • FIXED: When both uses/2 directives and explicit ::/2 calls are used for the same messages to the same objects, the entity property predicates could return duplicated uses/3 and use_module/3 properties.

  • CHANGED: The message terms for lambda expression warnings for unclassified variables and mixed-up variables now include the list of culprit variables.

  • CHANGED: Reorganize the message kinds used in the structured message printing mechanism. Added kind help (introduced by Quintus Prolog; supported mostly for helping port existing code). Added kinds comment and comment(_) for messages that provide useful but not essential information; the information and information(_) kinds are now reserved for messages printed in reply to a user request for information. Also, removed the banner(_) message kind and suppress banner messages when the report flag is set to warnings.

  • NEW: Take into account use_module/2 directives when compiling calls to the database and reflection built-in methods by looking into these methods predicate arguments. This change makes the interpretation of this directive consistent with the semantics of the uses/2 directive.

  • FIXED: Compilation of calls to the asserta/1, assertz/1, and retract/1 built-in methods when the argument is an explicitly-qualified module rule.

  • FIXED: Convert Prolog module meta-predicate directive arguments into the Logtalk equivalents before checking meta-predicate calling compatibility.

  • IMPROVED: Faster generated code for :/2 non-terminals in the body of grammar rules.

  • NEW: Support for calling Prolog built-in meta-predicates and Prolog module meta-predicates that take closures as meta-arguments.

  • FIXED: Bug in the processing if the conditional compilation directives when a true if/1 directive is followed by a true if/1 directive with an elif/1 part.

  • IMPROVED: Support the specification of Prolog built-in (meta-)predicates in uses/2 directives (where the first argument is necessarily user).

Prolog adapter and integration files

  • IMPROVED: Add an internal hook predicate for overriding default conversions of Prolog dialect specific meta-argument specifiers to all adapter files.

  • UPDATED: Added definitions for the internal time and date predicates to the Lean Prolog adapter file.

  • UPDATED: XSB adapter file for release 3.4.0, which changes the exception term format for errors within the pseudo-object user.

  • FIXED: Definition of internal predicate for querying built-in meta-predicates for GNU Prolog. Also fixed clash between the GNU Prolog built_in directive and the Logtalk built_in entity directive.

  • REMOVED: Unsupported adapter files for old ECLiPSe versions (5.x and 6.0.x) and old SICStus Prolog versions (3.8.x).

  • REMOVED: Unsupported adapter files for Prolog compilers that are no longer developed or maintained.

Documentation

  • UPDATED: The UPGRADING.md file now contains a summary of the major changes in Logtalk 3.x that may require compatibility updates for running Logtalk 2.x applications.

  • UPDATED: The tutorial section on categories and the User Manual section on defining category predicates.

  • ADDED: Documentation on the structured message printing mechanism to the User and Reference Manuals.

  • ADDED: Documentation on the coinductive_success_hook/1-2 user defined hook predicates to the Reference Manual.

  • IMPROVED: Documentation of the uses/2 predicate directive.

  • ADDED: Documentation on the use_module/2 predicate directive to the Reference Manual.

  • ADDED: Documentation on lambda expressions to the User Manual.

  • ADDED: Documentation on how to use local meta_non_terminal/1 and meta_predicate/1 directives to override the original directives of called non-terminals and meta-predicates defined elsewhere.

Tests

  • ADDED: Unit tests for the uses/2 predicate directive.

  • ADDED: Unit tests for the conditional compilation directives.

Examples

  • NEW: Added an example, symbiosis, of using Prolog built-in meta-predicates and module meta-predicates that take closures as arguments.

  • CHANGED: The benchmarks example now calculates the empty loop time only once when running a batch of benchmark tests.

  • UPDATED: Added definitions for the predicates file_modification_time/2 and file_size/2 for Lean Prolog to the cc example.

Installers and installation scripts

  • IMPROVED: The Windows installer now deletes any XSB .xwam files found in existing adapters, integration, and paths folders from a previous installation in order to prevent upgrading issues when using XSB as the backend Prolog compiler.

3.00.0 Alpha 16 - May 6, 2013

Logtalk compiler and runtime

  • CHANGED: Always try to apply static binding for ::/2 and ^^/2 calls when the optimize flag is turned on and the target entities are static.

  • ADDED: A new entity directive, built_in, for declaring entities built-in.

  • RENAMED: Undo the rename done in the Alpha 1 release of the built_in entity property to final.

  • REMOVED: The smart_compilation and reload compiler flags are no longer available.

  • CHANGED: When the clean flag is turned off, the compiler now always checks if an up-to-date intermediate file exists before recompiling a source file. In addition, when the clean flag is turned on, the compiler will now ignore any existing intermediate files, forcing source file recompilation.

Prolog adapter and integration files

  • CHANGED: The default value of the optimize flag is now off. This is more consistent with the default values of other flags such as source_data and clean, resulting in a default configuration appropriated for the development (not the deployment) of applications.

IDEs, text editors, and syntax highlighters support

  • ADDED: Syntax coloring support for the new built_in/0 directive to all supported text editors and syntax highlighters.

3.00.0 Alpha 15 - April 29, 2013

Logtalk compiler and runtime

  • CHANGED: Generalized the (^^)/1 control construct to also allow calling of imported predicates. Deprecated the (:)/1 control construct, which is now interpreted as an alias to the (^^)/1 control construct.

  • ADDED: Support for using the (^^)/1 control construct in grammar rules.

  • CHANGED: The calls/1 and uses/1 entity directives are now deprecated.

  • FIXED: Bug when checking lambda expressions for variables declared as both parameters and free resulting from using a definition of a list intersection predicate that wrongly assumed an ordered representation.

  • FIXED: Internal functors used for inherited predicate declaration and definition lookups for prototypes, although these functors are currently not used.

  • FIXED: Explicit-qualified calls to module predicates where the module or the predicate are only know at runtime could be miscompiled.

  • IMPROVED: The uses/3 and use_module/3 entity properties now also return information on sufficiently instantiated ::/2 or :/2 goals.

  • FIXED: The entity properties uses/3 and use_module/3 would not be recognized as valid when queried explicitly.

  • FIXED: Protocols also have the properties uses/3 and use_module/3 as they may contain initialization/1 directives with ::/2 or :/2 goals.

Prolog adapter and integration files

  • UPDATED: Ensure that the de facto standard between/3 predicate is available for all supported backend Prolog compilers.

Tools

  • FIXED: The logtalk_tester.sh shell script used in the automation of unit testing would not report compilation warnings.

Examples

  • UPDATED: The lambdas example with a sample object illustrating detection of lambda expressions with unclassified or mixed-up variables.

3.00.0 Alpha 14 - April 10, 2013

Logtalk compiler and runtime

  • NEW: Updated the compiler to accept the old name of flags that have been renamed and to print a warning when the old names are used in calls to the set_logtalk_flag/2 and current_logtalk_flag/2 built-in predicates and directives.

  • ADDED: Support for the forward/1 message forwarding handler to the (::)/1 control construct.

  • CHANGED: The forall/2 and retractall/1 predicates are no longer recognized as Logtalk built-in predicates. The forall/2 predicate is a de facto standard predicate while the retractall/1 predicate is specified in recent revisions of the ISO Prolog Core standard.

  • IMPROVED: Small performance optimization for meta-calls resolved at runtime by using specialized code for calls from within bagof/3 and setof/3 calls.

  • IMPROVED: Small performance optimization when calling lambda expressions.

  • FIXED: Bug in the compilation of calls to the bagof/3 and setof/3 built-in methods when the meta-call is local but only know at runtime where some backend Prolog compilers would complain about a (^)/2 undefined predicate.

  • FIXED: A non-instantiated argument in an encoding/1 directive would not be detected.

  • FIXED: Some cases where printing the execution context in the debugger for the current goal would print a variable for the coinduction stack.

  • FIXED: Passing the execution context for goals compiled in debug mode when performing a meta-call in sender.

  • FIXED: Compiling a Prolog module as an object would print a spurious message when using default settings.

Library

  • FIXED: Definition of the msort/2 predicate in the library object list for GNU Prolog.

Tools

  • ADDED: Low-level trace option, $, for printing the compiled form of the current goal to the debugger tool.

  • FIXED: A bug in the debugger tool preventing printing of the execution context (using the trace option x) for the top goal.

Examples

  • CHANGED: In the cc example, use the statistics/2 key cputime in the implementation of the predicate cpu_time/1 for SWI-Prolog.

IDEs, text editors, and syntax highlighters support

  • ADDED: Syntax coloring support for the forward/1 method to all supported text editors and syntax highlighters.

3.00.0 Alpha 13 - March 28, 2013

Logtalk compiler and runtime

  • CHANGED: When applicable, the (:)/2 construct is always interpreted as a module-qualified term. Previously, this would require a backend Prolog compiler with support for modules but given that Logtalk objects subsume Prolog modules and that modules can be compiled as objects, this restriction have been lifted.

  • IMPROVED: Faster code generation of entity relation runtime clauses.

  • IMPROVED: Faster compilation of entity predicate clauses.

  • IMPROVED: Faster compilation of info/1-2 and mode/2 directives.

  • IMPROVED: Detect and report as an error any attempt to redefine the call//1-N built-in non-terminals.

  • FIXED: Calls to the grammar rule translator must throw different exception terms in case of error depending on the calling context.

  • IMPROVED: Simplified implementation of the current_logtalk_flag/2 built-in predicate. Optimized compilation of sufficiently instantiated calls to the current_logtalk_flag/2 and set_logtalk_flag/2 built-in predicates.

  • IMPROVED: Exception terms when compiling a call to the parameter/2 built-in method with an out-of-range parameter index.

  • FIXED: Built-in predicates overridden within entities with a declaration but without any definition would not be reported when the redefined_built_ins is set to warning.

  • FIXED: When expanding a file name, it’s only necessary to ensure that its directory exists for a generated intermediate file.

Prolog adapter and integration files

  • UPDATED: The adapter files for SICStus Prolog, SWI-Prolog, and YAP now include a commented out definition for the message_hook/3 predicate for avoiding printing repeated discontiguous predicate warnings that are already reported by the Logtalk compiler. Note that activating this definition will likely result in missing discontiguous predicate warnings, however, when compiling Prolog code.

Documentation

  • UPDATED: User Manual with information on the forwarding built-in protocol.

IDEs, text editors, and syntax highlighters support

  • UPDATED: The TextMate 2 bundle now sets the indentOnPaste key to simple to avoid the editor messing up the text indentation when pasting code.

3.00.0 Alpha 12 - March 12, 2013

Logtalk compiler and runtime

  • CHANGED: Simplified directive existence error exceptions. The first argument of the existence_error/2 term in the case of missing directives is now always the atom directive.

  • CHANGED: More clear ancestor existence error exceptions when reporting super calls from an object or a category without any ancestors. The exception terms existence_error(ancestor, object) and existence_error(ancestor, category) are now used.

  • IMPROVED: Performance of compilation of predicate clauses and grammar rules passed as arguments to the create_object/4 and create_category/4 built-in predicates.

  • IMPROVED: Throw callable type errors when applicable when compiling entity relations.

  • IMPROVED: The compiler now detects attempts to define an object as both a prototype and a class or as both a prototype and an instance.

  • IMPROVED: Compiler performance when compiling source files.

  • IMPROVED: The compiler now checks for the occurrence of synchronized/1 and coinductive/1 directives after calls to the declared predicates.

  • IMPROVED: Performance message printing when no logtalk::message_hook/4 hook predicate is defined.

  • IMPROVED: Cleanup of compiler temporary data resulting in faster source file compilation times.

  • IMPROVED: More efficient implementation of the current_logtalk_flag/2 built-in predicate.

  • FIXED: Errors found while compiling the end_of_file term could result in exceptions terms missing the error/2 wrapper.

  • FIXED: Bug where information about called entity predicates could also be saved when compiling meta-arguments during runtime meta-predicate calls.

  • FIXED: Compiler bug where the full path of the source file being compiled would not be correctly saved.

  • FIXED: Don’t count redefining an entity as a consequence of reloading a file as a loading warning.

  • FIXED: In some cases, the compiler would not generate the correct exception term when reporting an error in the compilation of a file-level directive.

  • FIXED: Possible nesting of error terms when using the entity creation built-in predicates.

  • FIXED: Detection of instantiation errors when compiling entity relations, directives, and clauses.

Prolog adapter and integration files

  • UPDATED: Internal documentation of adapter files for supported backend Prolog compilers.

  • UPDATED: Added an hack for compiling include/1 directives when compiling modules as objects to the SWI-Prolog adapter file. Also use a faster version of the term reading internal predicate.

3.00.0 Alpha 11 - March 4, 2013

Logtalk compiler and runtime

  • IMPROVED: Compiler performance when compiling source files. On typical source files, the improved compiler does less ~24% of inferences and is ~25% faster on average (depending on the used Prolog backend compiler).

  • IMPROVED: Simpler implementation of coinduction, improving compilation times in general and avoiding reporting the generated auxiliary clauses when using the reflection methods. The existing special debugging support is preserved.

  • NEW: Interpret false/0 as also a built-in method.

  • CHANGED: Representation used in table of supported directives to avoid unnecessary computations when compiling source files.

  • FIXED: Bug where the number_of_clauses/1 property value would not be correct for coinductive predicates defined also by facts.

  • FIXED: Bug where an auxiliary predicate generated by the compiler or by calls to the logtalk::compile_aux_clauses/1 method could have line_count/1 property.

  • NEW: Predicate property auxiliary, available when the source_data flag is turned on, for auxiliary predicates generated during the compilation of the enclosing entity.

  • FIXED: Bug in the implementation of the object_property/2 built-in method for the property includes/3 where information for some multifile predicates could be missing.

Prolog adapter and integration files

  • CHANGED: Representation of proprietary Prolog meta-directives to avoid unnecessary computations when compiling source files.

  • CHANGED: Updated the default Prolog loader options for XSB to include -verbo and +canonical.

  • IMPROVED: Updated the SWI-Prolog adapter file with a bit more efficient implementation of the internal compiler predicate for reading file terms.

  • UPDATED: The SWI-Prolog hooks integration file to also be able to decompile calls to the auxiliary predicates generated for coinductive predicates.

3.00.0 Alpha 10 - February 25, 2013

Logtalk compiler and runtime

  • IMPROVED: Updated the compiler to print a warning for missing public/1 directives for multifile predicates.

  • CHANGED: The compiler now only uses the value of the report flag in the default code for printing messages. This allows the user to intercept any compiler message (by defining clauses for the logtalk::message_hook/4 hook predicate).

  • IMPROVED: Compiler performance improvements when compiling source files.

  • FIXED: The compiler could attempt to print compilation warnings at runtime when using the entity creation built-in predicates, resulting in failures or errors.

  • FIXED: Also allow message delegation goals to be expanded.

  • FIXED: A compiler bug in the handling of missing directives warnings could lead to a failed compilation.

  • FIXED: File-specific annotation hooks were not cleaned after compiling a source file.

  • FIXED: When compiling a multifile clause for a meta-predicate, the safety test that all arguments appearing in a meta-argument position are variables was not performed correctly.

  • FIXED: Also print warnings about missing references to the expanding built-in protocol when compiling definitions for the annotation hook predicates.

  • CHANGED: Removed support for non-deterministic synchronized predicates.

  • FIXED: The compiler second pass could go deeper in fixing calls to explicitly-qualified module predicates than it should.

Prolog adapter and integration files

  • IMPROVED: Updated the SWI-Prolog swihooks.pl integration file with dummy meta_predicate/1 directives for internal compiler and runtime predicates to avoid cluttering the make/0 analysis report.

  • CHANGED: GNU Prolog 1.4.2 (or a later version) is now required when using this back-end Prolog compiler.

Documentation

  • IMPROVED: Documentation of the multifile/1 predicate directive.

3.00.0 Alpha 9 - February 11, 2013

Logtalk compiler and runtime

  • NEW: Handler for unknown messages, forward/1, declared in the forwarding built-in protocol. This predicate is automatically called by the runtime when a message sent using the ::/2 control construct is not understood by the receiving object and is usually used to forward the message to another object.

  • NEW: Delegation control construct, []/1, allowing sending a message to an object while preserving the original sender. Its argument must be a call to the ::/2 control construct.

  • NEW: Recognize false/0 as an ISO Prolog standard predicate.

  • CHANGED: The logtalk built-in object no longer implements the expanding and monitoring built-in protocols.

  • CHANGED: When compiling messages to the pseudo-object user, the compiler now checks that the message is either a variable or a callable term.

  • FIXED: The compiler could fail to properly report non-callable terms used as goals in predicate clauses.

  • FIXED: Allow the logtalk built-in object to be complemented by a category.

  • FIXED: Predicate property defined_in/2 failed to return the line for the first clause of a coinductive predicate.

  • FIXED: Predicate property defined_in/2 failed to return the line for the first clause of a dynamic predicate if defined by a rule instead of a fact.

  • FIXED: Disable static binding for messages to objects compiled with support for complementing categories enabled, thus avoiding possible inconsistencies when hot patching is used with unpatched resources already in use.

  • FIXED: Creating a complementing category at runtime (using the built-in predicate create_category/4) can invalidate dynamic binding cache entries.

  • FIXED: Abolishing a dynamic category that complements an object would fail to update the internal runtime table of complemented objects.

Prolog adapter and integration files

  • CHANGED: ECLiPSe 6.1#143 and Qu-Prolog 9.0 (or later versions) are now required when using these back-end Prolog compilers. Thanks to Joachim Schimpf for his feedback on the necessary updates to the ECLiPSe adapter file.

Tools

  • IMPROVED: The lgtunit tool now allows the specification of tests that for some reason should be skipped by prefixing the test clause head with the (-)/1 operator.

  • IMPROVED: Several updates to the diagrams tool: entities names are now printed in bold typeface; entities that are not part of the processed files or libraries now use a dashed border; entity relation labels are now omitted by default. Also improved the tool documentation.

Examples

  • CHANGED: The file and directory predicates defined in the cc example for SWI-Prolog now expand the path arguments before calling the native predicates.

Installers and installation scripts

  • FIXED: The uninstall.sh POSIX shell script failed to delete some installed script symbolic links and man pages.

IDEs, text editors, and syntax highlighters support

  • ADDED: Syntax coloring support for the false/0 ISO Prolog standard predicate to all supported text editors and syntax highlighters.

3.00.0 Alpha 8 - January 18, 2013

Logtalk compiler and runtime

  • IMPROVED: Compile-time type-checking of the arguments of the phrase/2-3 built-in methods.

  • FIXED: Overzealous error-checking of calls to the set_prolog_flag/2 Prolog built-in predicate.

  • FIXED: A bug where the (::)/2 and (^^)/2 control constructs could report a permission error when a public built-in method was used as a message. This bug only surfaced, however, in artificial calls such as using (::)/2 itself as a message to another object.

  • FIXED: The (::)/2 and (>>)/2 control constructs were wrongly declared as private instead of public.

Prolog adapter and integration files

  • FIXED: The Windows integration shortcuts for SWI-Prolog now use the -s command-line option instead of -f (this is already the case with the POSIX integration scripts). This allows loading of any existing SWI-Prolog user initialization file. Thanks to David Hyde for the bug report.

  • IMPROVED: Updated the SICStus Prolog adapter file in order to solve an issue where the context information could be missing in exception terms.

  • IMPROVED: Updated the Qu-Prolog and XSB adapter files in order to solve some issues with the non-standard error handling of these Prolog compilers.

  • IMPROVED: The POSIX integration scripts now use the contents of the system and user VERSION.txt files instead of hard-coding version information.

Documentation

  • IMPROVED: POSIX man pages for integration, documentation, and helper shell scripts.

Tools

  • ADDED: Basic XHTML documentation for the provided programming tools.

  • FIXED: The profiler tool now works with the profiling support found in recent SICStus Prolog 4 versions (tested with version 4.2.3).

  • FIXED: The tools/loader.lgt helper file now also loads the lgtdoc tool.

Tests

  • ADDED: Support for multi-threading and 64 bits versions of XSB to the logtalk_tester.sh script.

Examples

  • FIXED: Broken threads/philosophers example due to the used of the (::)/2 control construct as a message to self.

  • ADDED: Qu-Prolog definition for the pid/1 predicate to the cc example.

Installers and installation scripts

  • IMPROVED: Replaced the RPM logtalk.spec file by a logtalk.spec.in file that’s processed by the build_rpm.sh shell script by using the contents of the VERSION.txt file.

  • IMPROVED: The build_release.sh POSIX shell script now takes as an optional argument a version identifier, using the contents of the VERSION.txt file as a fallback value.

  • IMPROVED: The logtalk.iss Inno Setup script, used for building binary Windows installers, now use the contents of the VERSION.txt file instead of hard-coding version information.

  • IMPROVED: The install.sh, uninstall.sh, and build_rpm.sh POSIX shell scripts now use the contents of the VERSION.txt file to define the name of the installation directory. The install.sh script now accepts as optional arguments the installation prefix directory and the installation directory itself.

  • UPDATED: MacPorts portfile to avoid conflicts with the new logtalk-devel portfile.

  • FIXED: Several issues with the spec file used for building RPM installers.

  • FIXED: Minor issues with the spec files used for building Debian installers.

  • FIXED: Detection of outdated Logtalk user folders by the Windows installer was looking for versions older than 2.44.0 instead of 3.00.0.

3.00.0 Alpha 7 - December 21, 2012

Logtalk compiler and runtime

  • NEW: Built-in reflection method current_op/3.

  • CHANGED: Save entity operator declarations also when the source_data flag is off.

  • FIXED: Exception term thrown when sending a message to a non-callable proxy.

  • CHANGED: Exception term thrown when attempting to use the (<<)/2 control construct with an object compiled with the flag context_switching_calls set to deny.

  • FIXED: Meta-calling of declared, static, but undefined predicates could throw an error instead of failing (as per closed-world assumption).

  • FIXED: The wrong exception term would be thrown by the runtime error handler when the original exception is a variable.

  • IMPROVED: Ensure that meta-calls of control constructs and built-in predicates throw the correct exception term.

  • CHANGED: Replaced the experimental directive annotation/1 with a set of annotation expansion predicates defined in the built-in expanding protocol. These annotation predicates are still considered experimental.

  • IMPROVED: Allow non-callable source file terms to be term-expanded. Updated the compiler to throw an error when a term is expanded to a non-callable term.

  • CHANGED: Use a domain_error(clause, Functor/Arity) exception term instead of unknown_error when the compiler fails to translate a clause.

  • CHANGED: The compiler now fails in case of compilation error (after printing the error information) instead of re-throwing the error. This avoids repeated error information and unhandled exceptions messages with the top-level of some back-end Prolog compilers.

  • IMPROVED: The compiling and loading built-in predicates now check that all source file names are valid and correspond to existing files before attempting to compile any of the files.

  • CHANGED: The exception terms used in case of error when using the compiling and loading built-in predicates.

  • FIXED: Silly bug in the current_event/5 built-in method, which failed to consider the event argument.

  • IMPROVED: The exception term generated in case of term- or goal-expansion errors now includes the original term or goal.

  • IMPROVED: Ensure that the generation of a non-callable term by a call to a goal-expansion hook predicate at compile time is reported as such. Previously, the exception could be generated at a later stage and thus loose the context information.

  • CHANGED: All predicates in the expanding protocol are now also declared as dynamic.

  • FIXED: Check that the argument of a source file initialization/1 directive is callable before attempting to expand it.

  • IMPROVED: Only check for attempts to redefine final entities when loading the code generated by the compilation of a source file. Before, the check was made during entity compilation, preventing the use of the built-in predicates logtalk_compile/1-2 to compile the default entities.

  • FIXED: Generation of internal predicate definition lookup clauses for predicates that are implicitly declared dynamic due to being declared within a dynamic entity. Thanks to Andreas Becker for the bug report.

Prolog adapter and integration files

  • CHANGED: All adapter files to define the new default annotation expansion predicates.

  • IMPROVED: The GNU Prolog adapter file now includes dummy definitions for Prolog built-in predicates used in the Logtalk compiler or runtime but that are never called when using GNU Prolog as the back-end compiler. This allows using GNU Prolog gplc utility to generate executables that embed Logtalk without requiring patching of the Logtalk core files or the adapter file.

  • ADDED: Instructions on how to embed Logtalk into a GNU Prolog generated executable file.

Documentation

  • REMOVED: All references to the no longer supported annotation/1 experimental directive.

Examples

  • CHANGED: The chr and problog examples to use the new experimental annotation support.

  • IMPROVED: Avoid some harmless warnings in the problog example.

Installers and installation scripts

  • CHANGED: The Windows installer now creates integration shortcuts that start Logtalk in the %LOGTALKUSER% directory. Before, the integration shortcuts used %CD% as the startup directory but this doesn’t work on Windows 7 and resulted in Logtalk starting up in a system directory where usually users don’t have write access.

3.00.0 Alpha 6 - December 3, 2012

Logtalk compiler and runtime

  • FIXED: Documentation of the error conditions for the current_predicate/1 built-in reflection method.

  • IMPROVED: Compile-time error-checking of calls to the reflection built-in methods.

  • CHANGED: Exception terms used for permission and existence errors thrown by the built-in database methods to use a predicate indicator instead of a predicate head.

  • FIXED: Bug in the abolish/1 built-in method when trying to abolish a non-existing predicate of an object that doesn’t allow dynamic declaration of new predicates.

  • FIXED: Bug in the “super” clauses for the built-in objects logtalk and user introduced in the previous alpha release.

  • CHANGED: Always interpret assert/1 calls and messages as assertz/1. Previously, this would require a back-end Prolog compiler supporting the assert/1 built-in predicate.

  • IMPROVED: Detect and report an error on attempts to define multifile entity predicates in user.

  • CHANGED: The default procedure for printing messages (not intercepted by the user) now adds begin/2 and end/1 tokens to, respectively, the start and the end of the list of tokens. These two tokens can be intercepted by the user for supporting e.g. message coloring.

  • CHANGED: Renamed the arith_mismatch domain errors thrown by the compiler to {N} where N is the expected arity integer value.

  • IMPROVED: Print a warning message when term-expansion or goal-expansion errors are found.

  • ADDED: A source key to the logtalk_load_context/2 built-in predicate for accessing the absolute path to the source file under compilation.

  • CHANGED: Renamed the logtalk_load_context/2 key entity_name to entity_identifier for consistency. The now deprecated entity_name key is still supported and aliased to entity_identifier.

  • IMPROVED: Optimized the code generated for uses/2 directives that allows runtime use when static binding is possible.

  • IMPROVED: Report a permission error when attempting to define a clause or a grammar rule within a protocol.

  • FIXED: Error handling of meta-calls. In some cases, the exception term would not include a logtalk/2 context term.

  • FIXED: Missing error/2 wrapper when error checking predicate indicators and info/1-2 key-value pairs.

  • FIXED: Error handling of the threaded_call/2, threaded_once/2, threaded_exit/2, and threaded_peek/2 built-in predicates. In some cases, the exception term would not include a logtalk/2 context term.

Prolog adapter and integration files

  • IMPROVED: The SWI-Prolog adapter file no longer needs to define the hook predicate logtalk::message_hook/4 in order to provide support for message coloring.

  • UPDATED: CxProlog adapter file for version 0.97.6, which is now the minimum version required. This version allows some coinduction examples to run as it supports the soft-cut control construct.

  • IMPROVED: Updated the Lean Prolog adapter file with dummy definitions for the ISO Prolog standard predicates flush_output/0-1.

  • UPDATED: Added missing predicate definitions to the Quintus Prolog adapter file (but this compiler can still only be supported with a hacked version of the Logtalk compiler/runtime).

Documentation

  • FIXED: Several issues that prevented using the scripts/build_release.sh shell script to generate installers and the PDF versions of the User and Reference Manuals.

Tools

  • IMPROVED: The lgtunit tool now prints warning messages for non-instantiated and repeated test identifiers.

  • CHANGED: Moved and renamed the examples/tester.sh POSIX shell script to scripts/logtalk_tester.sh and added a man page for it.

Examples

  • CHANGED: Turn off the coinduction example unit tests when using CxProlog or ECLiPSe as the back-end compiler as all tests that call bagof/3 cannot be run due to the fragile support for rational terms in these Prolog compilers.

  • NEW: Added named_databases, an implementation example of the Lean Prolog API for named databases for Prolog compilers with a module system.

  • NEW: Added a tutorial example, metaclasses, on how to use metaclasses.

  • FIXED: Bug in the loader file of the operators example.

  • IMPROVED: Added CxProlog definition for the predicate expand_path/2 to the cc example. Corrected a typo in the definition of the predicate file_size/2 for CxProlog.

  • ADDED: Unit tests to the constraints/sicstus and logging examples.

  • UPDATED: The unit tests automation script to work with the new warning and error reporting formats (using the defaults in the core/core_messages.lgt file).

Installers and installation scripts

  • UPDATED: The logtalk_user_setup.* scripts to create a copy of the tests directory in the Logtalk user directory.

3.00.0 Alpha 5 - November 5, 2012

Logtalk compiler and runtime

  • IMPROVED: Implemented static binding for “super” calls. As with other static binding optimizations, it requires entities defined in separated source files compiled with the option reload(skip).

  • FIXED: The implementation of static binding for the (:)/1 control construct would fail to propagate parameters when using parametric objects and parametric categories.

  • CHANGED: Format of the entity linking clauses for predicate definitions. The new format includes an additional argument that allows distinguishing between the scope container and the true container of a predicate definition.

  • FIXED: Memory leak in the abolish_category/1 built-in predicate.

  • FIXED: An encapsulation bug in the implementation of the (^^)/2 control construct could allow access to ancestor private predicates sharing the same with the predicate making the “super” call.

  • IMPROVED: Avoid generating warning messages when the report flag is off.

  • CHANGED: Moved the static binding step for message sending from the second compiler pass to the first pass.

  • FIXED: The predicate_property/2 built-in method would return the wrong class in the redefined_from/1-2 properties when the object receiving the message was an instance.

  • FIXED: Restore the working directory after a file existence error when using the logtalk_compile/1-2 and logtalk_load/1-2 built-in predicates.

  • FIXED: Ensure that checking for missing dynamic/1 directives for module predicates is only performed when the module name is know at compile time.

  • FIXED: False reports of calls to non-standard Prolog built-in predicates.

Prolog adapter and integration files

  • FIXED: Goal expansion of (::)/2 goals within modules for YAP.

  • IMPROVED: The goal expansion of (::)/2 goals within modules for SWI-Prolog is now independent of having user as a default import module.

  • IMPROVED: Enable coloring of console messages for SWI-Prolog by default.

Examples

  • FIXED: Added missing declaration for the predicate print/0 in the points example.

3.00.0 Alpha 4 - October 22, 2012

Logtalk compiler and runtime

  • CHANGED: Restored the redefined_built_ins compiler flag with a default value of silent and the missing_directives compiler flags with a default value of warning.

  • NEW: Updated the compiler to perform error and portability checking for the Prolog standard set_prolog_flag/2 and current_prolog_flag/2
    predicates and the set_prolog_flag/2 directive.

  • CHANGED: Compiler messages about redefined entities that result from reloading the same source file that contained the previous definitions are no longer warning but informational messages.

  • IMPROVED: When printing a loading warning that an entity with the same identifier was already loaded from a different file, also output the file and line number information.

  • IMPROVED: Detect a missing closing entity directive when the entity with the missing directive is followed by another entity.

  • IMPROVED: Also allow categories to declare (public) multifile predicates.

  • FIXED: A meta-call with a Object::Closure argument would not generate the correct exception for a non-valid object identifier.

  • FIXED: Make sure that runtime translation of ::/2 calls don’t try to record the referenced object for checks that only apply when compiling a source file.

  • FIXED: The implementation of the top-level built-in predicates ::/2 and <)/2 soft-cut control construct, when available, to be used as a message broadcasting control construct.

  • NEW: When compiling a coinductive predicate, save the extended coinductive template as a predicate property.

  • CHANGED: Intercept the current_predicate/1 and predicate_property/2 messages sent to the pseudo-object user. This allows consistent behavior across back-end Prolog compilers.

  • NEW: Added a loaded_file/4 predicate to the logtalk built-in object, which complements the existing loaded_file/2-3 predicates and gives access to the stream options (encoding/1 and bom/1) used when the file was compiled and loaded.

  • IMPROVED: More accurate warning report by printing, in most cases, the line numbers where the warning occurs. This change, however, forced warnings to be reported individually instead of grouped by kind.

  • IMPROVED: Compiler checking of current_logtalk_flag/2 and set_logtalk_flag/2 goals.

  • ADDED: Support for predicate_property/2 properties number_of_clauses/1, declared_in/2, defined_in/2, and redefined_from/2. These properties are only available, however, when the source_data flag is turned on.

  • FIXED: Bug in the compilation of modules as objects when the source_data flag is turned on that resulted in missing module properties and also a non-instantiated argument in the number_of_clauses/2 property for the module predicates.

  • FIXED: Implementation of the current_logtalk_flag/2 built-in predicate, ensuring that it returns correct results when called during file compilation and dynamic entity creation.

  • FIXED: Line number reported by the compiler when a syntax error is found.

  • FIXED: Reporting of the coinduction stack when debugging the preflight goals.

  • IMPROVED: Use the Logtalk extension specified in the used adapter file when loading a settings file.

Prolog adapter and integration files

  • IMPROVED: When the LOGTALKHOME environment variable is not defined and we cannot locate the Logtalk installation directory at the usual places, try to use a location relative to the directory where the integration script is found.

  • CHANGED: SWI-Prolog adapter file to make it easier to generate and use .qlf files for the Logtalk source files. See the default settings file for an usage example.

  • IMPROVED: Updated the SWI-Prolog and YAP adapter files to only goal-expand ::/2 calls within modules other than user. Also added goal_expansion/2 rules for optimizing ::/2 calls made from within modules.

  • CHANGED: Set the default scratch directory for SICStus Prolog to the current directory to avoid broken example unit tests due to differences regarding other Prolog compilers in the management of the working directory.

  • UPDATED: CxProlog adapter file with a tentative hack for expanding file system paths.

  • UPDATED: Lean Prolog adapter file to require version 3.7.10 (or later), which implements the missing callable/1 and subsumes_term/2 ISO Prolog standard built-in predicates.

  • IMPROVED: YAP integration files to better hide Logtalk compiler and runtime internal predicates.

  • IMPROVED: Updated the XSB integration files to use index/2 directives for the dynamic predicates implementing the dynamic binding lookup predicate caches.

  • ADDED: File system predicates for decomposing file paths and for converting between Prolog internal file paths and operating-system paths.

  • ADDED: Predicate for converting Prolog dialect specific exception terms into standard exception terms.

  • REMOVED: Auxiliary list and term pretty-printing predicates (the compiler and runtime now use portable, standard-based definitions of these predicates).

Documentation

  • CHANGED: The release notes and most informative text files are now formatted using GitHub Flavored Markdown syntax for easy conversion to e.g. HTML.

  • IMPROVED: Change sets in release notes are now prefixed with the change type, following the example of the SWI-Prolog release notes.

Library

  • MOVED: The unit test framework have been moved into the tools directory.

Tools

  • IMPROVED: The unit test framework can now print entity predicate clause coverage information for the tested entities. In addition, it uses structured message printing for all output, for easy integration with other development tools.

  • IMPROVED: The unit test framework is now more resilient to failed unit tests that redirect the standard output stream.

  • UPDATED: The lgtdoc tool now uses reflection to access all relevant entity information (requires compilation of source files with the source_data flag turned on).

  • ADDED: Protocols for the debugger and lgtdoc tool interfaces to facilitate defining alternative but compatible debugging and documentation tools.

Examples

  • MOVED: The diagrams, help, and profilers examples have been moved to the tools directory.

  • UPDATED: The unit tests of several examples to allow printing of predicate clause coverage.

  • UPDATED: Added an usage example of the meta_non_terminal/1 directive plus the call//N built-in non-terminal to the dcgs example. Based on a Richard O’Keefe post on the SWI-Prolog mailing list.

Installers and installation scripts

  • UPDATED: The MacPorts portfile now turns off the option for building flat packages that was introduced as a new default in recent MacPorts versions.

  • UPDATED: The Windows installer script to generate an integration shortcut for the window-based YAP executable introduced in version 6.3.2.

  • ADDED: RTF versions of the README and LICENSE files and an icon for use on the Windows installer.

IDEs, text editors, and syntax highlighters support

  • NEW: Notes on PDT Logtalk support and configuration parameters.

  • NEW: Notes on paste bin web services that support Logtalk and Prolog syntax highlighting.

  • NEW: Notes on the Ultraviolet syntax highlighting engine.

  • NEW: Notes on the Chocolat MacOS X text editor.

  • CHANGED: Updated the SyntaxHighlighter support to match the contribution to the original software.

OLD RELEASE NOTES FOR LOGTALK 2.x

(with minimal Markdown reformatting)

Corrected a bug in the compilation of Prolog modules as objects when the “source_data” flag is turned on that resulted in a non-instantiated argument in the “number_of_clauses/2” property for the module predicates.

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.

2.44.0 - March 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.

Allow the use of static binding when compiling messages for statically declared dynamic methods where both the method declaration and the method definition are found on static binding entities.

Allow the use of static binding when compiling hook object definitions of the term_expansion/2 and goal_expansion/2 predicates.

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, <>)/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 addition, 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 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.

2.38.0 - December 3, 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 <)/1 (the last one only for the non-ISO config files).

Updated the SWI-Prolog config files with declarations for the proprietary meta-predicates setup_call_cleanup/3, setup_call_catcher_cleanup/4, when/2, and with_output_to/2. Added support for the thread_initialization/1 proprietary directive. Improved parsing of use_module/1-2 directives.

Added a dummy definition for the predicate ‘$lgt_logtalk_prolog_encoding’/3 to the config files of all back-end Prolog compilers that don’t support the encoding/1 directive.

Added predicate sequence/3 to the library object “integer”.

Added predicates append/2 and msort/2 to the library object “list”. Fixed some termination issues with the length/2 predicate on buggy input.

Added aliases foldl/4, foldr/4, scanl/4, and scanr/4 to the library object “meta”.

Added an experimental “logtalk_select.sh” POSIX shell script for switching between installed Logtalk stable versions.

Added a POSIX integration script, “xsb64lgt”, for using Logtalk with the single-threaded, 64 bits version of XSB.

Added a note on a workaround for compatibility issues between GNU Prolog and the contributed XML parser library. Thanks to Nicolas Pelletier for the bug report.

Added a new example, “securemp”, illustrating the safety rules used by Logtalk in the compilation and execution of meta-predicates (as described on the “Secure Implementation of Meta-predicates” PADL’09 paper).

Extended the “constraints” example for SWI-Prolog and YAP illustrating the definition of custom constraint propagators within objects.

Added instructions on how to enable a source code browser when editing Logtalk source files with the Vim text editor (using the Taglist Vim plugin and Exuberant ctags).

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.

2.36.0 - April 9, 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 < _; _) 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.

2.32.2 - July 26, 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 methods for 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. This is 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.

2.32.1 - July 7, 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.

2.32.0 - June 16, 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 settings are 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.

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.

2.31.5 - April 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. Thanks to Victor Noel for the bug report.

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”. Thanks to Victor Noel for the bug report.

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. Thanks to Joerg Schuster for the bug report.

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.

2.31.4 - February 20, 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.

2.31.3 - January 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.

2.31.2 - January 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.

2.31.1 - January 3, 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.

2.31.0 - December 21, 2007

Added a new built-in protocol, “expanding”, declaring goal_expansion/2 and term_expansion/2 public predicates.

Added compiler support for user-defined goal expansion hooks. Changed the implementation of compiler term and goal expansion hooks to use object-defined predicates term_expansion/2 and goal_expansion/2. Changed the compiler option “hook” to accept object identifiers.

Allow a category to explicitly complement an existing object, thus providing functionality similar to Objective-C categories. Added complements_object/2 built-in predicate. Added a new example, “complements”, illustrating the new category functionality.

When constructing a new category from other categories, the relation “extends” is now used instead of the relation “imports”. The relation “imports” is now only used when an object imports a category. Added
extends_category/2-3 built-in predicates.

Modified the built-in predicate define_events/5 to throw an existence error instead of failing when the specified monitor object does not exists.

Updated the Logtalk compiler to convert version numbers to atoms when generating XML documenting files (thus avoiding problems with some Prolog compilers that resulted in version numbers with a large number of fractional digits).

Improved updating of runtime bookkeeping tables when loading source files.

Renamed the predicate property “alias/1” to “alias_of/1” in order to disambiguate its meaning.

Added a new config file, “k6.config”, for the K-Prolog 6.0 beta version.

Updated the B-Prolog config file to recognize mode/1 directives. Added some missing meta-predicate specifications to the config files of XSB and YAP.

Updated the Windows GUI installer to support running Logtalk with CxProlog 0.96.1 and later versions.

Added two new multi-threading examples, “fibonacci” and “hanoi”, and corrected a bug in the recursive creation of threads on the “sorting” example. Updated the “primes” multi-threading example to also support eight threads.

Updated the “hooks” example for illustrating goal expansion hooks in addition to term expansion hooks.

Updated the “engines” example for compliance with the changes made to category relations.

Added syntax coloring support for the new goal_expansion/1, complements_object/2, and extends_category/2-3 predicates to all supported text editors.

Updated the TextMate code snippets to use the TM_FULLNAME variable instead of the deprecated “niutil” command to retrieve the user full name. Thanks to Michael Sheets for the update.

2.30.8 - November 9, 2007

Fixed bug in the compilation of synchronized predicates that breaks Logtalk on single-threaded Prolog compilers.

2.30.7 - November 5, 2007

Updated the multi-threading built-in predicates threaded_notify/1 and threaded_wait/1 to accept lists of notifications.

Added a new read-only compiler flag, “context_switching_calls”, allowing context switching calls to be disabled (they are enabled by default).

Updated the B-Prolog config file to recognize eager_consume/1 directives. Updated the XSB config file to recognize use_subsumptive_tabling/1, use_variant_tabling/1, index/1, thread_private/1, and thread_shared/1 directives. Updated the YAP config file to recognize thread_local/1 directives. Updated the SICStus Prolog config files to recognize volatile/1 directives. Updated the SWI-Prolog config file to recognize thread_local/1, index/1, and hash/1 directives.

Changed the backup directory names generated by the “cplgtdirs.*” shell scripts to not include whitespace characters.

Updated the “xsbmtlgt.sh” integration script to start XSB-MT using the new command-line option “–shared_predicates” (requires current XSB CVS version). Updated the Windows GUI installer to support running Logtalk with XSB-MT.

Added a multi-threading example, “barriers”, of barrier synchronization.

Updated the “functions” example sample queries for compatibility with the ISO Prolog standard regarding representation of float numbers.

Added a workaround for a parsing bug in XSB while compiling the “sicstus” example.

2.30.6 - October 21, 2007

Replaced calls to the proprietary current_thread/2 predicate in the Logtalk runtime by calls to the thread_property/2 predicate as per the ISO DTR on multi-threading predicates. Added a goal_expansion/2 clause to the SWI-Prolog config file to automatically switch between the current_thread/2 and thread_property/2 predicates depending on availability.

Changed handling of the encoding/1 directive by the Logtalk compiler in order to improve compatibility with YAP and SICStus Prolog. Removed from the config files the now obsolete ‘$lgt_set_stream_encoding’/2 predicate definition. Renamed the compiler option “supports_encoding_dir” to “encoding_directive” and changed its possible values to “unsupported”, “full” (used in both Logtalk source files and compiler generated Prolog files), and “source” (used only in Logtalk source files).

Renamed compiler option “underscore_vars” to “underscore_variables”. Renamed compiler option “supports_break_predicate” to “break_predicate”.

Improved the performance of recursive predicate definitions synchronized by mutexes. Explicitly create all mutexes used by an entity at load time for compatibility with XSB. Several changes to multi-threading support in order to improve compatibility with current and forthcoming versions of YAP, SWI-Prolog, and XSB.

Updated the Logtalk compiler for compatibility with both logical and immediate update semantics when compiling synchronized predicates.

Updated the meta-predicate compilation sanity checks to verify the existence of the minimum number of normal arguments in a clause head required by the closure of maximum arity.

Added a workaround for the lack of built-in support for character unbuffered input when using the Logtalk built-in debugger to the config files of ALS Prolog, B-Prolog, Ciao, CxProlog, IF/Prolog, JIProlog, Prolog II+, SICStus Prolog, XSB, and YAP. Thanks to Parker Jones for the bug report.

Updated the YAP config file to auto-detect working Unicode support when setting the “encoding_directive” compiler option.

Updated the XSB config file to auto-detect multi-threading support when setting the “threads” compiler option. Added an integration script (xsbmtlgt.sh) and supporting files for the multi-threaded version of XSB (requires current development version, available from the XSB CVS server).

Added a MacPorts portfile for building MacOS X installer packages.

Added a BOM to the “babel.lgt” UTF-8 file in the “encodings” example in order to improve compatibility with SICStus Prolog.

Updated the library object “random” by replacing the synchronized/0 directive by a synchronized/1 directive listing only the predicates that modify the random number seed.

Added syntax coloring support for the GtkSourceView 2.x text widget (used e.g. on the Gnome’s Gedit text editor and on the MonoDevelop IDE). Removed syntax coloring for the obsolete atomic/1 predicate directive from the support files of Source-highlight, Emacs, SubEthaEdit, jEdit, and Kate. Optimized the regular expressions used in most syntax coloring configuration files of supported text editors.

2.30.5 - September 19, 2007

Added new multi-threading built-in predicates threaded_call/2, threaded_once/2, threaded_exit/2, and threaded_peek/2. These new predicates support the use of threaded call identifier tags in order to link specific threaded_call/2 and threaded_once/2 calls to specific threaded_exit/2 and threaded_peek/2 calls. Extended the “nondet” example in order to illustrate the new functionality.

Changed the implementation of the built-in predicate threaded_exit/1 in order to avoid blocking when its argument is subsumed by the argument of the corresponding threaded_call/1 call instead of being a variant.

Updated the Logtalk compiler to encapsulate resource errors inside error/2 exception terms (as specified in the ISO Prolog core standard).

Corrected a bug in the library object “lgtunit” (wrong arity on two failed_test/2 predicate calls).

Corrected two problems with the “testing” example: a wrong call on the object “dyn_tests” and a missing entry in the “libpaths.pl” file. Removed two pointless dynamic predicate directives in the “buffer” example.

Improved documentation of multi-threading programming and predicate properties. Corrected the reference manual page describing the threaded/0 directive.

Simplified installation scripts by moving shared distribution cleaning code into the “cleandist.sh” script. Updated the “install.sh” script to set the installation prefix to “/usr” on Debian systems. Updated the Linux RPM spec file in order to clean the building directory after the package creation.

2.30.4 - August 22, 2007

Allow the argument of {}/1 calls to be a variable at compile time.

Updated the Qu-Prolog config file to match and require version 8.1 and added a “qplgt” integration script.

Updated the XSB config file to match and require version 3.1 and to take advantage of the compiler option optimize/1 when loading Logtalk generated Prolog intermediate files.

Added a new library object, “lgtunit”, providing preliminary support for writing and running unit tests. Added a new example, “testing”, defining sample unit tests.

Added a new multi-threading example, “threads/tak”, implementing the Takeuchi function (recursive arithmetic).

Updated the “threads/philosophers” example to use notifications instead of a dynamic predicate for representing chopstick availability. Added an alternative implementation using a parametric object. Improved example documentation.

Updated the “benchmarks” example to allow comparisons between calls to imported category predicates and calls to local object predicates.

Updated Emacs support in order to fix problems with the syntax-coloring of some Logtalk built-in predicates and applied a patch contributed by Nicolas Pelletier to workaround a compatibility problem with XEmacs.

Updated jEdit support in order to fix a problem with the syntax-coloring of the :/1 control construct.

2.30.3 - July 9, 2007

Updated the multi-threading built-in predicate threaded/1 to support both conjunctions of goals (akin to and-parallelism) and disjunctions of goals (akin to or-parallelism) as an argument.

Removed the experimental threaded_race/1 multi-threading built-in predicate (its or-parallelism functionality is subsumed by the updated threaded/1 predicate).

Corrected a bug in the implementation of the multi-threading built-in predicate threaded_exit/1 when there are more than one thread running the same non-deterministic goal (the fix ensures that all alternative solutions per threaded_exit/1 call come from the same computing thread). Thanks to Paul Crocker for the suggested bug fix solution.

Updated the sample queries in the “threads/buffer”/SCRIPT.txt” file to match the updated entities in the example.

Updated the “threads/functions” example to use the new version of the threaded/1 multi-threading built-in predicate.

2.30.2 - June 24, 2007

Updated the Logtalk compiler to throw a compilation error when duplicated or conflicting predicate scope directives are found.

Updated the Logtalk compiler to correct a cosmetic glitch when reporting compilation errors.

Updated the Logtalk compiler to check for mismatches between the argument of this/1 calls and the parametric object identifier.

Corrected a bug in the implementation of the multi-threading built-in predicate threaded_ignore/1.

Revamped the “threads/buffer” example to support setting the buffer maximum number of items.

Added a new DCG example, “dcgs/morse.lgt”, for parsing messages in Morse code.

Extended the “parametric” example to illustrate a solution for dealing with inheritance when defining “setter” predicates/methods that return updated object identifiers.

2.30.1 - June 12, 2007

Added a new, experimental control construct, :/1, for calling imported category predicates without using message sending mechanisms.

Added preliminary support for static binding when calling imported category using the new :/1 control construct for categories compiled and loaded using the compiler option “reload(skip)”.

Added a new control construct, < “xmldocs”, “xsl” -> “xslfile”, and “doctype” -> “xmlsref”. No changes to the other flags or flag valid values.

Updated documenting scripts to use system-wide resources from LOGTALKHOME and user-modifiable resources from LOGTALKUSER.

Updated “cplgtdirs.*” shell scripts to create links to the documenting scripts and to the DTD and XML Schema specifications instead of making local copies. Updated the “cplgtdirs.js” Windows JScript script to create a link to the Logtalk manuals.

Changed generation of predicate compiled functors to add an underscore between the original predicate functor and arity (further minimizing the chance of name conflicts).

Improved compilation warning messages (separately handling plural and singular forms).

Improved documentation of Windows JScript installation and integration scripts.

Corrected a bug on the Logtalk built-in debugger on the processing of the abort option at a leashed port (option was ignored instead of aborting the debugging session).

Added an option to choose between a “verbose” or “compact” listing of the default compilation flags at Logtalk startup (defined on the config files).

Improved CIAO integration scripts in order to suppress some (harmless) warnings which are generated at first run.

Updated SWI-Prolog hook file (“swihook.pl”) in order to support Logtalk library notation when loading Logtalk files using the SWI-Prolog consult/1 predicate.

Corrected a bug on the implementation of the built-in method abolish/1 that prevented abolishing of dynamic predicates with arity zero.

Corrected a bug on the “gplgt” shell script generated by the make_gplgt.sh shell script where the value of the LOGTALKHOME environment variable would not be retrieved at runtime.

Removed config file for older versions of XSB (up to 2.6). Renamed the config file for XSB 2.7.1 to simply “xsb.config”.

Consolidated the source files of the “birds”, “errors”, “lpa”, “lo”, “metainterpreters”, “poem”, “relations”, “roots”, and “symdiff” examples into single source files. Updated the “searching” example to take advantage of the uses/2 directive.

Removed outdated documenting shell scripts from the “xml” directory.

Corrected a bug when compiling a source file where the generated Prolog file might not be properly closed when a compilation error occurs.

2.25.3 - September 12, 2005

Consolidated the source files of the examples “bricks”, “dynpred”, “mi”, “parametric”, “points”, “polygons”, “reflection”, “shapes”, “sicstus”, and “viewpoints” into single source files.

Improved documentation on most example source files. Improved “parametric” example by adding a new parametric objects and by illustrating alternative ways of accessing object parameters.

Updated several config files with declarations for some more non-standard Prolog meta-predicates.

Corrected some omissions and typos on the B-Prolog - Logtalk integration instructions.

Small performance optimization for messages and super-calls with not yet cached method lookups.

2.25.2 - August 11, 2005

Updated Logtalk installation and Prolog integration scripts in order to detect a wrongly defined LOGTALKHOME environment variable.

Corrected a bug on the lgt_install.sh and make*lgt.sh shell scripts where the wrong variable was being referenced when testing the existence of the installation directory prefix.

Corrected a bug on the makeall_lgt.sh shell script that failed to properly detect unsuccessful completion of individual Prolog integration scripts.

2.25.1 - August 8, 2005

Added support for using the “source-highlight” package (version 2.0 or later) by Lorenzo Bettini with Logtalk source files.

Several optimizations to the syntax coloring configuration files of most of the supported text editors. Added support for code folding to the Vim, Kate, and TextMate text editors.

Updated the SWI-Prolog shell integration script (make_swilgt.sh) to use either “swipl” or “pl” as the name of the Prolog executable, depending on the host operating system.

Modified the way entity prefixes are generated for compiled code in order to further minimize possible conflicts resulting from the same prefix being used for different entities (bug report and fix by Brian Hulley). Changes to the prefix format are also reflected on the names of the automatically generated XML documenting files.

Updated the lgt2html.* and lgt2xml.* documenting scripts in order to index parametric objects using the notation /.

Corrected a bug on the lgtxml.xsl XSLT file where links to related files pointed to .html files instead of .xml files.

Updated the lgt_install.sh and the make_*lgt.sh shell scripts to check and report invalid installation directory prefixes.

Added a new state-space search problem, “salt3.lgt”, contributed by Paula Marisa Sampaio, to the “searching” example.

2.25.0 - May 23, 2005

Logtalk compiler is now source file-based instead of entity-based. Thus, a source file may now contain any number of entities, without the need of using source metafiles. Therefore, this version drops support for source metafiles and the .mlgt file name extension.

The experimental encoding/1 directive, when used, must be the first term on a source file. Added an entry to the reference manual describing the directive. Improved “encodings” example.

Added a new method, debugging/1, to the “debugger” pseudo-object for querying the system about entities compiled in debug mode.

Improved source file and entity compilation and loading reporting. In particular, when using library notation for source files, the Logtalk compiler now prints the library path containing the source files being compiled or loaded.

Added new shell scripts, makeall_lgt., which run all the make_lgt.* shell scripts in sequence.

Simplified compiler reporting of singleton variables in directives and clauses.

Added an adaption of the “timetables” LPA Prolog++ example.

Updated B-Prolog config file for the new 6.7 #2 version. Dropped support for older versions of B-Prolog.

2.24.0 - April 22, 2005

Added experimental support for a encoding/1 directive for declaring the text character encoding of a source file. This directive is fully based on a directive with the same name and with similar semantics found on recent development versions of SWI-Prolog. For now, this directive only works with SWI-Prolog as most Prolog compilers lack support for dealing with different text encodings. Added new flag “supports_encoding_dir”. Added a new example, “encodings”, of using the new encoding/1 directive.

When a source file contains an encoding/1 directive, the XML documenting files will use the same encoding. When no encoding/1 directive is present, the XML documenting files will assume UTF-8 encoding.

Added new info/1 documenting directive key, “parameters”, allowing the declaration of both parameter names and parameter descriptions. Added new info/1 documenting directive key, “remarks”, allowing general remarks about an entity to be stated. Added new info/2 documenting directive key, “arguments”, allowing declaration of both predicate argument names and predicate argument descriptions. Added new info/2 documenting directive key, “examples”, allowing the representation of predicate call examples.

Much improved and accurate reporting of non-portable predicate calls when using the “portability” flag.

Added a new directory to the Logtalk distribution, “contributions”, which will be used for user-contributed code. On this release, it contains an implementation of the ISO 8601 standard by Daniel L. Dudley, providing a library of useful date predicates.

Added new lgt2xml.* shell scripts for generating (X)HTML indexes of XML documenting files.

Rewritten the lgtxhtml.xsl, lgthtml.xsl, lgtxml.xsl XSLT scripts in order to make it easier to define alternative CSS files for the generated HTML files. Rewritten the lgtpdfa4.xsl and lgtpdfus.xsl XSLT scripts in order to improve appearance of the generated PDF files.

Improved the documentation of the “benchmarks” example and added new predicates for running batches of benchmark tests and for generating lists of known size for the benchmark tests of static code.

Corrected a bug in the lgt2html., lgt2pdf., and cplgtdirs.sh shell scripts which resulted in failed transformations whenever the LOGTALKHOME and LOGTALKUSER environment variables or the output directory contained spaces or accented characters.

Added workaround for Prolog compilers that define operators other than ‘,’/2 that cannot be redefined (such as new B-Prolog 6.7).

Added a Logtalk “clip” file for the TextPad Windows text editor.

Renamed directory “misc” to the more meaningful name “scripts”.

Corrected a bug in the implementation of the built-in database methods asserta/1 and assertz/1 when asserting facts on objects compiled in debug mode.

Corrected a bug in the method leash/1 of the built-in pseudo-object “debugger”, which failed to accept an empty list as a valid argument.

Corrected a bug in the header of the automatically generated XML documenting files when using the XML Schema specification (logtalk.xsd), which could prevented validation when the compiler flag “doctype” is set to “web”.

Corrected a compilation bug where Prolog clauses written outside entities on source metafiles would have their order reversed. Simplified splitting of source metafiles.

Corrected a compilation bug where Prolog clauses written before an entity opening directive would not be copied to the generated Prolog file.

Corrected a bug on the “roots” example in the object “class” which failed to properly test the validity of new object identifiers.

Corrected a bug in the syntax coloring file for the Vim text editor, which resulted in an error message when opening a Logtalk source file for the first time.

2.23.1 - March 7, 2005

Simplified message sending compilation, improving performance of both entity compilation and runtime top-level message sending.

Simplified implementation and improved performance of the built-in method current_predicate/2.

Updated the runtime error handler for top-level ::/2 calls to recognize non-existing predicate exceptions thrown by XSB, SICStus Prolog, CIAO, B-Prolog, and recent development versions of SWI-Prolog. Rewritten the ::/2 predicate in order to minimize the overhead of the catch/3 calls associated with the runtime error handler, thus improving performance.

Expanded the benchmarks example to test performance of the built-in database methods.

Lookup caches are now cleaned before loading a redefined entity in order to avoid potential problems with entity initialization goals containing message sending calls (previous versions cleaned the caches only after entity loading).

When reloading an object, its tables of dynamic predicate declarations and dynamic predicate definitions are now reseted.

Corrected a compatibility problem with the “birds” example due to the use of an operator not available in some Prolog compilers.

2.23.0 - February 21, 2005

Optimized the code generated for local calls to the built-in predicates asserta/1, assertz/1, retract/1, and retractall/1, when the argument is a dynamic predicate declared by a scope directive in the object making the calls.

Added caching of predicate compiled forms for dynamic facts when used with the database built-in methods clause/2, asserta/1, assertz/1, retract/1, and retractall/1, resulting in a significant performance improvement when using an object’s dynamic database. Improved performance of the database built-in methods abolish/1, asserta/1, assertz/1, clause/2, retract/1, and retractall/1 when the cache is not used.

Corrected a bug on the implementation of the built-in methods asserta/1 and assertz/1 that prevented asserting of rules.

Corrected a bug on the implementation of built-in methods retractall/1, retract/1, and clause/2 that allowed access to local dynamic predicates from outside the container object.

Added a runtime error handler for top-level ::/2 calls which tries to deal with exceptions thrown by calling non-existing predicates by translating Logtalk generated internal predicate names to user names.

Print the total number of warnings after a call to the Logtalk built-in predicates logtalk_compile/1-2 and logtalk_load/1-2.

2.22.5 - February 9, 2005

Added scripts for easy integration of Logtalk with K-Prolog. Updated the K-Prolog config file, correcting a show-stopper bug and enabling support for using the “library” notation for loading source files.

Updated JIProlog config file in order to allow smart compilation of source files.

Changed format of preprocessor and runtime dynamic predicates that deal with predicate indicators for better performance.

Simplified implementation of Logtalk built-in methods asserta/1 and assertz/1.

Corrected a performance bug with calls to built-in predicates from objects and categories.

Corrected spurious backtracking occurring on some calls to the built-in predicate define_events/5.

Updated shell script “misc/cplgtdirs.sh” to prevent copy of Logtalk files when the destination directory already exists (thus avoiding overriding any user-modified files when upgrading Logtalk).

Added syntax coloring for the predicate logtalk_library_path/2 to the supported text editors. Updated the syntax coloring file for the TextMate text editor, adding some missing ISO Prolog predicates.

Improved printing of lists of unknown referenced entities, misspelt calls, and singleton variables when compiling source files. Simplified handling of references to unknown entities.

Added workaround for Prolog compilers with broken read_term/3 singletons/1 option.

Updated the Logtalk compiler/runtime and the documentation to always use the expression “compiler flag” instead of “compiler option” for consistency. Other minor documentation improvements.

Corrected a bug with the abolishing of dynamic entities where the clauses corresponding to the alias/3 directive are not being abolished.

Added new predicates ‘$lgt_call’/9 and ‘$lgt_once’/9 to all config files.

Simplified and improved performance of compilation of directives containing predicate indicators.

2.22.4 - January 12, 2005

Simplified method lookup cache tables, resulting in a small message sending performance speedup. Improved method lookup caching for parametric objects. Added support for caching method lookups for parametric objects whose parameters contain cyclic terms.

Added a new category, “assignvars”, to the Logtalk standard library, containing an adaptation of the implementation of logical assignable variables developed by Nobukuni Kino. Added a new example, “assignvars”, illustrating some possible uses of assignable variables in the context of parametric objects.

Simplified compilation of op/3 directives: there is no longer need to repeat the directives both before and inside an entity in order to make the operators global and also use them in the compilation process.

Simplified installation instructions.

Corrected a compiler bug in the code that checks and prints a warning when redefined parametric objects.

Corrected a bug in the built-in predicate abolish_category/1, which failed to delete import relation clauses between the category being abolished and other categories.

2.22.3 - December 30, 2004

Added a configuration file for XSB 2.7.

Corrected a bug where the use of alternative compilation directories would fail the first time the logtalk_compile/1-2 or logtalk_load/1-2 predicates are used for a given file or library.

Corrected a bug in the built-in methods asserta/1 and assertz/1 when asserting facts into an object being debugged, which resulted in wrong execution context information being printed when tracing calls to the asserted facts.

Corrected a bug in the built-in methods asserta/1 and assertz/1 when asserting rules into an object being debugged, which resulted in rule bodies compiled with no information being printed for the rule head when tracing calls to the asserted rules.

Corrected a bug in the dynamic creation of objects, protocols, and categories when the debug flag is on, which resulted in the table of entities being debugged not being updated.

Corrected a bug in the handling of exceptions thrown when using the built-in debugger, which resulted in exceptions always being turned into failures.

2.22.2 - December 24, 2004

Improved performance of dynamic creation and compilation of objects, protocols, and categories.

Improved error-checking code of methods asserta/1 and assertz/1 to prevent asserting of non-callable terms as facts.

Improved error checking for documenting directives (info/1 and info/2).

Improved the XSB integration script (make_xsblgt.sh) in order to use the configuration file and the libpaths file available from the $LOGTALKUSER directory.

Improved installation instructions and installation scripts documentation.

Added documentation to the user manual on describing predicate exceptions using the info/2 directive.

Corrected a bug in the predicate_property/2 built-in method when called with the second argument instantiated to the alias/1 property.

2.22.1 - December 6, 2004

Improved installation instructions. Updated the Windows installation JScript script to add the Logtalk directories “misc” and “xml” to the system PATH environment variable and to reuse the environment variable LOGTALKUSER if already defined.

Added helper batch scripts (misc/cplgtdirs.bat, xml/lgt2html.bat, and xml/lgt2pdf.bat) for easily running the corresponding Windows JScript scripts from the command-line (the two xml/lgt2*.bat scripts run the corresponding *.js scripts stored in the %LOGTALKUSER%/xml directory in order to support user customization).

Updated the lgt2html.* and lgt2pdf.* shell scripts to use the environment variable LOGTALKUSER instead of LOGTALKHOME for finding supporting files, thus allowing for end-user customization of the scripts and their related files.

Added documentation on read-only compiler flags (which are defined in the configuration files) to the User Manual.

Updated the misc/lgt_install.js JScript installer script to workaround a Windows Scripting Host bug which may result in broken shortcuts in the created “Logtalk” program group.

2.22.0 - November 29, 2004

Implemented a notion of library as simply a directory containing source files. Added a new dynamic predicate, logtalk_library_path/2, for specifying library paths. Added a sample file (libpaths/libpaths.pl) for setting library paths for the Logtalk standard library and for all the supplied examples.

Added support for using the notation () with the built-in predicates logtalk_compile/1-2 and logtalk_load/1-2 for compiling and loading source files contained on a library, without the need to first change the current working directory.

Changed the library and the examples loading instructions to use the new notation ().

Improved installation instructions and installation scripts. Added a new environment variable, LOGTALKUSER, for defining the location of the copies of the user-modifiable Logtalk files in a multiple users setup environment.

Added utility predicates to most configuration files for querying and changing the current working directory (needed for the () notation to work).

Corrected a bug in the code that checks for file existence when compiling or loading source files and source metafiles.

2.21.6 - November 15, 2004

Added support for using alternative directories for storing the Prolog files and the XML documenting files resulting from entity compilation. A new read- only flag, “altdirs”, allows the support for alternative directories to be turned on the configuration files of Prolog compilers providing the necessary operating-system access predicates for implementing this feature.

Improved installation instructions and reporting of default compilation flags at startup.

Added a sorely missing “Hello World!” example :-)

2.21.5 - November 2, 2004

Added a new optimization compiler flag, “events”, which can be used to switch off event-driven programming support when not needed, on a per-object basis, resulting in improved message sending performance.

Small performance optimization to the runtime creation of dynamic objects, protocols, and categories.

Updated the error handling code of the built-in predicates create_object/4, create_protocol/3, and create_category/4 in order to throw an instantiation error when called with a non-instantiated argument.

Updated the benchmarks example to calculate and subtract the benchmark loop time in order to print absolute timings for the benchmarked goals.

Updated the Qu-Prolog patching instructions to also convert Logtalk source metafiles.

Fixed a typo on the XSB compatibility notes in the configs/NOTES file.

2.21.4 - October 26, 2004

Corrected a silly bug in the definition of the predicate repeat/1 on the new “benchmarks” example.

2.21.3 - October 25, 2004

Corrected a silly bug in message translation which resulted in a small performance loss. Simplified implementation of message sending predicate ::/2, resulting in a small performance improvement.

Added a new section on message sending performance to the user manual.

Added a new example, “benchmarks”, for helping measuring performance of Logtalk message sending between Prolog compilers and for comparing message sending with predicate calls in plain Prolog and with calls to modules predicates.

Updated the YAP configuration file to hide some of the book-keeping tables of the Logtalk runtime engine and to use statistics/2 instead of cputime/0 for more accurate timings.

Updated the Logtalk shell installation script to create the $prefix/bin directory if it does not exist.

The lgt2pdf.sh and lgt2html.sh shell scripts now use “rm -f” when removing the DTD and XSD files in order to avoid prompting the the user about the file permissions.

Updated the cplgtdirs.sh shell script to make all copied files user writable.

2.21.2 - October 18, 2004

Added support for declaring grammar rule non-terminals as public, protected, private, dynamic, or discontiguous using the notation Functor//Arity. Added support for documenting non-terminals using the info/2 and mode/2 directives.

Added support for a new alias/1 predicate property.

New experimental config file for JIProlog 3.0 (see the configs/NOTES file for details).

Added a mode bundle for the TextMode 1.0.x (MacOS X) text editor providing syntax highlighting, folding, and code snippets for editing Logtalk source files. Corrected a bug in the syntax coloring of the :-/1-2 operator on the SubEthaEdit 2.x text editor.

2.21.1 - September 27, 2004

Added experimental support for a new built-in method, expand_term/2, which allows access to the Logtalk grammar rule translator. Corrected bug in the expansion of +/1 in grammar rule bodies. Optimized code generated for message sending calls in the body of grammar rules. Improved error handling of the built-in methods phrase/2 and phrase/3. Added new section on definite clause grammars to the user manual. Added two new objects to the “dcgs” example, dcgtest and bypass, containing test cases for the Logtalk DCG translator and illustrating some programming techniques with grammar rules.

Corrected a bug in the implementation of the built-in method clause/2 which prevented access to clauses of local dynamic predicates.

Corrected some dead links on the XHTML manuals.

Corrected a bug in the syntax coloring of numbers on the SubEthaEdit 2.x text editor.

2.21.0 - September 14, 2004

Added a new predicate directive, alias/3, which allows the definition of alternative predicate names in order to improve readability of inherited features and to solve conflicts between implemented, imported, or inherited predicates.

Added new example, “aliases”, illustrating the use of the new alias/3 predicate directive for improving readability of inherited features.

Added new example, “diamonds”, illustrating problems and solutions for the “diamond problem” (multi-inheritance conflicts and ambiguities) using the new alias/3 predicate directive.

Allow categories to import other categories, i.e. allow categories to be defined as a composition of other categories. This feature should only be used when extending a category without breaking its functional cohesion (for example, when a modified version of a category is needed for importing into several unrelated objects).

Added new example, “engines”, illustrating importing a category from another category.

Updated the syntax coloring configuration files for the supported text editors for the new alias/3 predicate directive.

Added auto-complete strings for Logtalk methods and for Logtalk and Prolog built-in predicates and directives to the SubEthaEdit 2.x text editor.

Corrected a bug which prevented compilation of metafiles containing parametric entities.

2.20.2 - August 31, 2004

Added a Windows JScript script for installing Logtalk. Improved the Windows JScript scripts used for easy integration of Logtalk with selected Prolog compilers.

Improved user manual section on defining object and category metapredicates and on calling non-standard Prolog built-in metapredicates. Improved the description of some compiler options.

Added some files missing from the “errors” example (which should have been included in the previous release).

Added basic syntax coloring support for the BBEdit 8.x text editor.

2.20.1 - August 19, 2004

Added Windows JScript scripts for easy integration of Logtalk with CIAO and GNU Prolog.

Added encoding attribute (set to UTF-8) to the xsl:output tag in the lgtxml.xsl, lgthtml.xsl, and lgtxhtml.xsl files.

Replaced the Windows JScript scripts lgt2pdf.js and lgt2html.js by their final versions (the wrong ones shipped with Logtalk version 2.20.0).

Updated the “errors” example to illustrate possible conflict errors when using the uses/2 directive.

Updated the RPM logtalk.spec file to use the .tgz archive extension.

2.20.0 - August 16, 2004

Added support for the uses/2 predicate directive (whose semantics is similar to C++ using-declarations). Updated the uses/1 entity directive to accept as argument a single object identifier.

Improved installation instructions for Windows users.

Added four new sample bash shell scripts and Windows JScript scripts for converting XML documenting files to PDF, HTML, and XHTML using several XSL processors.

Added missing namespace to XSL files in order to generated valid (X)HTML files with recent versions of XSLT processors.

Updated the User Manual documentation on converting XML documenting files to other formats.

Removed the texml.xsl XSLT file as the TeXMLatte application it depends on is no longer available.

Added Windows JScript script for copying the Logtalk examples, library, and xml directories to the user directory.

Added Windows JScript scripts for easy integration of Logtalk with ECLiPSe, SWI-Prolog, SICStus Prolog, and YAP.

Added missing extension for source metafiles to the SWI-Prolog hook file.

Corrected a bug in the lgtxhtml.xsl XSLT file where a wrong reference to the Logtalk CSS file is being used in the xml-stylesheet tag.

The iso_initialization_dir/1 compiler option is now a read only flag, defined in the configuration files.

2.19.1 - August 2, 2004

Corrected a bug where entities could not be reloaded if they depend on other, not yet loaded entities.

Corrected a bug where compiler options would not be used when compiling source metafiles.

Corrected several typos on the Logtalk manuals.

2.19.0 - July 26, 2004

Added support for defining more than one entity per file using Logtalk source metafiles (*.mlgt), which the runtime engine automatically splits on single entity source files plus loading and compiling helper files.

Updated the URL used on the automatically generated XML documenting files when compiling entities with the option doctype(web).

Improved error checking when compiling calls to the {}/1 control construct.

Corrected several typos and some outdated links on the Logtalk manuals.

2.18.0 - July 9, 2004

Added caching of method lookups in order to improve message processing performance (including messages to self and super calls). Applied several optimizations to runtime translation of messages in order to further improve performance.

Improved error checking while parsing and compiling messages to self.

Update ECLiPSe config files to compile the Prolog files generated by Logtalk (when compiling source files) in optimized mode instead of traceable mode.

Updated description of patches needed for running Logtalk with XSB, added a shell script for easy integration of Logtalk with this Prolog compiler, and corrected a problem with its corresponding config file.

Added multifile/1 directive to the syntax coloring configuration files of the supported text editors.

2.17.2 - June 14, 2004

Updated the Logtalk compiler to allow compilation of source files which contain only directives and no entity definition.

Simplified loading of library and example entities by using Logtalk source files as loader files.

Some improvements to the documentation, including the QUICK_START file and the User Manual for first-time users, and to the example descriptions.

Corrected a bug in handling of local object operators that are also global operators.

Corrected a bug where dynamic directives are not being generated for dynamic predicates that lack a scope directive or an initial set of clauses.

Corrected a bug where local dynamic predicates would need a private scope directive in order to allow clauses of the predicate to be retracted.

Simplified compilation of dynamic and discontiguous predicate directives.

Added new “logic” example implementing a translator from logic propositions to conjunctive normal form.

Corrected a problem with wrong end-on-lines on some files.

Added a shell script for easy integration of Logtalk with CIAO Prolog.

2.17.1 - June 7, 2004

Added custom handling of specification of predicate exceptions in info/2 documenting directives when writing XML documenting files (declared as “exceptions is [Cond1-Term1, Cond2-Term2, …]”; each pair (Condi, Termi) represents an error condition and its respective exception).

Changed debugger command “e” to print exception terms instead of exiting Logtalk session.

Corrected a compilation error with B-Prolog due to operator priorities.

Corrected a possible problem with the redefinition of loaded entities that define (possibly at runtime) dynamic predicates. All clauses for an entity dynamic predicates are retracted before loading the new entity definition.

Corrected a potential bug when pretty printing terms with variables in the debugger and in the created XML documenting files.

Added four more DCGs examples (“walker movements”, “iterative shell command parsing”, “bill of materials”, and “command language”).

New “puzzles” and “metainterpreters” examples.

Added a mode bundle for the SubEthaEdit 2.x (MacOS X) text editor providing syntax coloring for editing Logtalk source files. Optimized some of the regular expressions in the syntax coloring files for the Kate/Kwrite and Vim text editors.

Removed predicate nth/3 from library entities listp, list, and difflist. Replaced by the predicates nth0/3 and nth1/3. Added new predicates nth1/4 and nth0/4.

Updated the config file for Quintus Prolog to make use of the “files” library.

Added experimental implementations for some Prolog compilers of the library portable protocol for operating system access (systemp.lgt). See the file library/experimental/NOTES for details.

2.17.0 - April 26, 2004

Added built-in debugging support implemented through the definition of a new pseudo-object named “debugger”. Added “debug” compiler option. Renamed library entities “debuggerp” and “debugger” to, respectively, “event_dbgp” and “event_dbg”.

Improved installation instructions for multi-user environments. Added a shell script for installing Logtalk in Unix and Unix-like operating systems. Added a shell script for copying Logtalk xml, examples, and library directories to the user home directory.

Added a logtalk.spec file for building Linux RPMs from sources.

Added a set of shell scripts for easy integration of Logtalk with ECLiPSe, GNU Prolog, Qu-Prolog, SICStus Prolog, SWI-Prolog, and YAP.

Corrected bug in the definition of the pseudo-object “user” that resulted in mixed up metapredicate and type predicate properties.

Removed config files for outdated versions of Qu-Prolog, SWI-Prolog, ECLiPSe, K-Prolog, CIAO, YAP, Amzi! Prolog, LPA Win-Prolog, SICStus Prolog, and XSB.

2.16.2 - April 2, 2004

Corrected a bug in the library category monitor (file library/monitor.lgt) that prevents its compilation.

Changed the possible values of the read-only flag startup_message (defined in the config files) to “flags” (print banner and flag values), “banner” (print only the banner), and “none” (do not print neither the banner nor the flag values). Default value is “flags”.

Updated the “errors” example to illustrate the error messages thrown when trying to redefine Logtalk built-in control constructs.

Corrected a small problem with the Logtalk language specification file for Apple’s Xcode IDE.

Added preliminary support for syntax coloring using the Windows text editor Crimson Editor.

2.16.1 - March 23, 2004

The local built-in method parameter/2 can now be used inside categories (but please read the warnings about such practice on the user manual).

Updated the Logtalk compiler to report an error when the user tries to redefine a message sending or external call control construct inside an object or category.

Corrected a bug in the compilation of metacalls whose meta-arguments are variables.

Removed references to file sax.jar from the scripts used to convert XML documenting files into (X)HTML. Updated scripts html.sh, htmlnt.cmd, and htmldos.bat to use XT 20020426a or later version.

Improved syntax coloring accuracy of built-in predicates and methods for the SubEthaEdit text editor.

Updated config file for Qu-Prolog 6.4.

2.16.0 - March 3, 2004

Logtalk is now distributed under the Artistic License 2.0.

Operators declared inside an entity are now local to the entity, not affecting the global operator table (complying with the Logtalk language specification). Input and output of terms from inside objects and categories now work as expected in the presence of local operator declarations. Added a new example named “operators”.

Updated built-in method predicate_property/2 for returning metapredicate/1 properties for both Logtalk and Prolog metapredicates.

Added support for calls to non-ISO Prolog standard built-in metapredicates inside objects and categories. Added support for the declaration of non-ISO Prolog standard metapredicates in the config files.

Small change to the way the Logtalk compiler reports the compilation of entities. Small optimizations to the compilation of Logtalk source files.

Corrected a bug where calls to Logtalk built-in predicates would be reported as non-portable when the value of compiler option portability is set to warning.

New config file for Qu-Prolog 6.4 (see the configs/NOTES file for details).

Corrected a problem with the syntax coloring of quoted atoms and strings in the SubEthaEdit text editor. Added more accurate syntax highlight for built-in methods and built-in predicates.

Updated the syntax coloring configuration files for all supported text editors to recognize the file extension used by the config files.

2.15.6 - February 9, 2004

Added “xmlspec” compiler option in order to specify the extension (dtd or xsd) of the file describing the XML documenting files specification.

Renamed compiler option “named_anonymous_vars” to the more appropriated name “underscore_vars”. Changed possible option values to “dont_care” and “singletons” (default).

Added XSLT file for converting XML documenting files to XHTML 1.0 Strict files. Set the default encoding of all XSLT files to UTF-8.

Added syntax coloring support for the KDE Kate and Kwrite text editors.

Improved syntax coloring configuration files for VIM, jEdit, NEdit, SubEthaEdit, and Emacs text editors.

Removed outdated support for MacOS X Project Builder and added support for the new MacOS X Xcode developer tool.

Corrected bug in the built-in predicate current_logtalk_flag/2 that prevented some flag values from being returned after using the built-in predicate set_logtalk_flag/2.

Corrected bug in the shapes example (wrong placement of the declaration of the predicate side/1).

2.15.5 - December 30, 2003

Make operator ^^/1 right-associative for consistency with remaining operator declarations.

Added file BIBLIOGRAPHY containing a list of Logtalk publications in BibTeX format.

Added a font-lock file for Emacs providing syntax coloring for editing Logtalk source files.

Added an implementation of the Smalltalk dependent mechanism to the standard Logtalk library.

Updated the config file for ECLiPSe 5.4~5.7 with missing ISO Prolog predicate definitions needed for successful compilation of all entities in the Logtalk standard library.

Updated manual pages to comply with XHTML 1.0 Strict and to provide better navigation.

2.15.4 - July 9, 2003

Corrected a spurious backtracking bug in the DCG rule translator. Added two more examples of DCGs.

New config file for XSB 2.6. Updated Logtalk compiler to compile cleanly under XSB after applying the patch described in configs/NOTES.

Updated SWI-Prolog config file to hide compiled entity predicates (requires SWI-Prolog 5.2.3 or later version). New optional file configs/swihook.pl contains hook code that allows Logtalk entities to be compiled and loaded using SWI-Prolog load_files/2 and consult/1 predicates.

Syntax definition file for the Hydra 1.1 (MacOS X) text editor providing syntax coloring for editing Logtalk source files.

Updated syntax coloring files for jEdit, NEdit, Vim, and TextPad in order to recognize character code constants (0’x) and the DCG operator –>/2.

2.15.3 - June 27, 2003

Updated experimental support for DCG rules to prevent over-simplification of unification goals in the compilation of rules to clauses. Push-back lists can now be used on rule heads.

The compilation mode of an entity (static/dynamic) is now stored in the corresponding entity table (implying recompilation of all entities).

Updated GNU Prolog config file to hide compiled entity predicates.

Updated SWI-Prolog config file for better integration of Logtalk with this compiler.

2.15.2 - April 2, 2003

Experimental support for DCG rules inside categories and objects. Added built-in methods phrase/2 and phrase/3.

Updated GNU Prolog config file to not hide compiled entity predicates in order to avoid incompatibilities with dynamic entities.

2.15.1 - March 8, 2003

New example, msglog, of using events and monitors to record, replay, and print user messages.

Corrected a typo on the jEdit templates that resulted in syntax errors. Corrected wrong year format in info/1 directive in all entity templates. Added missing version info key to jEdit prototype template.

Corrected documentation of built-in local methods self/1 and sender/1. Updated documentation of built-in local methods parameter/2 and this/1.

2.15.0 - February 5, 2003

Changed “authors” key in info/1 directive to “author”.

Corrected documentation of built-in local method this/1.

New geometric shapes example implemented in two versions, one prototype-based and the other one class-based.

Improved support for jEdit text editor by adding a set of programming templates for use with the editor Templates plug-in.

Added basic support for syntax highlighting and programming templates for MacOS X Project builder.

2.14.7 - January 10, 2003

Corrected a bug in the built-in methods asserta/1 and assertz/1 when asserting predicate rules.

The built-in predicates logtalk_compile/1-2 and logtalk_load/1-2 now accept both an entity (an atom) or a list of entities (a list of atoms).

Optimized the code generated when compiling or asserting clauses for dynamic predicates.

Optimized protected inheritance performance on some Prolog compilers.

2.14.6 - December 31, 2002

Corrected a bug where the opening directive of an object that, simultaneously, implements a protocol, imports a category, instantiates a class, and specializes a superclass, will not be recognized.

2.14.5 - December 20, 2002

Simplified dynamic table of predicate declarations by removing two redundant arguments.

Corrected a bug where sending messages such as true/0 or !/0 to an unknown object succeeded instead of throwing the correct exception.

Simplified the code used to generate links in the lgtpdfa4.xsl and lgtpdfus.xsl XSLT files.

2.14.4 - November 5, 2002

Removed definition of deprecated built-in predicate logtalk_version/3.

Show flag names when printing at startup the default flag values.

Small change to messages printed on console with smart compilation of source files turned on.

Updated YAP 4.3.x config file to use the YAP “system” library to access the operating system for time, date, and file properties (enabling smart source code compilation).

Updated the lgtpdfa4.xsl and lgtpdfus.xsl XSLT files to workaround a bug in the PassiveTeX 1.21 XSL:FO processor.

2.14.3 - September 16, 2002

New compiler option, doctype, to set the doctype reference (if any) in the XML documenting files. Default value is “local” for backward compatibility. Updated the user manual section on compiler options.

The Logtalk built-in predicate logtalk_version/3 should be considered deprecated (use current_logtalk_flag/3 instead). All references to this predicate have been removed from the manuals.

Updated the jEdit syntax coloring config file for the new jEdit 4.1 version.

Updated the lgtpdfa4.xsl and lgtpdfus.xsl XSLT files for compatibility with the XSL:FO processors Apache FOP 0.20.4, PassiveTeX, and RenderX and with the XSL W3C Recommendation of October 15, 2001. Updated the pdf.bat and pdf.sh scripts to reference the latest version of the Apache FOP processor (0.20.4).

Changed the shell scripts html.sh and pdf.sh for compatibility with the sh, bash, and zsh shells.

2.14.2 - August 26, 2002

Calls to built-in method parameter/2 are now compiled inline, improving call performance.

Updated Logtalk compiler to clean temporary compilation predicates after compiling an entity instead of only before compilation.

Updated YAP 4.3.x config file for better Logtalk integration by hiding all internal compiler, runtime, and compiled entities static predicates.

Updated GNU Prolog config file for better Logtalk integration by hiding all internal compiler, runtime, and compiled entities predicates.

Updated the XSLT conversion scripts lgtxml.xsl and lgthtml.xsl to correct some HTML conformance errors in the generated pages.

Corrected some XHTML conformance errors in the manual pages.

2.14.1 - July 31, 2002

New Windows NT script and updated Unix shell script for batch converting XML documenting files to HTML. Both scripts also generate an index.html file containing links to all converted XML documenting files.

Corrected wrong XHTML DOCTYPE declaration in manual pages.

2.14.0 - July 26, 2002

Renamed all compiler and runtime internal predicates and all auxiliary predicates in the config files to start with a “$” character.

New compiler option, code_prefix, to set a prefix for all Prolog code functors generated by Logtalk when compiling entities. Default is ‘’.

New compiler option, named_anonymous_vars, that instructs the compiler to interpret variables that start with an underscore as anonymous variables (and to not report them as singleton variables). Default value is “off”.

Directive info/2 was wrongly declared as a entity directive instead of a predicate directive.

Converted all manual pages to XHTML 1.0 format. Corrected a wrong link in the reference manual. Replaced GIF images by PNG versions.

Updated BProlog 6.x config file to workaround the new 6.2 built-in predicate ::/2 that conflicts with the same named Logtalk message sending operator.

Removed call to the obsolete built-in predicate nodbgcomp/0 from all ECLiPSe config files.

2.13.0 - June 15, 2002

Logtalk now outputs Prolog code using write_canonical/2 instead of write_term/3. Goals are better portability of the generated Prolog files and avoid issues with clauses with long bodies for Prolog compilers that use a term print depth limit to prevent problems with cyclic terms.

Added report of default flag values at Logtalk startup.

Logtalk now prints a warning when redefining parametric objects.

Removed need of an abort/0 predicate from the Logtalk debugger example. Removed any definition of this predicate from the config files.

Added missing definitions for some ISO built-in predicates to the Amzi! Prolog 6.2.2 config file.

2.12.0 - May 25, 2002

New read-only Logtalk flag “version”. Corrected exception term generated when trying to modify a read-only flag using the set_logtalk_flag/2 built-in predicate.

Updated config file for OpenProlog 1.1b5.

New config file for ECLiPSe 5.4.

Renamed config files for CIAO 1.7 (beta of 1.8) to “ciao_aux18.config” and “ciao18.config”.

Updated config file for Amzi! Prolog 6.2.2.

New example of using some of the built-in database handling methods (dynpred).

Syntax configuration files for jEdit 4.0, VIM 6.1, NEdit 5.2, and TextPad 4.5 text editors providing syntax highlighting for editing Logtalk source files.

2.11.0 - April 22, 2002

Added a “smart compilation” feature to the Logtalk compiler, controlled by a “smart_compilation” flag. Only available in Prolog compilers that provide access to file modification dates.

Added a “startup_message” flag to control printing of the Logtalk banner at startup.

Reworked Logtalk pre-processor compilation and loading reports. Compiler option “report” now toggles between normal reporting (as specified by the other flags) and silent compilation/loading of source files.

2.10.0 - April 5, 2002

Scope of object asserted predicates for which there is no declaration is now a function of the context instead of always being declared public. Asserting in this, the predicate is declared private, asserting in self, the predicate is declared protected, otherwise the predicate is declared public.

Throw an error if a category contains clauses for dynamic predicates.

Updated documentation on categories and built-in methods for database handling.

Retracting all clauses for a dynamic predicate from an object now allows an inherited definition to be called when sending the corresponding message. In previous versions the message just failed.

Added missing entries for the built-in predicates current_logtalk_flag/2 and set_logtalk_flag/2 to the Logtalk compiler built-in predicates table.

Updated config file for Amzi! Prolog 6.1.74.

Updated notes on patching XSB to work with Logtalk.

2.9.3 - February 9, 2002

New current_logtalk_flag/2 and set_logtalk_flag/2 built-in predicates.

Updated documentation on new built-in predicates.

Renamed SWI-Prolog config file swi330.config to swi.config.

Renamed config file predicate lgt_default_compiler_option/2 to lgt_flag/2.

New XSL style-sheets and shell scripts to convert Logtalk XML entity documenting files to PDF format using XSL Formating Objects.

2.9.2 - January 4, 2002

The Logtalk compiler can now print a warning when compiling source files that use non-ISO defined built-in predicates using a new portability/1 compiler option. Updated the relevant sections of the user manual and the errors example.

Corrected a compiler bug where the entity relation tables only recorded the last entry per entity relation type.

Updated config file for CIAO 1.7#162.

2.9.1 - December 5, 2001

Logtalk compiler now prints a warning when redefining or replacing an existing entity.

Corrected a compiler bug in the error checking code for the info/1 and info/2 directives.

Changed the order of object loading in the “mi” example to avoid spurious warning messages.

Added a new problem (“bridge”) to the “searching” example. Improved “performance” monitor to give correct reports on alternative solutions. Corrected a bug in the “water jug” state space example.

2.9.0 - October 22, 2001

Added config files for CIAO Prolog 1.7p115 and B-Prolog 6.0.

Compiling and loading an entity that contains references to unknown entities (by default) prints a warning. Updated user and reference manuals.

Rewritten all the compiler warning/error code and output messages.

Changed compiled code functors postfixes from “_sdcl” and “_sdef” to “_idcl”and “_idef” (implies recompilation of all objects, protocols, and categories).

Changed all occurrences and references to the term “entity_scope” to “scope”.

Removed some redundant productions from the Logtalk grammar.

Updated documentation on the xml directory. Renamed some of the .xsl files. Added sample scripts to batch convert .xml files to .html files.

Added a new loader utility file, all.loader, to load all library files loaded by the other loader files.

Started work on documenting the Logtalk pre-processor/compiler source file.

New “errors” example. Updated the “inheritance” example.

2.8.4 - March 9, 2001

Updated config files for BinProlog 8.0, K-Prolog 5.01, XSB 2.3, and Amzi! Prolog 4.103~5.0.

New config file for Amzi! Prolog 6.1 beta.

Corrected an incomplete entity definition in the Logtalk XML DTD. Rewrite the Logtalk XSLT files for improved compatibility with XSLT processors regarding handling of whitespace.

A first cut of a XML Schema for the Logtalk XML documentation files (file xml/logtalk.xsd).

Small improvements to the documentation.

2.8.3 - November 21, 2000

Corrected a bug where sending a message for a built-in method to an unknown object fails instead of generating the expected exception.

Put some occurrences of atoms public, mode, and type between ()’s to avoid compilation errors in BinProlog 8.0 and other Prolog compilers that declare these atoms as operators.

Corrected the definition of the state space of the “Missionaries and Cannibals” problem in the “searching” example that resulted in some wrong solutions.

2.8.2 - November 5, 2000

New .xsl file to convert .xml files to TeXML files.

Fixed a problem with explicit compilation options being correctly parsed but not processed.

Corrected a bug regarding default init options definition for the points, polygons, and bricks examples. Updated category initialization in roots example.

2.8.1 - October 28, 2000

New config file for K-Prolog 5.0.

Improved compiler error detection and reporting of invalid directives and clauses.

Corrected a problem with some Prolog compilers where compiling a file containing syntax errors may not close the file after the errors are reported.

Many small improvements to all documentation.

Small improvements to the .xsl files and to the output of .xml files.

2.8.0 - October 1, 2000

I have found just a few days ago that I have uploaded to the Logtalk web server a development version of Logtalk 2.7.0 instead of the final one! To avoid confusions I decided to release a new version.

Changed implementation of the logtalk_compile/1-2 and logtalk_load/1-2 predicates to only accept a list of entities instead of either an entity or a list of entities, simplifying and improving the performance of these predicates. Improved error reporting for the logtalk_compile/1 and logtalk_load/1 predicates. Updated relevant sessions in the user and reference manuals.

Simplified the implementation of the following predicates, by sharing the error checking code with the corresponding extended versions: implements_protocol/2, imports_category/2, instantiates_class/2, specializes_class/2, extends_protocol/2, and extends_object/2.

Completed some missing library file dependencies documentation in some examples.

New version of the QUICK_START help file. Updated tutorial.

2.7.0 - August 24, 2000

First release of the Logtalk standard library of objects, protocols and categories.

Rewritten all examples to use the new Logtalk standard library.

New logtalk_load/2 and logtalk_compile/2 Logtalk built-in predicates, accepting a list of compiler options. See the User and Reference Manuals for details.

New XSLT file for viewing .xml files in Microsoft Internet Explorer 5.5 for Windows after installing the latest Microsoft XML Parser Preview Release. Small improvements in all XSLT files.

Starting with this version all config files need to provide a definition for the compare/3 predicate if it is not built-in in the corresponding Prolog compiler. Also, default Logtalk compiler options are now also set in the config files using the lgt_default_compiler_option/2 predicate.

Updated config file for CIAO 1.6p1. See the configs/NOTES file for details.

2.6.2 - July 4, 2000

Improved performance and error checking for the built-in predicates create_object/4, create_protocol/3 and create_category/4.

Updated config file for BinProlog 7.83.

Many small updates to all documentation.

New PDF versions of the documentation formated for printing (with page numbers, table of contents and index)are now available in both A4 and US letter formats.

2.6.1 - May 5, 2000

Modified the structure of the automatically generated XML documenting files to improve XSL translation performance. Added a new, more standard compliant, XSL file to generate HTML files and renamed the old one to ie5.xsl. See the xml/NOTES file for details. Corrected an error in the logtalk.css CSS file.

Modified the definitions of predicates lgt_file_extension/2 and lgt_file_name/2 in all config files.

Updated all the user manual sessions related to automatic documentation.

Updated all HTML documentation for future XHTML 1.0 conformance.

Start adding documenting directives to most examples.

2.6.0 - April 27, 2000

Added support for documentation of objects, protocols, and categories, using automatic generation of XML files.

Added info/1 and info/2 directives for documenting objects, protocols, categories, and predicates. Added definition of documentation file name extension and default file names for the DTD and XSL files to the config files.

Improved error checking for the built-in predicates create_object/4, create_protocol/3 and create_category/4 to also detect invalid entity identifiers.

Updated the user and reference manuals to describe the new automatic documenting features.

Updated all HTML documentation to conform to HTML 4.01 strict standard.

Corrected some wrong cross-reference links and titles in the reference and user manuals HTML pages.

PDF versions of the manuals and tutorial are now available in both A4 and US letter formats.

Corrected two errors in the searching example, one in the definition of the farmer problem state space and the other when backtracking over performance reports.

2.5.2 - March 7, 2000

Updated manuals to clarify some limitations of declaring and defining dynamic predicates inside categories and documented a way of using the built-in local method this/1 to access object parameters.

Removed references to parametric categories from the Logtalk documentation (at runtime we can only access object parameters, not category parameters).

Corrected two wrong declarations of built-in methods (forall/2 and retractall/1) in the Logtalk pre-processor.

Corrected bug where predicates declared in dynamic entities may have a “static” instead of a “dynamic” property.

Corrected a bug in category compilation that prevented a dynamic category from being abolished. Speedup predicate definition lookups for categories.

2.5.1 - February 18, 2000

Two new examples: birds, a bird identification expert system adopted (with permission) from an Amzi example, and viewpoints, a set of prototypes showing how to do property sharing and value sharing in Logtalk.

Renamed config file yap421.config to yap430.config to match the name of the new YAP 4.3.0 public release (named 4.2.1 while on beta testing).

Partial config file for Trinc Prolog R3.

2.5.0 - December 29, 1999

The Logtalk pre-processor now accepts arbitrary clauses and directives to appear in a file before an opening entity directive. The clauses and directives are added unchanged to the compiled file.

Improved performance for all kinds of message sending.

Two new examples: reflection, showing how to implement a simple class-based reflective system, and symdiff, showing how to use parametric objects to implement symbolic expression differentiation and simplification.

Updated config file for the beta 8 release of SWI-Prolog 3.3.0.

2.4.0 - December 1, 1999

Logtalk is now an Open Source project, available under Perl’s Artistic license.

Two new examples: instmethods, illustrating the use of instance defined methods, and classvars, showing how to implement class variables.

Updated Logtalk grammar to explicitly allow for user-defined types in mode/2 directives.

New config files for SWI-Prolog 3.3.0, SICStus Prolog 3.8 and CIAO Prolog 1.4p0 (incomplete).

Updated config file for B-Prolog 4.0.

Updated config file for GNU Prolog to use the new call_with_args() built-in predicate added in version 1.1.0.

Updated config file for YAP Prolog to use the new call_with_args() built-in predicate added in version 4.2.1.

2.3.1 - September 22, 1999

Logtalk pre-processor updated to only report one warning per redefined Logtalk or Prolog built-in predicate.

Changed some occurrences of atom “public” to “(public)” in compiler/logtalk.pl file to avoid syntax errors in Prolog compilers (like BinProlog) that define “public” as an operator. Also put some terms between ()’s to avoid syntax errors with ALS Prolog 3.1

Update config file for ALS Prolog to work with version 3.1.

Updated configs/NOTES file include a workaround to use Logtalk with XSB 2.0, some guidelines on how to write loader utility files for BinProlog 7.50, and a bug in ALS Prolog 3.1 that affects Logtalk.

2.3.0 - September 12, 1999

Metapredicate information is now stored with the other predicate properties, instead of being discarded after compiling the clauses of a metapredicate. Added predicate property metapredicate/1. It is now possible to assert clauses for dynamic metapredicates.

Corrected a bug in the processing of metacalls in pseudo-object user.

Corrected a bug in the implementation of private inheritance. Improved performance of protected inheritance.

Corrected failure of processing initialization/1 and op/3 directives in create_object/4, create_category/4 and create_protocol/3 built-in predicates.

Corrected a bug when calling private static category predicates from importing objects. Simplified code generated for categories.

Rewrite code for the built-in method current_predicate/1 to avoid duplicated or wrong results when overriding predicate declarations and to ensure that all possible argument type errors are detected.

Changed compilation of classes that do not instantiate any (meta)class in order to throw the correct exception when a message is sent to them.

Changed compilation of root objects (that do not instantiate, specialize or extend other objects) so that calls to “super” (^^/1) fail (as they should) instead of generating a “predicate does not exist” error message.

Changed implementation of “super” calls (^^/1) to avoid a potential endless loop problem when using these calls from the inheritance root object of a reflexive class-based systems.

Pre-processor now checks for callable and object identifier errors. Runtime now checks for non-instantiated messages.

Added new example (inheritance) about public, protected and private inheritance.

Updated metapredicates, lo, kernel, and types examples. Most of the code in the last two examples is being updated to form the basis of an upcoming Logtalk standard library.

Small changes in the pre-processor/runtime code for compatibility with ECLiPSe 4.2.2. Updated config files for this Prolog compiler.

Rewrite some predicates in the config files for SWI-Prolog and LPA Mac & WIN Prologs for improved performance.

New tutorial session about events and monitors.

Updated documentation to match the changes made in this version.

2.2.0 - July 10, 1999

Implemented public, protected and private object inheritance, protocol implementation and category importation.

New Logtalk built-in predicates instantiates_class/3, extends_object/3, extends_protocol/3, specializes_class/3, imports_category/3 and implements_protocol/3. The third argument returns the relation scope.

Pre-processor now checks most directive errors.

Changed ^^/1 (super call) implementation to only allow the use of a single predicate call for argument and to retain the original sender of the message (see the updated sicstus example).

Fixed bug that prevented directives with a variable number of arguments (like dynamic(), public(), uses(), …) being recognized.

Changed definition of predicate read_term/3 in the configs files of Amzi!, Aquarius, Arity, Eclipse, IC, K, LPA Mac&WIN, Master and XSB to always instantiates the singleton variables list to the empty list. Needed to prevent backtracking problems in logtalk_load/1 and logtalk_compile/1 predicates.

Removed choice-point in processing metacalls in predicate definitions.

A banner with the Logtalk version is printed after loading the runtime/ pre-processor.

Removed variables example. The category attributes is now part of the kernel example. Corrected some harmless syntax errors in directives in kernel/attributes.lgt, kernel/monitor.lgt and miscellaneous/queens.lgt.

Changed name of blocks example to bricks and object “block” to “brick” in order to avoid problems with some Prolog compilers that use the atom “block” for operators or built-in predicates.

2.1.0 - May 11, 1999

Fixed some bugs in the definition of the pseudo-object user when sending the message predicate_property/2.

Renamed config file for Calypso to GNU Prolog.

New config file for LPA WinProlog 4.0.

Corrected the omission in the documentation of the Logtalk grammar of the built_in entity property.

New tutorial pages about building reflective class-based systems.

Modified pre-processor to compile throw/1 as a control structure to ensure compatibility with the GNU-Prolog compiler.

Modified pre-processor to ensure compatibility with Prolog compilers that use immediate update semantics instead of the ISO logical database update.

Improved simplification of compiled object and category clauses.

Rewrite and clean up pre-processor code for better compiler performance.

Several updates to the examples files.

Changed all example loader files to wrap the call to logtalk_load/1 inside an initialization/1 directive for ISO standard compliance.

2.0 GM - February 9, 1999

Removed some redundant choice-points that are being created when compiling Logtalk entities.

Small compilation speed optimizations.

Logtalk compiled files now contain the declarations for the message sending operators to ensure compatibility with some Prolog compilers.

Changed the way Logtalk pre-processor writes directives to ensure compatibility with some Prolog compilers. Corrected a bug in the processing of the op/3 directive.

Updated PrologII+ config file for version 4.5.

Changed the definitions of catch/3 and throw/1 in the config files for LPA Prolog compilers.

New config file for MasterProlog 4.1; removed config file for the old BIM Prolog 4.0.

Corrected an error in the config file for OpenProlog in the definition of the write_term/3 predicate.

Added a safer definition for write_term/3 predicate in the config
files for Amzi, Aquarius, Arity, Eclipse, IC, K, LPA Mac, LPA Win, and XSB Prolog compilers.

Added a QUICK_START file.

2.0 Beta 3 - February 1, 1999

Closed some encapsulation holes in the implementation of super calls.

Changed Logtalk pre-processor to use write_term/3 instead of write/2 and writeq/2 to workaround some compatibility problems with some Prolog compilers.

Changed mode operators priority and type to be compatible with the ISO standard.

Modified definition of predicate read_term/3 in the config file for Amzi compiler to return the atom end_of_file instead of ‘!EOF’ at the end of a file (this prevented Logtalk to complete compilation any file under this compiler). Improved detection of built-in predicates while compiling.

Removed config file for wamcc. This compiler have been replaced by Calypso (developed by the same author).

Updated K-Prolog config file for version 4.50.

Improved documentation of template config file.

Added SCRIPT files to the kernel and types examples.

Updated Tutorial and User and Reference Manuals.

New end user license.

2.0 Beta 2 - November 16, 1998

Built-ins logtalk_compile/1 and logtalk_load/1 updated to match the documentation regarding thrown errors and to accept a list of entities to compile/load.

Modified the examples loader utility files to make only a call to logtalk_load/1 by using a list of entities. This should make it easy to modify these files for compilers that don’t support arbitrary queries in a file.

Logtalk runtime no longer tries to catch some of the errors thrown by ::/2.

Added to all config files a Logtalk predicate to check if a file exists in the current working directory (used by the logtalk_load/1 and logtalk_compile/1 Logtalk built-in predicates).

New configs files for the K-Prolog 4.14 and Calypso 1.0b6 Prolog compilers.

Completed the config file for Open Prolog 1.03d38 (with the exception of lgt_current_date/3 that still have a dummy definition).

Added a missing definition for Logtalk predicate forall/2 to the config file for Prolog II+ 4.4.

Modified Logtalk pre-processor/runtime to avoid syntax errors when running on Open Prolog or Calypso and to remove some redundant choice-points that are being created when compiling categories and protocols.

Modified some examples that use operators to avoid syntax errors in some Prolog compilers.

Modified the implementation of the built-in method predicate_property/2 to avoid duplicate answers and to throw an instantiation error if the first argument is not bound.

Modified definition of the pseudo-object user to hide Logtalk pre- processor predicates from the current_predicate/1 built-in method and to ensure that the predicate_property/2 built-in method returns Logtalk defined predicate properties for built-in Logtalk and Prolog predicates.

Modified Prolog code generated by the pre-processor to further minimize possible conflicts with user defined predicates.

Added a lgt_predicate_property/2 predicate to the config files to improve Logtalk portability.

Updated Tutorial and User and Reference Manuals.

2.0 Beta 1 - October 18, 1998

Added basic support for implementation multi-inheritance.

Logtalk pre-processor updated to try to detect misspelt local predicate calls.

First public beta.

2.0 Alpha 1 - July, 1998

First release for registered users.