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 Graphvizbox
shape for Prolog modules instead of atab
, which is now only used for directories and libraries. -
REMOVED: Deprecated
lgt2svg.js
script from thediagrams
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 newlogtalk::message_prefix_file/6
hook predicate to support VSCode displaying warnings and errors augmented with explanations. -
UPDATED: The
help
tool for the newlogtalk::message_prefix_file/6
hook predicate. -
FIXED: The
diagrams
tool to also generate aninstance/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 directiveinfo/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
andLOGTALKUSER
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 thetutor
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
anduses/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
andreexport/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
, andmultifile/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 thetutor
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 thep
(print) port command. -
FIXED: Typos in the
mode/2
directives for thedebuggerp
protocollogging/3
andnolog/3
public predicates. -
FIXED: Typo in the
info/2
directive for thetutor
objectexplain//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 itsapply
module.
Tests
-
CHANGED: Tests for the Prolog standard
initialization/1
directive to not depend on support for theensure_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
andsetof/3
built-in predicates. -
ADDED: Tests for the Prolog standard
write_term/2-3
built-in predicates support for theportrayed/1
option implemented by most systems. -
ADDED: Tests for the Prolog de facto standard
print/1-2
built-in predicates and theportray/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
anddeprecated
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 andcall/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 theinfo/2
predicate directive for documenting predicate fail conditions. Adopted from ECLiPSe similarfail_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 usinggit 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 theexpanding
protocol predicates directly instead of using theexpand_term/2
andexpand_goal/2
built-in methods. -
CHANGED: The library object
hook_set/1
to call theexpanding
protocol predicates directly instead of using theexpand_term/2
andexpand_goal/2
built-in methods. -
ADDED: Predicates
delete_directory_and_contents/1
anddelete_directory_contents/1
to theos
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-Prologunicode
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 fortest/2-3
test dialects as facts. -
ADDED: Requirements section to the documentation of the
help
andlgtdoc
tools. -
ADDED: Support to the
packs
tool for installing and updating packs from local archives. -
ADDED: Support to the
packs
tool forgpg
encrypted pack and registry archives. -
ADDED: Support to the
packs
tool to usewget
in alternative tocurl
. -
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 selectedlgtunit
,make
, andpacks
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 newfails_if
key of theinfo/2
predicate directive. -
FIXED: The
dead_code_scanner
tool to avoid false positives when checking predicate aliases declared inuses/2
oruse_module/2
directives. -
FIXED: The
dead_code_scanner
tool to not report the user-definedcoinductive_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 extratar
options in thepacks
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 thelgtunit
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 fromcyclic_term
toacyclic_term
. -
CHANGED: The exception term when trying to define a predicate inside a protocol to use a permission type of
predicate
instead ofclause
. -
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 aresource_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
, andpermission_error/3
built-in methods. -
IMPROVED: Handbook section on the
mode/2
predicate directive. -
IMPROVED: Handbook section on lambda expressions.
Tools
-
CHANGED: The
lgtunit
toolrun_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 newconsistency_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
, andterm_variables/2
built-in predicates. -
IMPROVED: Tests for the
(=..)/2
,abolish/1
, andfunctor/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
andtrivial_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
andMANPATH
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 thecreate_protocol/3
,create_object/4
, andcreate_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
ormode/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 todont_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
toollgtenv
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
andMANPATH
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
andcatch/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
andphrase/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
andoptimize
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 theContext
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 theassertion/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 theatomic_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
objecttest/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 auxiliarylgtunit
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 thebest_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 avoidinstall-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 processinginclude/1
directives that can be intercepted by tools. -
CHANGED: Renamed the
logtalk
objectdebug_handler_provider/1
predicate todebug_handler/1
and thedebug_handler/2
predicate todebug_handler/3
. -
ADDED: New
activate_debug_handler/1
,deactivate_debug_handler/0
, andactive_debug_handler/1
predicates to thelogtalk
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
andcreate_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 theclean
flag tooff
. -
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 thetypes
library.
Tools
-
CHANGED: The
debugger
andports_profiler
tools for the new debug handler predicates. -
ADDED: New
start/0
andstop/0
predicates to theports_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 thetutor
tool. -
UPDATED: The
debugger
objectdebug/0
andtrace/0
predicates to activate the object as the current debug handler provider. Updated also thenodebug/0
predicate to deactivate thedebugger
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
predicatecheck
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
andlgtdoc
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
andlgtdoc
tools. -
FIXED: The
wrapper
reporting of missingmeta_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
, andcode_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 valuewarning
. -
ADDED: Object and category
alias/2
property for object and module aliases declared using theuses/1
anduse_module/1
directives. Also added the alias propertiesobject
,module
, andpredicate
. -
ADDED: Object and category
declares/2
,defines/2
,alias/2,
,calls/2
,updates/2
,includes/3
, andprovides/3
properties now include an entity and predicatelines/2
property. -
FIXED: Bug where the entity properties
includes/3
andprovides/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
andbricks
examples. -
FIXED: The SICStus Prolog specific
constraints/sicstus
example to not depend on the defaultdouble_quotes
flag value. -
FIXED: The SWI-Prolog specific
constraints/swipl
example to not depend on the defaultdouble_quotes
flag value. -
FIXED: The SWI-Prolog specific
constraints/swipl
example to always load theknight
object. -
FIXED: The SWI-Prolog specific
pengines
example to not depend on the defaultdouble_quotes
flag value.
Tests
- ADDED: Additional tests for the Prolog standard
(=..)/2
andis/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 ofFormat+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
librarydate_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 thezoom(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 newcompatible/1
boolean option for theinstall/4
,update/3
, andrestore/2
predicates (default istrue
) 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 thezoom(true)
option. -
ADDED: New
diagrams
toolrecursive_relations/1
boolean option (default isfalse
) to output recursivecalls
links in predicate cross-referencing diagrams. -
ADDED: New
diagrams
toolversions/1
boolean option (default isfalse
) to print the Logtalk and backend version data. -
ADDED: New
diagrams
toolpredicate_url_target_format/1
option (default issphinx
) 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 theexclude_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 theomit_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 thedead_code_scanner
tool to avoid false positives when reporting non called predicates. -
ADDED: Implemented the object and category
updates/2
propertyalias/2
andnon_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 inuser
. -
FIXED: The compiler to not create object and category
calls/2
properties for built-in database predicate calls updating predicates inuser
. -
FIXED: False positive missing predicate linter warnings in
logtalk_make/1
calls for thecheck
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
andupdates/2
properties missing thenon_terminal/1
predicate property and wrongly specifyingas/2
instead ofalias/2
predicate property.
Library
-
CHANGED: No longer require arbitrary term generators to have a type-checker.
-
CHANGED: The
type::check/2
and thearbitrary::arbitrary/2
predicates are now also declared as meta-predicates to support new meta-types. -
REMOVED: The
types_frequency/1
type from thetype
library (use instead thetypes/1
type for type-checking). -
ADDED: New
(::)/2
andconstrain/2
types to thetypes
andarbitrary
libraries. This(::)/2
type allows using object public predicates as scoped type-checkers, generators, and shrinkers. Theconstrain/2
type allows constraining a base type using a closure. -
ADDED: New
transform/2
type to thearbitrary
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 thearbitrary::shrink/3
predicate. -
IMPROVED: Linter warnings for calls to the
list::append/3
predicate. -
FIXED: Bugs in the
arbitrary
libraryshrink/3
predicate definitions for some of the pre-defined types that could result in non-terminating sequences. -
FIXED: Protect
arbitrary
libraryshrink/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 predicatesfull_device_path/1
andread_only_device_path/1
.
Tools
-
CHANGED: The
diagrams
tool interpretation of theexcluded_directories/1
option to exclude also all sub-directories of the excluded directories. -
CHANGED: The
lgtdoc
tool interpretation of theexcluded_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 theverbose(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 inuses/2
oruse_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 inuses/2
oruse_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
portlearn_with_timeout/4
predicate definition.
Contributions
-
FIXED: Unused predicate warnings when analyzing the
pddl_parser
,verdi_neruda
, andxml_parser
contributions using thedead_code_scanner
tool. -
FIXED: Linter warnings for the
verdi_neruda
contribution with backends not providing astatistics/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
, andpeek_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
andengines
flags tosupported
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 predicatesoperating_system_name/1
,operating_system_machine/1
, andoperating_system_release/1
. -
ADDED: New
compound(Name,Types)
andtypes_frequency(Pairs)
types to thetypes
andarbitrary
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
, andteam
multi-threading examples by using explicit assertions. -
IMPROVED: Portability of the
whisper
multi-threading example. -
UPDATED: The
buckets
,buffer
,metered_concurrency
,tbbt
, andwhisper
multi-threading examples to use theformat
library. -
UPDATED: The
buckets
multi-threading example to call thethread_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 thesuspicious_calls
flag. Also changed the format of warning message. -
CHANGED: The implementation of the
context/1
built-in method and the implementation of thethreaded_call/2
andthreaded_once/2
built-in predicates to throwuninstantiation_error(Term)
errors instead oftype_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
andthreaded_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 Prologwith_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
andthreads
flags depending on the availability of the required built-in predicates. -
FIXED: The SWI-Prolog
swihooks.pl
file to allow calls to thethreaded/1
built-in predicate inuser
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 throwuninstantiation_error(Term)
error instead oftype_error(var, Term)
error when checking thevar
type. -
CHANGED: Deleted deprecated
library/genint.lgt
file, replaced by thegenint
library. -
ADDED: Library
listing
supporting listing of object dynamic predicates clauses. This library replaces the old non-documentedlisting
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 standardgcd/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
andhelp::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 newdiagrams
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 theassemblies
andassembly
tagsstart-rtf
andfinish-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
, andtrebuchet
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 theformat
andos
libraries. -
UPDATED: Simplified the
functions
andmtbatch
multi-threading examples, accounting for the changes to thethreaded/1
built-in predicate. -
FIXED: The
emetas
example definition of thebest_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
and0'\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
and0'\Char
numbers.
Installers and installation scripts
-
UPDATED: The
install.sh
manual installation script to inform the user about theINFOPATH
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
foruses/2
anduse_module/2
directives, also check for animported_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 towarning
.
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 theevaluable_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 thecsv
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
, andswap_consecutive/2
to therandom
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
, andwithout//2
to thesequence_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 theshell/1
predicate from auxiliary predicates. -
FIXED: The
listing
library category implementation of thelisting/1
predicate. -
FIXED: The
sequence_grammars
library object definition of the non-terminalszero_or_more//0-1
andone_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 thedeterministic/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
, andlgt2txt.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
, andself_vs_this
examples. -
UPDATED: The
errors
example for the new arithmetic function linter warnings. -
UPDATED: The
bench
example to remove dependency on the deprecatedname/2
built-in predicate and eliminate all linter warnings. -
FIXED: The
bench
example to always load theboyer
andchat_parser
benchmarks and to also run by default theflatten
benchmark. -
FIXED: The
benchmarks
example not loading themodule.pl
file from theloader_events.lgt
andloader_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 systemPATH
environment variable,/opt/local/man
to the default systemMANPATH
environment variable, and/opt/local/share/info
to the default systemINFOPATH
environment variable. -
UPDATED: The macOS installer to inform the user about the additions to the
PATH
,MANPATH
, andINFOPATH
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
andfail_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 touser_error
and other streams. -
IMPROVED: Handbook section on performance.
-
IMPROVED: Handbook documentation of the
(\+)/1
andforall/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
, andINFOPATH
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 standardversion_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 onlyMajor:Minor
orMajor
.
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 acall/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 newshow_information
flag (in the upcoming 1.6.0 release) to set the Logtalkreport
flag.
Documentation
-
IMPROVED: Documentation of the embedding scripts, notably on how to ensure relocatable applications.
-
UPDATED: The man pages of the
logtalk_doclet
andlogtalk_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
andwrite_term/2-3
goals would fail to take into account local operator definitions when theportability
flag was set tosilent
(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
andassertz/1
built-in methods. -
IMPROVED: Documentation of the
diagrams
toolpath_url_prefixes/3
andomit_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 thenumber
library object. -
IMPROVED: The
number
object documentation of theapproximately_equal/3
andessentially_equal/3
predicates.
Tools
-
CHANGED: The
lgtunit
tool to handle a non-deterministic success test result as any other test failure (thus suppressingnon_deterministic_success/6
print messages). -
ADDED: Predicate
approximately_equal/2
to thelgtunit
tool. -
ADDED: The
lgtunit
tool now supports aflaky/0
test option as the preferred solution for declaring flaky tests. -
IMPROVED: The
lgtunit
tool documentation of theapproximately_equal/3
andessentially_equal/3
predicates. -
IMPROVED: The
diagrams
tool DOT language support no longer sets the graphpack
attribute totrue
to avoid frequent Graphvizdot
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 theread_term/2-3
,read/1-2
,write_term/2-3
,writeq/1-2
, andwrite/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
predicateentity_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
toolinstalled/0-1
andoutdated/0-1
predicates to list packs in alphabetical order. -
IMPROVED: The
packs
toolupdate/0
predicate to inform when a pack is orphaned. -
IMPROVED: The
packs
toolupdate/1-3
predicates to print an error message when a pack is orphaned. -
IMPROVED: When using the
packs
tool to install a pack usinggit archive
, delete any empty archive file created when the remote connection fails. -
IMPROVED: When using the
packs
tool to install a pack usingcurl
, 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 usinggit 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
, andterm_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 ofswipl:latest
. -
CHANGED: All embedding scripts to patch the backend adapter files to change the
settings_file
flag value fromallow
todeny
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
andarithmetic_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
andmsb/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
, andfiles/1-2
to thelgtdoc
tool. -
ADDED: The
packs::update/2-3
predicates now accept aninstall/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 thexdg-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
anddirectory_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
toolrdirectory/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
, andrecipes
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 thetests/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
andcatch/3
control constructs. -
ADDED: Additional tests for the Prolog
call/2-N
,open/3-4
,setup_call_cleanup/3
, andwrite_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)
, andsingletons(Term)
keys to thelogtalk_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
, andmode/2
directives. -
IMPROVED: Handbook documentation of the
logtalk_library_path/2
predicate. -
IMPROVED: Handbook documentation on definite clause grammars.
-
IMPROVED: Handbook documentation on
disjunctions
andconditionals
linter flags. -
IMPROVED: Documentation of the
packs
tool on requirements plus saving and restoring (virtual) environments. -
IMPROVED: Documentation of the
linter
,lgtunit
, andtutor
tools.
Library
-
CHANGED: The
hook_objects
library loader file to only load theprolog_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 declaredvars/2
predicate. -
CHANGED: Declare the
termp
library protocolvariables/2
predicate deprecated. -
IMPROVED: Simplify the
term
library objectvariant/2
predicate. -
UPDATED: The
os
library for LVM to use the newdate_time/7
built-in predicate when available. -
FIXED: Delete dead code in the the
csv
andstatistics
libraries.
Tools
-
IMPROVED: The
dead_code_scanner
tool no longer reports predicates listed inuses/2
oruse_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 inuses/2
oruse_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
tooldescribe/1-2
anddirectory/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 predicateentity_xsl_file
andindex_xsl_file
options. -
FIXED: Delete dead code in the the
diagrams
tool.
Examples
-
IMPROVED: Documentation of the
clustering
,document_converter
, andneo4j
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
andnumber_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
directivezero_or_more_or_error
andone_or_more_or_error
number of proofs. -
ADDED: Support for a
info/2
directivesince
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 thedouble_quotes
flag is set toatom
.
Tools
-
CHANGED: The
debugger
toolnotrace/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
toolfile_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
toolxunit_output
andxunit_report
formats to include as test case properties the test file, test lines, test URL, and test note (if any). -
CHANGED: The
lgtunit
toolxunit_net_v2_output
andxunit_net_v2_report
formats now include the test note (if any) as a test trait for all outcomes. -
CHANGED: The
lgtunit
toolrun/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 commandN
to turn off tracing. -
ADDED: Support to the
lgtdoc
tool to outputinfo/2
directivesince
keys. -
ADDED: New
lgtunit
toolclean_directory/1
protected predicate to delete an empty directory if it exists. -
IMPROVED: Reduced the number of atoms created when using the
diagrams
,lgtdoc
, andlgtunit
tools. -
IMPROVED: The
lgtunit
tool now saves and restores the current working directory when running tests. -
IMPROVED: The
lgtunit
toolfile_path/2
andclean_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
tooldebugging/0
predicate now also prints the maximum write depth for terms. -
UPDATED: The
logtalk_allure_report
scripts to add acategories.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
toolnotrace/0
andnodebug/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 theclustering
,document_converter
, andneo4j
Java examples to avoid PowerShell errors when running thelogtalk_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 aninclude/1
argument increate_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 theunify_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 throwerror/2
exception terms and type-check thewrite_file/3
andwrite_stream/3
predicates. -
ADDED: Experimental support for LVM to the
java
library. -
ADDED: New
java
libraryarray_to_list/2
andlist_to_array/2
predicates. Unlike the now deprecatedarray_list/2
predicate, calls to these predicates can be inlined. -
UPDATED: The
java
library to also abstract JPLjpl_map_element/2
andjpl_set_element/2
predicates for the SWI-Prolog and YAP backends. -
FIXED: Description of the
java
libraryarray_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
toolclean_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
andlogtalk_tester.ps1
scripts passing calling options to a sourcedtester.sh
andtester.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 thejava
library. -
ADDED: New
neo4j
example of using thejava
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
anddocument_converter
examplestester.sh
scripts.
Tests
-
ADDED: Additional tests for the Prolog standard
bagof/3
,findall/3
,setof/3
,(\+)/1
,call/1-N
, andonce/1
, predicates. -
ADDED: Additional tests for the de facto Prolog standard
findall/4
,format/2-3
, andsetup_call_cleanup/3
predicates.
3.63.0 - February 27, 2023
Logtalk compiler and runtime
-
ADDED: Allow
info/2
directiveexamples
key examples to also use{true}
and{false}
for bindings. -
FIXED: Spurious linter warnings of unknown calls to
user
predicates (and non-terminals) listed inuses/2
anduse_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
libraryrandomize/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 thefind
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 thelength/2
andmember/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 thelogtalk
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 thetimeout
library.
Tools _____
-
ADDED: Option to the
logtalk_tester.sh
andlogtalk_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
andlgtenv.ps1
scripts for creating packs virtual environments. -
ADDED: New
packs
toolavailable/2
andversions/3
predicates. -
ADDED: New
update/1
option to thepacks
tool registry adding and pack installation predicates. -
IMPROVED: The
diagrams
toollgt2svg.sh
andlgt2svg.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 calledlgt2svg.sh
script. -
UPDATED: The
packs
tool to also recognize as a valid registry and pack readme file name case variations ofNOTES
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 theflatten
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 towarnings
when the--quiet
command-line option is used by checking the newshow_information
flag introduced in version 1.5.1. -
FIXED: The YAP adapter file to set the Logtalk
report
flag towarnings
when the-q
command-line option is used. -
FIXED: The CxProlog adapter file to set the Logtalk
report
flag towarnings
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 objectkey/2
andvalue/3
predicates. Also add tests for all thepairs
library object predicates. -
ADDED: Additional tests for the
reader
libraryline_to_chars/2
andline_to_codes/2
predicates.
Tools
-
ADDED: Support for using
git archive
for installing packs to thepacks
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 thesorter
example when using LVM as it doesn’t provide the requiredsetarg/3
built-in predicate.
Tests
- ADDED: Additional tests for the standard
mod/2
andrem/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
anduse_module/2
directives. Controlled by the flagunknown_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 sourceline(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
predicatesread_term_from_chars/4
andread_term_from_codes/4
.
Tools
-
CHANGED: Renamed the
lgtdoc
toollgtdoc_missing_periods
linter flag tolgtdoc_missing_punctuation
and accept also exclamation and question marks. -
ADDED: New linter warning to the
lgtdoc
tool for invalid dates ininfo/1
directives. -
ADDED: New
lgtunit
toolfile_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 atester.sh
file to be sourced is restricted to the test set directory. -
FIXED: The
logtalk_tester.ps1
script sourcing oftester.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
, andnumber_codes/2
predicates. -
UPDATED: Several Prolog compliance tests to use the new
lgtunit
toolfile_path/2
predicate.
Installers and installation scripts
- IMPROVED: The
logtalk_user_setup.sh
andlogtalk_user_setup.ps1
scripts to detect when theLOGTALKHOME
andLOGTALKUSER
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 thebefore/3
andafter/3
predicates multifile to avoid predicate existence errors when using this object as monitor without definitions for these predicates inuser
. -
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
, andredefined_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 theLOGTALKHOME
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
andread_term_from_codes/4
to theterm_io
library. -
IMPROVED: The documentation of the
random
andtypes
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 ininfo/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
toollogtalk_index_to_txt.xsl
XSLT file. -
FIXED: Cases in the
lgtdoc
tool where looking for properties of referenced but not loaded entities could result incurrent_protocol/1
orprotocol_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 checkeof_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
andcallable/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 theinfo
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 anduses/2
anduse_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 thelogtalk_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 thetypes
andarbitrary
libraries. -
ADDED: New
[]
and{}
edge cases for atoms to thearbitrary
library. -
FIXED: The
os
librarydelete_directory/1
,directory_files/2
,environment_variable/1
, andfile_permission/2
predicates for YAP. -
FIXED: The definition of the type
clause
in thetypes
andarbitrary
libraries to allow a naked variable body as per the ISO Prolog Core standard.
Tools
-
CHANGED: The
help
tool to provide a dedicatedentity/1
predicate for help on entities (objects, protocols, or categories). -
CHANGED: The
lgtunit::quick_check/3
predicate now uses reifiederror/4
andfailed/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 apb/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 thetest/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 onfindall/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 thefigures
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
andbench
examples linter warnings for non-terminals called as predicates.
Tests
-
ADDED: Additional tests for the
atom_concat/3
,number_chars/2
,number_codes/2
, andsetof/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 defaultinfo
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.*
, andupdate_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
, orelif/1
directive inside an entity, use any preceding, applicableuses/2
oruse_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 iswarning
. -
ADDED: Linter warnings for unknown messages sent to loaded objects (controlled by the
unknown_predicates
flag). -
ADDED: Compile
otherwise -> Goal
andotherwise *-> Goal
constructs asGoal
whenotherwise/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
oruse_module/2
directives. The former are now reported as linter warnings (controlled by theduplicated_directives
flag) instead of compilation errors. -
IMPROVED: More informative permission errors for predicate conflicts in
uses/2
oruse_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 ause_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
andutf16be
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
, anduses/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 predicatesread_file_by_line/2-3
to skip empty lines in CSV files. -
CHANGED: The
statistics
library to depend on thetypes
library. -
ADDED: Library
genint
supporting application global and object local named generators for increasing positive integers. -
ADDED: Predicates
min_max/3
andmodes/2
to thetypes
andstatistics
libraries. -
ADDED: Predicates
fractile/3
andweighted_mean/3
to thestatistics
library. -
ADDED: Predicate
integer::sequence/4
to thetypes
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 thehook_objects
library. -
ADDED: Shortcut
tsv
object to thecsv
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
categoryshrink/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
tooldirectory/1
predicate for consistency with thedirectory/2
andreadme/1-2
predicates. The old semantics are now available from the newprefix/1-2
predicates. -
CHANGED: The
packs
toolrestore/2
predicate to use by default theforce(true)
option, same as therestore/1
predicate. -
CHANGED: The
packs
tool safety hooks to also accept underscores in URLs and file paths. -
ADDED: Predicates
registry_protocol::note/2
andpack_protocol::note/3
to thepacks
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 tocurl
(e.g. for use with pack registry servers requiring authentication),bsdtar
(e.g. for decrypting archives), andgpg
. -
ADDED: Support to the
lgtdoc
tool to generate links from library APIs to library descriptions. These links can be explicitly-qualified by using thelgt2rst
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 aotherwise/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
toolreadme_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 thealias/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
oruse_module/2
directive. -
ADDED: Support for using
zero_or_error
andzero_or_one_or_error
number of proofs arguments inmode/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 offorall/2
goals. -
FIXED: Cases where name conflicts between built-in methods and predicates listed in
public/1
,protected/1
,private/1
,uses/2
anduse_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
andassertz/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 thetypes
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
, andterm_io
libraries. -
IMPROVED: The
expecteds
andoptionals
libraries tests to use explicit assertions. -
IMPROVED: The
arbitrary
library performance for several types. -
FIXED: The
arbitrary
library to not generate empty atoms for thecallable
type. -
FIXED: The
arbitrary
library category to not generate surrogate code points as edge cases for theunicode_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 theinorder/2
andpostorder/2
predicates of thebintree
library object. -
FIXED: Typos in the
mode/2
directives for theos
libraryfile_size/2
,file_modification_time/2
, andfile_permission/2
predicates. -
FIXED: Typo in the
mode/2
directive for theremove_duplicates/2
predicate in thelistp
andvarlistp
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 abroken/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 thesuppress_path_prefix
flag when printing file paths. -
CHANGED: Renamed the
code_metrics
toolentity_score//2
non-terminal toformat_entity_score//2
. -
CHANGED: The default value for the
diagrams
toolomit_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
andlgtunit
tools. -
IMPROVED: Minimized use of the
term_io
library by thediagrams
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 thedebug_messages::disable/1
predicate. -
FIXED: Typo in the
mode/2
directive for thepacks::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
toolxref_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 standardfindall/3
predicate and the new if-then-else, soft-cut, and disjunction linter warnings. -
FIXED: The
bench
example to only load theboyer
andchat_parser
benchmarks when the backend providesstatistics/2
as a built-in predicate. -
FIXED: The
benchmarks
andmodule_aliases
examples when using the Scryer Prolog backend. -
FIXED: If-then-else linter warnings in the
dcgs
andsearching
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
, andop/3
built-in predicates. -
ADDED: Additional tests for the
atomic_list_concat/2-3
andatomic_concat/3
predicates. -
UPDATED: The
predicate_property/2
predicate tests to acceptbagof/3
andsetof/3
meta-predicate templates that use^
instead of0
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
, andsetof/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 theclustering
anddocument_converter
examples. -
UPDATED: The
dcgs
example to illustrate the definition and use of meta-non-terminals.
Tools
-
CHANGED: The
diagrams
,lgtdoc
, andwrapper
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
, andlogtalk_tester.sh
scripts. -
IMPROVED: Documentation of the
issue_creator
andpacks
tools. -
UPDATED: Documentation of the
lgtdoc
tool for the new PowerShell scripts. -
UPDATED: The
lgtdoc
toollgt2pdf.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
toollogtalk_entity_to_txt.xsl
file. -
FIXED: The
lgtdoc
toollgt2txt.sh
script to use the correct XSLT files. -
FIXED: The
lgtdoc
toollgt2rst.sh
script to generate correctindex.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
, anddiv/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
andplus/3
predicates. -
ADDED: Additional tests for the Prolog standard
retract/1
,retractall/1
,subsumes_term/2
, andwrite_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
andsettings-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
andupdate_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 thelgt2svg.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
andupdate_svg_diagrams.sh
scripts. -
FIXED: The
update_html_docs.sh
andupdate_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 newcatchall_catch
flag, whose default value issilent
. -
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 thepacks
tool. Thanks to Paul Brown for the bug report.
Library
-
CHANGED: The
set(_Type_)
object now takes into account thecomparingp
protocol. Thanks to Adrián Arroyo Calle for his contribution. -
CHANGED: The
basic_types
library loader to also load thecomparingp
protocol. -
CHANGED: The
types
librarytermp
protocol to extend thecomparingp
protocol and theterm
andnumber
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
andgroup_consecutive_by_key/2
to thepairs
library object. Deprecated thegroup_by_key/2
predicate. -
ADDED: Linter checks for
format/2-3
goals to theformat
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)
, andin_byte
to thearbitrary
andtypes
libraries. -
IMPROVED: Performance of the
csv
library when parsing large CSV files. -
IMPROVED: The
type
library object implementation of theatom(CharSet)
,atom(CharSet, Length)
, andnon_empty_atom(CharSet)
types to avoid usingcatch/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 predicateschange_directory/2
anddirectory_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
librarydate_time/7
andoperating_system_type/1
predicates for Scryer Prolog when thedouble_quotes
flag is set tocodes
. -
FIXED: Implementation of the
os
libraryshell/1
andsleep/1
library predicates for B-Prolog when running on Windows. -
FIXED: The
os::path_concat/3
library predicate to use theos::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 itssetup/1
andcleanup/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 newcatchall_catch
linter flag. -
UPDATED: The Windows
lgt2rst.js
JScript to provide the same support for a user-definedcustom.css
file when called with the-s
option to customize the Sphinx Read the Docs theme as found in thelgt2rst.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
toollgt2rst
scripts to avoid an error when called with the-s
option due to changes in recent versions of the Sphinxsphinx-quickstart
command. -
FIXED: The
lgtunit::run/1
predicate when the test definessetup/1
orcleanup/1
options. Thanks to Trystan Lapointe-Majumdar for the bug report. -
FIXED: The
logtalk_tester
script to only setup and use theissue_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
andmetapredicates_compiled
examples to not require setting thedouble_quotes
flag. -
UPDATED: The
errors
example to illustrate the newcatch/3
lint check. -
UPDATED: The
roots
example to use theexistence_error/2
built-in method. -
IMPROVED: The
dcgs
individual usage example of themeta_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 thedouble_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
andarg/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
, andwrite_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 theoptions
library. -
ADDED: Support to the
timeout
library for the Trealla Prolog backend. -
IMPROVED: Tests driver files for the
arbitrary
andrandom
libraries to avoid reloading of files and and to explicit clean up intermediate files for the code being tested. -
UPDATED: The
dif
andcoroutining
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
libraryf/2
shortcut for thefinishes/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 newissue_creator
tool. -
IMPROVED: The
packs
tool handling of deleted registries. -
UPDATED: Added
git
command to the requirements list for thepacks
tool. -
UPDATED: The
diagrams
,lgtdoc
, andpacks
tools to use theoptions
libraryoption/2
predicate. -
UPDATED: The
help
tool to use theatomic_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 themsort/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
andmsb/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
, andsubsumes_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
, andwrite_term/3
predicates. -
ADDED: Additional tests for the de facto standard
predicate_property/2
andmsort/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 theuser
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 objecttrace_event/2
anddebug_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 thelogtalk_packs
library alias. -
UPDATED: The
settings-sample.lgt
with sample code for defining the newlogtalk_packs
library alias. -
FIXED: The
update_html_docs.sh
andupdate_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 standardformat/2-3
predicates. -
ADDED: Library
dif
that abstracts how the different backends make available thedif/2
predicate when implemented. -
ADDED: Parametric object
object_wrapper_hook/1
to thehook_objects
library. -
ADDED: Partial support for XSB to the
coroutining
library. -
ADDED: Additional tests for the
coroutining
library. -
ADDED: Predicate
copy_file/2
to theos
library. -
IMPROVED: Performance of the
arbitrary
library tests.
Tools
-
CHANGED: The
diagrams
tooldot
graph language export now uses the genericMonospace
font name and output SVG files using thedot
command-Gfontnames=svg
option to avoid issues with text overflowing boxes. -
CHANGED: The
debugger
tool loader file to also load thedump_trace
object. -
CHANGED: The
packs
toolsave/1
andrestore/1-2
predicates to save and restore pinning status. -
CHANGED: The
packs
toolregistries
object predicatedefined/3
todefined/4
. -
CHANGED: The
packs
toollint/1-2
predicates to fail when specification errors are detected. -
ADDED: Predicates
text_output_contents/1-3
andbinary_output_contents/1-2
to thelgtunit
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 thelogtalk_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
, andreset/0
to thepacks
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
toolpacks::dependents/1-3
predicates to avoid duplicated results. -
FIXED: The
packs
toolregistries::add/3
predicate to delete a registry prior to re-adding it when using theforce(true)
option to prevent a git cloning failure. -
FIXED: The
packs
toolregistries::clean/0
predicate to delete all registry archives instead of only of those registries that are defined. -
FIXED: The
packs
toollogtalk_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
toolregistries::defined/4
predicate report on how a registry is installed which could returndirectory
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
tooldump_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 newdif
library instead of thecoroutining
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
, andop/3
directives. -
ADDED: Tests for the Prolog standard
discontiguous/1
,ensure_loaded/1
,include/1
,initialization/1
,multifile/1
, andop/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 thepaths_core.pl
file to thepaths_libraries.pl
file and added missing definition of thetests
library alias to thepaths_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
andatomic_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 suppressrlwrap
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
andlogtalk_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
andupdate_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 thefloat
andnon_negative_float
types to thearbitrary
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 theepsilon/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)
andall(Assertion)
test outcomes to thelgtunit
tool. -
ADDED: New input/output
create_text_file/3
,check_text_file/3
, andtext_file_assertion/4
testing predicates to thelgtunit
tool. -
ADDED: New
exclude_prefixes/1
option to thelgtdoc
tool to exclude from documentation any file or directory with one of the specified prefixes. -
UPDATED: The
debugger
tool to use aget_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 thecharsio: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 theexclude_files/1
andexclude_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 aget_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 thecharsio:get_single_char/1
predicate when using the Scryer Prolog backend.
Examples
-
CHANGED: The
bench
examplechat_parser
andsendmore
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
andatomic_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
, andpeek_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
andnumber_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
, andsucc/2
predicates. -
IMPROVED: Simplified tests for the
format/3
,nl/0-1
, andwrite_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 theinfo/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
andspy
predicate properties and to expand itsdisk_predicate/3
directive anddefine_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
andthreaded/0
directives. -
IMPROVED: Handbook documentation of the multi-threaded, threaded engines,
logtalk_library_path/2
andlogtalk_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-inlength/2
predicate when available due to differences between backend implementations. -
ADDED: Additional tests for the
arbitrary
andtypes
libraries to check that the main predicates are deterministic. -
FIXED: The
meta_compiler
library to include a copy of themeta
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 theos
library predicatesdirectory_files/2
,file_modification_time/2
, andfile_size/2
. -
FIXED: Workaround JIProlog
directory_files/2
predicate succeeding for non-existing directories in the implementation of theos::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 newtests_base_url
user-defined flag that is created by thelgtunit
tool test results export formats. -
ADDED: Support for the Saxon XSLT processor to the
lgtdoc
toollgt2rst
,lgt2html
,lgt2md
, andlgt2txt
scripts. -
ADDED: A
custom.css
file to thelgtdoc
tool for use with thelgt2rst
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 thediagrams
tool to allow specifying the Graphviz command to use. -
UPDATED: The
lgt2svg
scripts provided by thediagrams
tool to use thedot
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 newlogtalk_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 thelogtalk_tester
script. -
UPDATED: The
lgtdoc
tool to process the newsee_also
key for theinfo/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
, andclosed_world_assumption
example tests. -
FIXED: Loading of the
securemp
example to actually load all the demo broken meta-predicate definitions. -
FIXED: The
lambdas_compiled
andmetapredicates_compiled
examples to include copies of, respectively, thelambdas
andmetapredicates
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
, andlength/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
, andsub_atom/5
predicates. Some of them taken or derived from the WG17 test suite. -
ADDED: Additional tests for the standard
keysort/2
andsort/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
andwrite_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 theclean
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
andjson
libraries to not require thediff
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 theos
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 forREDIS_HOST
andREDIS_PORT
environment variables as an alternative to the defaultlocalhost
and6379
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
, andreader
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
, andpatches
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
andnl/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 ahome
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 tounsupported
.
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 wordstimedout
instead oftimeouts
andcrashed
instead ofcrashes
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
, andthreads/functions
examples. -
FIXED: A
benchmarks
example portability issue with the Ciao Prolog and XSB backends.
Tests
-
CHANGED: Tests for the
log/1
,log/2
, andlog10/1
arithmetic functions to allow any argument to the expectedevaluation_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
predicatevariable_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
andatom_number/2
predicates.
Library
-
ADDED: Definitions for the
os
librarydelete_directory/2
,date_time/7
,pid/1
, andrename_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
tooltests_results_summary/6
andtests_skipped/2
messages to, respectively,tests_results_summary/7
andtests_skipped/3
to better support flaky tests and skipped test sets. -
ADDED: Predicates
text_file_assertion/3
andbinary_file_assertion/3
to thelgtunit
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 standardepsilon/0
arithmetic constant with Scryer Prolog. -
UPDATED: The
dead_code_scanner
andcode_metrics
tools tests to use assertions. -
FIXED: The
logtalk_tester
script report of skipped and failed tests when using thelgtunit::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 standardbetween/3
predicate instead of its own version. -
IMPROVED: Tests for the
complements
andhailstone
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 returnbom/1
orencoding/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
, andset_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
, andretractall/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 extendterm
instead ofcompound
as empty dictionaries are not always compound terms. -
CHANGED: Mark the
termp
protocolground/1
andsubsumes/2
predicates as deprecated as bothground/1
andsubsumes_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
andintersection/2-3
to thedictionaries
library. -
ADDED: Predicates
numbervars/3
,numbervars/1
, andvarnumbers/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 thedictionaries
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 theos::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
andlogtalk_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
andtext_output_assertion/4
to thelgtunit
tool. -
IMPROVED: The
logtalk_tester.sh
script and thelgtunit
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
andlogtalk_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 theheaps
library. -
FIXED: The
lgtunit
toolset_text_input/3
andset_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
andstream_to_bytes/2-3
to thereader
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
andhex_code
types to thearbitrary
andtypes
libraries. -
ADDED: Library predicate
os::is_absolute_file_name/1
. -
ADDED: New types
file(Extensions,Permissions)
anddirectory(Permissions)
to theos
library. -
FIXED: Library
os::file_permission/2
predicate for SICStus Prolog when the first argument is a directory. -
FIXED: Library
os
predicatesfile_permission/2
andrename_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 thediff
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 predicatestest/1
andnumber_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 usemkdir -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 ofwarning
. -
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
, andprivate/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 thearbitrary
andtypes
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 thearbitrary
library. -
IMPROVED: The
gensym
andrandom
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
tooloption/2
andset_option/2
predicates and refactored option handling to use the newoptions
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 failedvariant/2
andsubsumes/2
test outcomes. -
UPDATED: The
logtalk_tester
script to support the-f xunit_net_v2
option. -
UPDATED: The
diagrams
tool to use the newoptions
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 newterm_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 thecode_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 theassertion/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 theassumptions
andsearching
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 theverdi_neruda
andxml_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
andlog10/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 theset_logtalk_flag/2
directive and thegoal_expansion/2
method tests.
Installers and installation scripts
-
CHANGED: Renamed the
scripts/macosx
directory toscripts/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
andLOGTALKUSER
environment variables for thezsh
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 thewrite_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 inuses/2
directives. -
FIXED: Bug in the
logtalk_make/0-1
predicates when reloading a main file due to an updated included file when theclean
flag is turned off and thereload
file is set tpchanged
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 thelogtalk_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
andrandom
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
, andmap/2-3
predicates to thequeues
library. -
ADDED: Tests for the
os
librarywall_time/1
andshell/1-2
predicates. -
UPDATED: The
hook_objects
libraryobject_wrapper_hook
object to set thecontext_switching_calls
flag toallow
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 theosp
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 itssystem/1
built-in predicate). -
FIXED: The
os::command_line_arguments/1
predicate for Tau Prolog. -
FIXED: The
os
library predicatescpu_time/1
andwall_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
andset_binary_output/3
to thelgtunit
tool. -
ADDED: Support for Trealla ProLog to the
debugger
,lgtunit
, andports_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 ofdiscontiguous/1
directives to apply only to entity directives. -
FIXED: The
debugger
tool to call thereset/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
examplereducer
benchmark compatibility with GNU Prolog and SICStus Prolog. -
FIXED: The
bench
exampleflatten
andmu
benchmarks compatibility with GNU Prolog. -
FIXED: The
bench
exampleserialise
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 anevaluation_error(zero_divisor)
exception term when the argument is zero. -
CHANGED: The tests for the
asserta/1
andassertz/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
, andput_byte/1-2
,open/4
,close/2
,set_stream_position/2
, andretractall/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
, andceiling/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
, andsucc/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
predicatevariables
andsingletons
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
, andground/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 tounsupported
for Tau Prolog as its implementation of the standardopen/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
, andredis
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 predicatesfile_modification_time/2
andfile_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
andos
libraries. -
FIXED: The
arbitrary
library tests for backend Prolog systems that don’t support Unicode. -
FIXED: Support for the
os
andrandom
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 theosp
protocol.
Tools
-
CHANGED: The
logtalk_tester
shell script to use aSIGKILL
signal for the timeout option. -
CHANGED: The
lgtunit
toolstream_position/1
utility predicate to not require the backend Prolog system to support repositioning of streams. -
ADDED: Support for a
variant/2
outcome fortest/2-3
test dialects to thelgtunit
tool. -
ADDED: Option
-w
to thelogtalk_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
andlogtalk_tester
scripts. -
ADDED: LVM support to the
debugger
,diagrams
, andlgtunit
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 missingmeta_predicate/1
directive for thecall_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
, andsymbiosis
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 theconstraints
example. -
FIXED: Set the
double_quotes
flag tocodes
unconditionally in thedcgs
example loader files.
Contributions
-
FIXED: Set the
double_quotes
flag tocodes
unconditionally in thexml_parser
loader file. -
FIXED: Skip condition for the
pddl_parser
testsokoban
, 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 thetoychr
port.
Tests
-
ADDED: Tests for the new
logtalk_load_context/2
predicate keys. -
ADDED: Tests for the standard Prolog predicate
write_term/3
optionvariable_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 thequoted(true)
option for writing atoms that start with%
or/*
. -
ADDED: Tests for the standard Prolog predicate
write_term/3
to check using thequoted(true)
option for writing the[]
and{}
atoms. -
ADDED: Tests for the standard Prolog predicate
write_term/3
to check using thequoted(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
, andget_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
, andput_code/2
Prolog predicates. -
IMPROVED: Tests for the
call/N
,findall/3-4
,ignore/1
,once/1
, andsetof/3
Logtalk built-in methods. -
IMPROVED: Tests for the
threaded_engine_create/3
,threaded_engine_next/2
,threaded_engine_next_reified/2
, andthreaded_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
, andground/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
andlogtalk_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 predicatespid/1
,date_time/7
,directory_files/2
, andfile_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
, andports_profiler
tools for Tau Prolog support. -
UPDATED: The
logtalk_doclet
andlogtalk_tester
shell scripts to support using Tau Prolog as the backend compiler. -
UPDATED: The
help
tool for the newuse_module/1
directive and the newuninstantiation_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
andcurrent_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
, andread_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 thedouble_quotes
flag tocodes
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
anduse_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
andcreate_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 themake
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 thelgt2svg
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
, andtruncate/1
from theis/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
andlog10/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 theformat/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
predicatecheck
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 thetutor
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
andnth1/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
, andnull_device_path/1
predicates to theos
library. Thepath_concat/3
predicate specification is taken from Ciao Prolog. -
ADDED: New
dif/1
predicate to thecoroutining
library to setdif/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 thehook_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
andrandom
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
, andports_profiler
tools. -
ADDED: Support for Tau Prolog to the
lgtunit
tool. -
ADDED: Support for the
subsumes/2
outcome fortest/2-3
test dialects to thelgtunit
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 newlogtalk_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
andv/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
tooltester.lgt
file to avoid reloading thetypes(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
andset_seed/1
predicates and for most of the parametric types defined by thearbitrary
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 thecall//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 inis/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 valueswarning
andsilent
(the default value). -
ADDED: Compiler deprecated warning for DEC-10 Prolog I/O,
fail_if/1
andprolog_flag/2
built-in predicate calls. -
IMPROVED: Compile calls to deprecated
prolog_flag/2-3
as calls to one of thecurrent_prolog_flag/2
orset_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 theatom_codes/2
,number_codes/2
, orchar_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 thecurrent_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 thefast_random
generator. -
ADDED: Predicates
get_seed/1
andset_seed/1
to thearbitrary
category. -
ADDED: Support for generating arbitrary values and edge cases for the
partial_list
andlist_or_partial_list
types to thearbitrary
category. -
ADDED: Support to generate edge cases for
pair
,pair(KeyType,ValueType)
,non_empty_list
,non_empty_atom
, andnon_empty_atom(CharSet)
types to thearbitrary
category. -
UPDATED: Documentation of the
arbitrary
library. -
UPDATED: The
arbitrary
category to also generate surrogate code points as edge cases for thecharacter_code(unicode_full)
type. -
FIXED: Deleted wrong
edge_case/2
clauses for the typelist(Type,Length)
from thearbitrary
category. -
FIXED: The documentation of the
arbitrary
category omitted the support for theatom(CharSet,Length)
type. -
FIXED: The
arbitrary
category edge cases for theatom(CharSet,Length)
andlist(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 thetmp_dir
flag instead of a fixed/tmp
path.
Tools
-
CHANGED: Switch the
lgtunit
tool to use thefast_random
generator in its QuickCheck implementation. -
CHANGED: The
lgtunit
toolquick_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 thelgtunit
tool to allow passing the random generator starting seed to be used to generate the random tests. -
ADDED: QuickCheck
ec(Boolean)
option to thelgtunit
tool to control use of edge cases when generating random arguments. Default istrue
. -
ADDED: QuickCheck
pc(Closure)
option to thelgtunit
tool to allow defining a pre-condition closure for filtering generated tests (no default). -
ADDED: QuickCheck
l(Closure)
option to thelgtunit
tool to allow defining a label closure for classifying the generated tests (no default). -
ADDED: QuickCheck
v(Boolean)
option to thelgtunit
tool to allow verbose reporting of generated random tests. Default isfalse
. -
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
anddead_code_scanner
tools. -
IMPROVED: The
lgtdoc
tool generated reStructuredText layout for predicate remarks. -
IMPROVED: The
diagrams
tool now uses adiagrams.css
file to style generated diagrams in SVG format. This file is automatically copied to the diagrams output directory when using thelgt2svg
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 ofdiscontiguous/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 thelogtalk
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 definingbefore/3
andafter/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 flaglogtalk_source_location_data
is true. -
CHANGED: The SWI-Prolog hooks file to call
logtalk_make/0
frommake/0
when the Prolog flaglogtalk_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
andreexport/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
andreexport/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
, andlogtalk_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
andlookup/2
to thedictionaries
library. -
ADDED: New hook object
print_goal_hook
to thehook_objects
library to print entity predicate goals before, after, or before and after calling them. -
ADDED: New hook object
object_wrapper_hook
to thehook_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
, andports_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 termMajor: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 formatMajor: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 aversion
value not in theMajor:Minor:Day
format. -
ADDED: Deprecated warning for
info/1
directives with adate
value in the oldYear/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
oruse_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 correspondinguse_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
, andtypes
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 thenumberlistp
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
, andlgtunit
tools to print dates using the ISO 8601 standard format. -
CHANGED: The
lgtunit
tool no longer prints arunning_tests_from_object/1
message as test objects are always compiled with thesource_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 thelgtunit
tool that can be loaded before running a test suite to minimize the test results output. -
ADDED: Object
automation_report
to thelgtunit
tool that is loaded automatically by thelogtalk_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 theautomation_report
object provided by thelgtunit
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
, andlgtunit
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 ofis/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 thequick_check/2
predicate failed to mention thes/1
option for specifying the maximum number of shrink operations. -
FIXED: The
lgtunit
tool to ensure that test objects are compiled with thesource_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 thesearching
example to avoid a clash with SWI-Prolog when configured to represent rational numbers asN/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 betweenself
andthis
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 themetagol
port to avoid a clash with SWI-Prolog when configured to represent rational numbers asN/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
, ininfo/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 towarning
). -
ADDED: Support for using parameter variables in the second argument of
uses/2
anduse_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 asEntity::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
, andsets
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 thecall/N
control constructs. -
ADDED: Tests for predicate shortcuts defined in
uses/2
anduse_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
anduse_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
, andtab/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
, andttytab/1
. -
ADDED: Detect and report legacy
on_exception/3
,raise_exception/1
,abolish/2
,otherwise/0
, andprolog_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 thecode_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
, andmeta_predicate/1
directives. -
IMPROVED: Documentation of the built-in
logtalk_make_target_action/1
andlogtalk_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 predicatesexpected/1
,unexpected/1
, andor_else_get/2
for clarity. -
ADDED: Non-deterministic constructors to the
expecteds
andoptionals
libraries. -
ADDED: Predicates
if_expected_or_else/2
andeither/3
to theexpecteds/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
andplus/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
andnumbervars/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 thelgtunit
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 propertyimplementation_module/1
. -
ADDED: Support to the SWI-Prolog and YAP adapter files to expand Prolog
reexport/2
directives with anexcept/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
, andports_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
andoptionals
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 atimeout(Goal)
exception instead oferror(timeout(Goal),Context)
. -
ADDED: Predicate
timeout::call_with_timeout/3
. -
ADDED: Support for XSB to the
timeout
library. -
ADDED: Predicates
ensure_directory/1
andensure_file/1
to theos
library. -
ADDED: Predicate
from_goal/2
to theexpecteds
andoptionals
libraries. -
ADDED: Predicates
if_present_or_else/2
,or/2
, andor_else_throw/2
to theoptionals
library. -
ADDED: Convenience predicate
random::enumerate/2
. -
FIXED: Predicates
map/2
andflat_map/2
of theoptionals
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
libraryfreeze/2
andwhen/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 thecheck
target. -
ADDED: A boolean option,
sort_predicates/1
, tolgtdoc
tool for writing predicate index lists sorted by predicate name (default value isfalse
). -
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 thenote/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 thelgt2txt.sh
script.
Tests
-
ADDED: Unit tests for the
atom
library objectreplace_sub_atom/4
andsplit/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 theoptionals
library. -
FIXED: The loader file of the
persistency
example to load the requiredos
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 theatom_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 thesphinx-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 theprefix
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
andsign/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 thecoroutining
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 misusefindall/3
to backtrack into all solutions ofGoal
. -
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 anexcept/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
andlogtalk_load/1-2
built-in predicates.
Library
- FIXED: The
mode/2
directive for thedifflist
predicateas_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 predicatesrdirectory_score/2
andrlibrary_score/2
for thenoc_metric
,nor_metric
,size_metric
, andupn_metric
metrics. -
FIXED: Missing additional
mode/2
directives for thelgtunit
objectset_text_input/1-3
,set_text_output/1-2
, andcreate_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
anddocument_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 thesub_atom/5
built-in predicates would be more efficient. -
ADDED: Lint warning for non-ground
=/2
andunify_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 thearg/3
orfunctor/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
, andwrite_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 missingmeta_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 boththread_local/1
anddynamic/1
directives to prevent spurious lint warnings about missingdynamic/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
andports_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
andsetof/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
andcurrent_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 valueswarning
andsilent
(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 increate_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 newtutor
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 withas/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 standardstream_property/2
predicate propertyposition/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 returnssingletons/1
andvariable_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
andclean
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
andtimeout
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 theset_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
andlambdas
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 tomissing_scope_directive/6
to pass the name of the directive that triggers the warning. -
CHANGED: The compiler
ignored_directive/3
warning message term toignored_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 thevariables/1
,variable_names/1
, andsingletons/1
options when reading theend_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 ause_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 plustable/1
anduntable/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
protocollength/2
predicate tosize/2
for naming consistency with other libraries. Addedlength/2
as an alias to thesize/2
predicate to theset
object for backwards compatibility. -
MOVED: The heaps implementation from the
types
library to a separateheaps
library. -
MOVED: The queues implementation from the
types
library to a separatequeues
library. -
MOVED: The sets implementation from the
types
library to a separatesets
library. -
MOVED: The dictionary protocol and implementations from the
types
library to a separatedictionaries
library. -
ADDED: Types
list(Type,Length)
,list(Type,Length,Min,Max)
, andatom(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 thedictionaries
library protocol. -
ADDED: Port of the SWI-Prolog
assoc
library under the nameavltree
and complying with thedictionaries
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
predicatesmean_deviation/2
,media_deviation/2
, andaverage_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 callingchar_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 deprecatedcalls
tag and updating theuses
tag to include afunctor
tag for use with Sphinx output. -
IMPROVED: The
lgtdoc
tool generated XML documenting files now include information aboutuses
relations. -
UPDATED: The
help
tool to open the library documentation index when calling thelibrary/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 ignoredcomplements
category relations. -
FIXED: The
lgtdoc
tool processing ofmode/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
, andsets
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
, andoptionals
are renamed to, respectively,assign_parameters
,missing_data
,jpl
,logs
, andbooks
. -
MOVED: The
redis
example, which only contains tests, to thetests/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 inpath_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 thediagrams
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 thediagrams
tool. -
ADDED: Boolean option
externals/1
to thediagrams
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 thereport
flag towarnings
oroff
. -
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 thesuspicious_calls
compiler flag). -
ADDED: Lint check for cuts in clauses for multifile predicates.
-
ADDED: Lint check for
bagof/3
andsetof/3
calls with existentially qualified variables not occurring in the qualified goal. -
ADDED: Lint check for
bagof/3
,setof/3
, andfindall/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 inuser
. -
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 issilent
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 issilent
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
andsteadfastness
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
categoryshrink/3
hook predicate to allow for generating multiple solutions for improved shrinking of failed goals by the QuickCheck implementation in thelgtunit
tool. -
CHANGED: Generation of arbitrary values for the types
character_code
andcharacter
to default to theascii_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 thearbitrary
category to support declaring shrinkers for new types. -
ADDED: Multifile predicate
edge_case/2
to thearbitrary
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)
, andcharacter(CharSet)
. -
ADDED: Type definitions for the common type abbreviations
codes
,codes(CharSet)
,chars
,chars(CharSet)
,code
,code(CharSet)
,char
, andchar(CharSet)
. -
ADDED: Generation of arbitrary values for the
character(CharSet)
,qualified_callable
,operator_priority
, andoperator_specifier
types. -
ADDED: Generation of arbitrary values for the common type abbreviations
codes
,codes(CharSet)
,chars
,chars(CharSet)
,code
,code(CharSet)
,char
, andchar(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
, andnon_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
andnon_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 themax/2
andmin/2
predicates as these override inherited declaration from thelistp
protocol to use arithmetic order instead of standard order. -
FIXED: Non-steadfast
flatten/2
predicate definition inlist
,varlist
andhook_pipeline/1
objects. -
FIXED: Non-steadfast
bintree
objectmin/3
,max/3
,delete_min/4
, anddelete_max/4
predicate definitions. -
FIXED: Non-steadfast
heap/1
objectinsert/4
andtop_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 as/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
andgoal_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 abagof/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 thethreaded_call/2
andthreaded_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 theprolog: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 thethreaded_engine_next/2
andthreaded_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, thesphinx-quickstart
interactive script is now called with aconf.py_t
template file using the$LOGTALKUSER/tools/lgtdoc/xml
directory as the templates directory. The providedconf.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
andscopes
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 fordebug
anddebug(Group)
messages when theoptimize
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
orsetof/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 standardlength/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
andfrom_goal/4
. -
ADDED: New expected term
or_else_throw/1
predicate. -
IMPROVED: Descriptions of the
optional
andexpected
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 toports_profiler
. Theports
library alias is now used for the directory containing ports of third-party software. -
ADDED: A
debug_messages
tool supporting enabling and disabling ofdebug
anddebug(Group)
messages for code compiled in normal mode. -
ADDED: Sample Sphinx configuration file,
conf-sample.py
, to thelgtdoc
tool.
Ports
- ADDED: Port of
metagol
, an inductive logic programming (ILP) system based on meta-interpretive learning.
Tests
-
ADDED: Library alias
tests
to thepaths/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
andmsglog
examples. -
IMPROVED: Implementation of the hill climbing search method found in the
searching
example. -
UPDATED: The
optionals
example to use the newfrom_goal/3
constructor. -
UPDATED: The
expecteds
example to use the newfrom_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
anduse_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 atester.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 toallow
) 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
andrefman.pdf
files have been replaced byTheLogtalkHandbook-3.21.0.pdf
andTheLogtalkHandbook-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
andoperator_priority
to thetype
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 newlgt2rst
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 atester.sh
file found in the tests directory before running the tests. Thetester.sh
file is sourced with all the parameters passed to thelogtalk_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 thelgt2html.js
andlgt2md.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 atester.sh
file that is sourced by thelogtalk_tester
script and that sets theCLASSPATH
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
, acat
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 therandom
library. -
ADDED: Predicates
as_set/2
andas_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
andmeta_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
andlambdas_compiled
examples with theoptimize
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
andmetapredicates_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
andsystem_error/0
. These methods throw standarderror/2
exception terms and are equivalent to a sequence ofcontext/1
andthrow/1
method calls. -
REMOVED: Support for deprecated Logtalk 2.x
calls/1
,uses/1
, andalias/3
directives. -
REMOVED: Support for deprecated Logtalk 2.x
:/1
control construct. -
REMOVED: Support for deprecated Logtalk 2.x
unknown
,singletons
,tmpdir
, andversion
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 containsop/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 thereload(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 av/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 thenumber
object. These predicates are non type-checked variants of the same predicates found in thelgtunit
tool. -
ADDED: Predicates
maybe/0-2
to therandom
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
, andtolerance_equal/4
to thelgtunit
tool. These are type-checked variants of the same predicates found in thenumber
library object. -
IMPROVED: Simplified handling of
quick_test/3
test dialect bylgtunit
. -
IMPROVED: Simplified the implementation of the
lgtunit
predicate=~=/2
and added more strict type-checking. -
UPDATED: The
lgtunit
tool to use an accurateepsilon
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 standardbetween/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 thequick_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
librarymaybe/0-2
predicates. The tests use a 2% margin for checking for an even distribution. -
CHANGED: Skip the tests for the
random
library predicatesget_seed/1
andset_seed/1
when testing thebackend_random
object as several backend Prolog systems don’t provide implementations for these predicates. -
ADDED: Tests for the
retract/1
andretractall/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 theexpanding
protocol by definingterm_expansion/2
andgoal_expansion/2
as multifile and dynamic predicates. This change avoids predicate existence errors when compiling source files with thehook
flag touser
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 todont_care
.
Prolog adapter and integration files
-
CHANGED: Deleted the
portray/1
hook for Logtalk goals execution context from theswihooks.pl
file. -
UPDATED: The SWI-Prolog adapter file by adding to the
prolog_loader/1
flag definition the newload_files/2
optionoptimise(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
predicatesingletons/1
option and set theunderscore_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
anduse_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 theentity/1
andentity_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
predicatesingletons/1
option. -
ADDED: Unit tests for the ISO standard
write_term/3
predicatequoted/1
andignore_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 libraryjava_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 thesearching
example. -
IMPROVED: Simplified the
bridge
puzzle solution in thesearching
example. -
FIXED: The
searching
example for the events related changes in the previous version for theuser
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 theevents
flag instead of a fixedallow
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 fromuser
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
andthreaded_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
andnumber_of_rules/1
predicate definition properties when calling the built-in predicatesobject_property/2
andcategory_property/2
for dynamically created entities.
Prolog adapter and integration files
-
ADDED: Make shortcut,
$
, for the newcaches
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 tostderr
. -
CLEANUP: Style issues in all
lgtdoc
scripts.
Tests
- ADDED: Additional unit tests for the
logtalk
anduser
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
andblocks
examples no longer change the default value of theevents
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 thebenchmarks
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 thelogtalk
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 thelogtalk_user_setup.sh
script that could result in a misleading message when theLOGTALKHOME
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 newlogtalk(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
andlogtalk_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 fileinitialization/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
andpaths_core.pl
files to always set the library aliaseslogtalk_home
andlogtalk_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
, andelif/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 fileinitialization/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 targetsdebug
,normal
, oroptimal
.
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
, andlogtalk_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 entityinitialization/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
exampleslat/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 theACKNOWLEDGMENTS.md
andCONTRIBUTING.md
files. -
UPDATED: The
logtalk_user_setup.sh
script to also create links to theintegration
andscripts
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
, andmultifile/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 thelogtalk.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 thetype
library object for type- checking lists with bounded terms. Term comparison uses standard order. -
ADDED: Types
non_empty_atom
andnon_empty_list
to the librarytype
object. -
ADDED: Types
difference_list
anddifference_list(Type)
to the librarytype
object and thearbitrary
category. -
ADDED: Type
ground(Type)
to thetype
library object and thearbitrary
category. -
ADDED: Support for generating and shrink arbitrary values for the new
list(Type, Min, Max)
type to thearbitrary
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 thearbitrary
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 theos
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 predicatesbetween/3
,sequence/4
, andset/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
categoryshrink/3
predicate where an empty list would be shrink to itself. -
FIXED: Fix typos in
meta_predicate/1
directives in the library objectsbintree
andrbtree
.
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 acceptsurl
,prefix
, andhost
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 amake(Target)
clause with acheck
orall
argument to define the make target action that will trigger the tests. -
ADDED: Utility predicate
assertion/1
to thelgtunit
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 thelgtunit
tool. This predicate is a reified version of thedeterministic/1
predicate. -
ADDED: Predicates
suppress_text_output/0
andsuppress_binary_output/0
to thelgtunit
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
orupdates
) to the source file line for the corresponding predicate clause. -
ADDED: Predicate
port/5
to theports
tool for public access to collected port profiling data. -
UPDATED: The
diagrams
tool optionexclude_libraries/1
to also exclude thescratch_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 GNUsed
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
andmsort/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 thefunctor/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 adeterministic
outcome for easier diagnosing of failed tests.
Examples
-
CHANGED: The
localizations
example to illustrate the use of the newlgtunit
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
andpatches
examples when using Windows. -
FIXED: The
dcgs
exampleiban
test to be skipped when using backend Prolog compilers with bounded arithmetic. -
FIXED: The
errors
example to allow itswarnings_loader
file to succeed with only warnings as intended with more backend Prolog systems. -
FIXED: The tests for the
birthdays
andphilosophers
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 predicateprint_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
andthis/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
, andresource_error/1
. These methods throw standarderror/2
exception terms and are equivalent to a sequence ofcontext/1
andthrow/1
method calls. -
ADDED: New
documentation
target to thelogtalk_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 thesettings-sample.lgt
file. -
ADDED: Shortcut
{#}
for callinglogtalk_make(documentation)
to all the adapter files. -
FIXED: Workaround lack of compliance of B-Prolog and Qu-Prolog
read_term/3
optionvariable_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
protocolreset_seed/0
andrandomize/1
predicates to therandom
object. -
ADDED: New random library
fast_random
andbackend_random
objects. -
ADDED: Options
prefixes/1
andsuffixes/1
to theos::directory_files/3
predicate. -
ADDED: Clauses for the
arbitrary::arbitrary/1-2
predicates to themaybe
object to allow generating random values for themaybe(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 themetap::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 predicatelogtalk_make_target_action/1
with targetdocumentation
on loading. The hook definition checks that a single doclet object is loaded and, if true, sends anupdate/0
message to it. -
REMOVED: The
code_metric_protocols
protocol. -
CHANGED: The
code_metrics
predicateentity_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 predicatesor_else_call/2
andor_else_fail/1
. -
ADDED: Unit tests for the
expected
library.
Examples
-
ADDED: A new example,
parvars
, providing an alternative version of theparametric
example using parameter variables instead of theparameter/2
andthis/1
built-in methods to access entity parameters. -
UPDATED: The
errors
example to illustrate detection of variable file terms when processinginclude/1
directives. -
UPDATED: The
buckets
multi-threading example to use the new librarybackend_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 returnmode/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 theoptional(_)::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 standardsub_atom/5
predicate).
Tools
-
CHANGED: Default value of the
lgtdoc
tool optionomit_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 addedcontext/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 thexml_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 auser
built-in predicate, acalls/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-Prologsort/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
, andrescale/3
to thenumberlist
library object. -
ADDED: Predicate
z_normalization/2
to thestatistics
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
tolgtunit
as a variant of the predicatebenchmark/2
returning the goal result (success
,failure
, orerror(Error)
). -
UPDATED: Generalized the
=~=/2
predicate oflgtunit
to also support the comparison of the corresponding elements in two lists of floats. -
FIXED: The
logtalk_tester
shell script no longer exports theLC_ALL
environment variable and instead uses it only locally to fix the tests sorting order when searching for thetester.lgt
andtester.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
andmutex_unlock/1
Prolog predicates in the implementation of thethreaded_engine_create/3
andthreaded_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
, andreexport/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
andthreads
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 standardpredicate_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
andreexport/1
directives.
Library
-
RENAMED: The
os::expand_path/2
predicate toos::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
, anddrop/3
to thelistp
,list
, anddifflist
entities. -
FIXED: Definition of the predicate
difflist::proper_prefix/2
. -
ADDED: Definition of type
optional
to theoptional
library object. -
ADDED: Definitions for number and float derived types to the
type
library object. -
FIXED: The definition of the type
nonvar
in thetype
library object to throw aninstantiation_error
when the checked term is not instantiated.
Tools
-
ADDED: Cross-referencing information to the
doclet
anddiagrams
tool entities. -
ADDED: Test outcome
false
as an alias to test outcomefail
. -
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
, andwrite_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
toolexclude_libraries/1
option to exclude thestartup
library by default. -
FIXED: Display of non-library nodes in library load and dependency diagrams.
-
FIXED: The
diagrams
tooldot_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
anddebug(_)
. These messages are only printed, by default, when thedebug
flag is turned on. -
ADDED: Property
includes(File)
to thelogtalk::loaded_file_property/2
predicate to allow enumerating, by backtracking, all files included by a loaded file (usinginclude/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 alldebug
anddebug(_)
messages into the equivalent of awrite(Message), nl
goal without the need to specifymessage_tokens//2
rules for converting the messages.
Library
-
ADDED: Type
qualified_callable
to thetype
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
andafter/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 systempublic
operator to avoid compilation syntax errors. -
UPDATED: Simplified the
operators
example to not require theos
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 intouser
.
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
andcurrent_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 theobject_property/2
andcategory_property/2
predicates now returns a list withnumber_of_rules(0)
andnumber_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 torestrict
. This notably allows use of static binding for calls to the librarytype::valid/2
andtype::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 thereload(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 thetest/2-3
dialects. -
CHANGED: Reporting of the
lgtunit
test dialectstest/2-3
when using thetrue(Assertion)
ordeterministic(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 theredis
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
, andpredicate_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
, anduse_module/2
directives. -
FIXED: Outdated
include/1
directive documentation on limitations that no longer apply. -
FIXED: Grammar description of the
dynamic/1
,multifile/1
, anduse_module/2
directives. -
FIXED: Typo in the error terms in the documentation of the
create_object/4
,create_protocol/3
, andcreate_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
, andonce/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
targetmissing
tocheck
. -
ADDED: Support for extending
logtalk_make/1
targets with user defined actions using the new multifile predicatelogtalk_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-inmake/0
predicate when callinglogtalk_make/0
orlogtalk_make/1
with theall
target. -
UPDATED: The SWI-Prolog hooks file to automatically call the built-in
make/0
predicate when callinglogtalk_make/0
orlogtalk_make/1
with theall
target.
Library
- FIXED: Bug in the
pairs::group_by_key/2
predicate.
Tools
-
CHANGED: The
dead_code_scanner
tool log messages from typeinformation
tocomment
so that the tool output is minimized when setting thereport
flag towarnings
. -
ADDED: Integration of the
dead_code_scanner
tool with thelogtalk_make/1
targetcheck
. -
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
, andoptimal
to thelogtalk_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 newlogtalk_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
toolitem/1
predicate toentity/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
, andlgtdoc
tools to take advantage of the newlogtalk::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
andself/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 asvolatile
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
tocovered_entities_numbers/3
and messageentity_clause_coverage/4
toentity_predicate_coverage/6
in thelgtunit
tool to improve code coverage reports. -
ADDED: Messages
entity_coverage_starts/1
,entity_coverage_ends/1
, andcovered_entities_numbers/3
to thelgtunit
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 librarytype
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 thetype::type/1
andtype::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 theforwarding
protocol. This avoids false positives when using e.g. thejava
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
, andenvironment_variable
for type-checking when using thetype
library object. -
ADDED: Support for types
stream
,stream_or_alias
,stream(Property)
, andstream_or_alias(Property)
to thetype
library object. Suggested by Barry Evans.
Tools
-
UPDATED: The
code_metrics
anddead_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
andself/1
built-in methods to check results when called from within multifile predicate clauses.
Examples
-
ADDED: Example
family_alt
providing an alternative version of thefamily
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
oruse_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
andrule/4
tofact/5
andrule/5
with the added argument being the container file to account for the improved support forinclude/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 thelogtalk_load_context/2
predicate to return the file being included when processing aninclude/1
directive. -
FIXED: Using
include/1
directives to include files that in turn also useinclude/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 towarnings
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 therandom
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
, andports
tools to account for the change to the debug events fromfact/4
andrule/4
tofact/5
andrule/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 alogtalk_library_path/2
multifile predicate definition in thecode_metrics
tool.
Tests
-
ADDED: Unit tests for the
include/1
entity directive to verify ordering ofinitialization/1
directive goals. -
ADDED: Unit tests for the
include/1
entity directive for checking thatdeclares/2
anddefines/2
properties include theline_count/1
andinclude/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 theinclude/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 aLogtalk
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
andoptimize
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 thetype
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
toolcontrol/4
predicate tocontrol_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 thetest/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 thedebug
andoptimize
flags. -
ADDED: Unit tests for the
create_object/4
,create_protocol/3
, andcreate_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
andnumber_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 tocall/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
, andconsult/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
andarray_to_terms/2-3
to thejava
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
anddiagrams
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
andobject_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 torestrict
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 theLOGTALKHOME
andLOGTALKUSER
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 theoptimize
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
orrepeat/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 theif/1
andelif/1
conditional compilation directives. -
FIXED: Bug where
initialization/1
directives in included files would be ignored when the main file also have one or moreinitialization/1
directives. -
FIXED: The convenient notation
{Proxy}::Message
to use parametric object proxies is now translated to({Proxy}, Proxy::Message)
before compilation as per documentation. This is also consistent with the compilation of other calls inuser
and provides a small performance improvement over the previous use of acatch/3
wrapper forProxy
. -
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 theportability
flag set towarning
.
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 libraryos
object. -
ADDED: Normalization of arithmetic evaluation errors when using XSB.
-
ADDED: Commented out experimental definition (to the
swihooks.pl
file) for the SWI-Prologprolog:make_hook/2
hook predicate to automatically calllogtalk_make/0
when callingmake/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
andprotected/1
directives regarding using declared non-terminals as arguments to thephrase/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 theos
library. -
ADDED: Predicate
value_reference/2
to the Java library. -
ADDED: Predicate
map/3
to thepairs
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
totrue
. -
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 (eithercpu
orwall
). Thewall
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
andtools_doclet
, illustrating linking diagrams using thezoom/1
option. -
IMPROVED: The
lgtdoc
tool now expands the directory and file arguments of thexml_docs_directory/1
,omit_path_prefixes/1
,exclude_files/1
,exclude_paths/1
,entity_xsl_file/1
, andindex_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 thedb_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 totrue
. -
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 multipleinitialization/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 fromuser
may be optimized.
Installers and installation scripts
-
IMPROVED: The
update_html_docs.sh
andupdate_svg_diagrams.sh
scripts now use theLOGTALKHOME
andLOGTALKUSER
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-objectuser
. -
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 inuses/2
anduse_module/2
directives and addnon_terminal/1
andalias/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 theprotocol
type. Thanks to Jan Burse for the bug report. -
FIXED: Missing public declarations for the
check/1
andvalid/1
predicates in thevarlistp
protocol. -
FIXED: Arity typos in the declaration of the meta-predicates aliases
scanl1/3
andscanr1/3
in themeta
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
, andspying/4
to thedebugger
tool. -
ADDED: A
epsilon/1
utility predicate to thelgtunit
tool. -
CHANGED: The
lgtunit
tool no longer depends on thedate
andtime
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
toolquick_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 thelgtunit::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 witherror/1
,errors/1
,ball/1
, andballs/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 thefiles/1-3
predicates into calls to thedirectories/3
predicate as thefiles/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
, andlgtdoc
tools. -
ADDED: Unit tests for the
calls/2
property of theobject_property/2
andcategory_property
built-in predicates. -
ADDED: Unit tests for the
info/1
,info/2
, andinclude/1
directives. -
ADDED: Unit tests for the
before/3
andafter/3
built-in methods. -
ADDED: Some more unit tests for the
self/1
,sender/1
, andthis/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
, andLogtalk.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 tojava
. 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 inuses/2
anduse_module/2
directives when using the newdead_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 themode/2
predicate directive. -
ADDED: Support for
one_or_error
determinism specification inmode/2
predicate directives. Useful for documenting type-checking predicates. -
IMPROVED: Detect attempts to call existentially quantified goals outside the scope of
bagof/3
andsetof/3
calls. -
FIXED: When compiling
uses/2
directives, don’t create a linking clause for runtime use for built-in predicates inuser
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
orlogtalk_make/1
with the targetall
. -
FIXED: Detection of missing predicates in
^^/1
calls when callinglogtalk_make/1
with the targetmissing
. -
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 librarytype
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
, andset_seed/1
predicates.
Tools
-
ADDED: QuickCheck support to the
lgtunit
tool. Includes both a newquick_check/2-3
test dialect andquick_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 optionxml_docs_directory/1
as relative to the current directory for consistency with thediagrams
tool. -
FIXED: The
lgtdoc
tool to use thestartup
library name only when no other library for the same path is defined. -
FIXED: The
lgtunit
tool to allow definingtest/3
tests with anote/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 thedebugger
tool with some backend Prolog compilers such as Lean Prolog.
Examples
-
ADDED: New
my_types
example of defining new types using the user-extensibletype
library object. -
ADDED: New
quick_check
example on how to use the QuickCheck support in thelgtunit
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 thelogtalk_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 predicatevariable_names
andterm_position
keys usable by thegoal_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
, andfindall/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
andlogtalk_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
tothreaded_engine_destroy/1
,threaded_engine_return/1
tothreaded_engine_yield/1
, andthreaded_engine_answer/2
tothreaded_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 returningthe(Answer)
,no
, andexception(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
, andyield
, 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
, andthreaded_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 thehelp
object. -
ADDED: Predicates
file/1-2
to thewrapper
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 thetest/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 thetest/3
testing dialect.
Tests
- ADDED: Unit tests for the new threaded engines built-in predicates.
Examples
-
RENAMED: Example
engines
tocarengines
. -
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 thebricks
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 ano
meta-predicate template for a Logtalk built-in predicate that is not a meta-predicate (the atomno
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 thelgtunit
tool. Useful for checking expected test results that contain variables. -
ADDED: Option
path_url_prefixes/3
to thediagrams
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
, andfiles/1
predicates to thediagrams
tool. -
ADDED:
file_extensions/1
option for use with thediagrams
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 onuse_module/1-2
directives and better advise onset_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 useLC_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 newpath_url_prefixes/3
option. -
FIXED: Bug in the
diagrams
tool where some predicate node captions would be missing when using the optionnode_type_captions(true)
. -
FIXED: Added missing
meta_predicate/1
directives for local predicates of thedebugger
,lgtdoc
, andlgtunit
tools.
Tests
-
ADDED: Unit tests for the new
eos//0
built-in non-terminal. -
ADDED: Unit tests for the
call//1-N
andphrase//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 onensure_loaded/1
andinclude/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 utilitydiagrams
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
, andcategory_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 theuser
pseudo-object must not require a bound argument as per documentation. -
FIXED: Calls to the
object_property/2
andcategory_property/2
built-in predicates withnumber_of_clauses/1
ornumber_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
andxunit_xml_output
to, respectively,xunit_report
andxunit_output
. -
CHANGED: The
lgtunit
objectstap_report
andxunit_report
no longer redirect the standard output stream to prevent tests output to corrupt the contents of generated TAP and XML files. -
CHANGED: The
tap_output
object in thelgtunit
tool no longer prints a dash between the test result and the test name. -
ADDED: Support for a
see_also
key to theinfo/1
entity documenting directive. Updated thelgtdoc
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
ortodo
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 thetest/3
dialect. -
FIXED: Bug in the
lgtunit
tool when tests results are redirected using theset_output/1
predicate and the a test uses the toolset_text_output/1
andcheck_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 directiveremarks
element were not checked. -
FIXED: Bug in the
logtalk_load/2
built-in predicate when called with theclean/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
orload_files/1-2
predicates (requires theswihooks.pl
file to be loaded as done by default by the integration scripts). With the help of Jan Wielemaker.
Library
- ADDED: Predicates
prefix/3
andsuffix/3
to thelistp
protocol and to thedifflist
andlist
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 theomit_path_prefixes/1
option. -
ADDED: The
lgtunit
tool now also printstests_started
andtests_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
andrdirectory/1-2
to thelgtdoc
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 thelgtdoc
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
toolrlibrary/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 withdb_once/2
anddb_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 alogtalk
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-Prologpublic
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
andhook_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
, andscan_right_1/3
to themetap
andmeta
entities. Also available using thefoldl1/3
,foldr1/3
,scanl1/3
, andscanr1/3
aliases. -
ADDED: The
metap
andmeta
entities now recognizemaplist/2-8
as aliases to themap/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 thelogtalk_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 totrue/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
andlog/1
built-in functions. Thanks to Jan Burse for this contribution. -
FIXED: Tests for the ISO Prolog standard
max/2
andmin/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
andexpand_goal/2
methods from a multifile predicate clause now look for clauses of theterm_expansion/2
andgoal_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
, andcurrent_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
andexpand_goal/2
methods from a category now look for clauses of theterm_expansion/2
andgoal_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
andgoal_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 theatom_codes/2
predicate for the portableos
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
andexpand_goal/2
built-in methods. -
ADDED: Unit tests for the
goal_expansion/2
andterm_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
, andcurrent_op/3
reflection methods to also test local calls from multifile predicate clauses. -
UPDATED: Unit tests for the
expand_term/2
andexpand_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 ause_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 thescripts
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 thestamp_date_time/3
predicate instead of the deprecatedconvert_time/8
predicate in the implementation of the portabledate_time/7
predicate. -
ADDED: Predicate
directory_files/2
to the portableos
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 thelgtunit
tool. -
ADDED: Predicates to the
wrapper
prototype tool to provide advise for files in a given directory. -
FIXED: The
wrapper
prototype tool to properly handlemultifile/1
anddynamic/1
directives specifying more than one predicate. -
FIXED: Bug in the
lgtunit
tool where variable sharing between the options argument of thetest/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 secondnumber_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 systemeval_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 theos
library.
Tools
-
NEW: Simple experimental tool for helping porting plain Prolog code.
-
ADDED: Missing
retry
trace option for thedebugger
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 anencoding/1
directive, thebegin_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 tologtalk::question_hook/6
by adding a tokens argument to simplify usage. -
CHANGED: The
logtalk::ask_question/5
predicate no longer requires also defining thelogtalk::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
, andcreate_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
, andassignvars_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 printtrue
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
andsetof/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 theassignvars
category into an object implementing this protocol. Added an alternativeassignvars
object providing a faster implementation for most backend Prolog compilers. Added anassignvars_loader
loader file that selects the version of theassignvars
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 newpatches
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 aline_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
, andthis/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
predicatedebugging/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 theget_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
, anddynamic/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
, anddynamic/1
directives whose argument includes explicit module-qualified predicate indicators. -
FIXED: Don’t try to expand goals wrapped using the
{}/1
control construct when compilinginitialization/1
,if/1
, andelif/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 thelgtunit
tool to test if some necessary condition for running a test unit holds. -
ADDED: Support for a
note/1
predicate to thelgtunit
tool to define a note to be printed after test results. -
ADDED: Support for a
test/3
unit test dialect to thelgtunit
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
, andpeek_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
, andpeek_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 tostrict
(for Prolog compilers claiming strict standards conformance) andlax
(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 thecreate_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 toerror
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 toUTF-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
andput_byte/1-2
standard predicates.
Tools
-
ADDED: Two predicates,
set_text_input/3
andset_binary_input/3
, to thelgtunit
tool to allow passing extra options to the implicit calls to theopen/4
built-in predicate. -
IMPROVED: API documentation of the
lgtunit
tool. -
UPDATED: The
debugger
,lgtunit
, andports
tools now also support checking for deterministic calls when using JIProlog as the back-end compiler. -
FIXED: The
lgtunit
tool now interpretstest/2
andsucceeds/1
facts as defining tests whose test goal istrue/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
, andread_term/3
that check for the correct exception term when reading past the end of a stream to use theeof_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
, andread_term/3
that check behavior when reading past the end of a stream created using theeof_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
, andnumbervars/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 thecatch/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
, andnumber_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
andlogtalk_load/2
built-in predicates now throw acompiler_flag
domain error instead of acompiler_option
for consistency. -
ADDED: Entity property
source_data
. True when the entity was compiled with thesource_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 thealias/2
directive),line_count/1
(the start line number of thealias/2
directive), andnon_terminal/1
(the alias is specified as a non-terminal). The non-terminal and line number information are only available when compiling with thesource_data
flag turned on). -
ADDED: Predicate properties
alias_declared_in/1
andalias_declared_in/2
, similar to thedeclared_in/1
anddeclared_in/2
properties but for predicate aliases, when defined. The second property is only available when compiling with thesource_data
flag turned on. -
ADDED: Definition for the
startup
library alias, corresponding to the Logtalk startup directory, to thepaths/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 foruses/2
anduse_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
, andlogtalk_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
andos::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 thezip
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
anduse_module/2
directives, on the control constructs, on thelogtalk_make/0-1
built-in predicates, and on thehook/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 theincludes/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-inmonitoring
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
andsynchronized
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 printbuilt_in
anddynamic
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
, andcalls/2
properties as protocols no longer supportinitialization/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 isfalse
, controls the output of source location data when writing the intermediate Prolog files generated by the compilation of Logtalk source files. Setting this flag totrue
is required for integration with some SWI-Prolog developer tools such as the graphical tracer. See thesettings-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
, andevents
flags todeny
for thelogtalk
built-in object. Theevents
flag change is of no consequence as this object doesn’t send messages to other objects. The change to thecomplements
flag enables the use of static binding when sending messages to this object. The change to thedynamic_declarations
flag aims to prevent conflicts with user added predicates when this object is eventually updated. -
FIXED: Set the
complements
flag to deny for theuser
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 theevents
flag toallow
. 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 totrue/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 theos_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
anddiscontiguous/1
directives. -
IMPROVED: When the
portability
flag is set towarning
, 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)
toexistence_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
andbom/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 libraryhome
using theUSERPROFILE
environment variable when running on Windows instead of the concatenation of theHOMEDRIVE
andHOMEPATH
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 expectedencoding_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 thelogtalk_compile/1-2
built-in predicates. Also added a note that XSB implements the de facto standardfindall/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 thelgtunit
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 predicatecheck_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
toolclean_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
orcoinductive/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
, andcoinductive/1
directives. -
ADDED: Some more unit tests for the
create_object/4
,create_category/4
, andcreate_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 valuesiso_strict
(for Prolog compilers claiming strict ISO Prolog Core Standard conformance) andiso_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
, andnth_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
, andports
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
anddefines/2
module properties to thediagrams
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 thehelp
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 optionsomit_path_prefixes/1
andoutput_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 todeny
). -
IMPROVED: The
logtalk_compile/1-2
andlogtalk_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
andterm_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
andlogtalk_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 themode/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 thecomplements
flag to value other thandeny
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
andrule/3
back tofact/4
andrule/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 theos
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 printsn/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 callingdebugger
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
andlogtalk_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
, andfoo.pl
files, whose intermediate Prolog files are now be named, respectively,foo_lgt.pl
,foo_logtalk.pl
, andfoo_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 theerror/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 thediscontiguous/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 theanalyze_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 thelogtalk
built-in object toexecution_context/7
to cope with the new execution context entity argument. -
CHANGED: The debug events
fact/4
andrule/4
tofact/3
andrule/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 factoformat/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 themodule/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 thelisting/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
andlgtunit
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 theparametric
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
anduse_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
andterm_expansion/2
. -
FIXED: Distinguish between valid key-value pairs for the
info/1
entity directive and for theinfo/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 aj
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
anddirectories/2-3
, to thediagrams
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 thexmldir
option is now relative to the source files directory instead of the current working directory when using therlibrary/1-2
,library/1-2
, andfile/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 theself/1
built-in method first and to pass to the meta-predicate aSelf::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
, andpredicate_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 thanbanner
,comment
,comment(_)
,warning
, andwarning(_)
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
andxsb-mt
. -
FIXED: Updated the
core/logtalk.lgt
file to workaround an apparentgplc
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 thediagrams
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 thecall
,redo
,exit
, andfail
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 removedsynchronized/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
, andthis/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 thedebug
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 flagsunknown_predicates
andundefined_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 toalways
for loader files during development. Thanks to Jan Wielemaker for his feedback on this issue. -
ADDED: Loaded file properties
object/1
,protocol/1
, andcategory/1
. -
FIXED: Bugs that prevented calling the
parameter/2
built-in method or thethreaded_wait/2
andthreaded_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
orspecializes/2-N
syntax.
Prolog adapter and integration files
- CHANGED: The
adapters/xpcehooks.pl
file have been renamed and moved to thexpce
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 standarderror/2
terms.
Examples
-
ADDED: Example
includes
, illustrating the use of the newinclude/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 thepredicate_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
, andmultifile/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 thescope/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
andpredicate_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 newalias/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 thealias/2
anduses/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 thecode_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 theintervalp
protocol and theinterval
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
, andsetof/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 thecomplements
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 apparentgplc
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 theuser
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
andlogtalk_load_context/2
.
Tools
-
ADDED: Utility object
diagrams
to thediagrams
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 methodsfiles/0-1
toall_files/0-1
andlibraries/0-1
toall_libraries/0-1
. -
CHANGED: Renamed the
diagrams
tool optionurl_protocol/1
tourl_prefixes/2
and added new optionsentity_url_suffix_target/2
andomit_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 theoutput_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 of1
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 theassertion/1-2
predicates, which now always succeed by default. Added support for using the term-expansion mechanism for either suppressing allassertion/1-2
calls or automatically adding context information to theassertion/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 inuser
. -
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 theroots
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 thecall/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 thecall/1
wrapper if necessary to ensure cut semantics. -
IMPROVED: Compilation of
bagof/3
andsetof/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 thegetpid/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
andsetof/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 thelogtalk::print_message_token/4
method declaration. -
CHANGED: The
predicate_property/2
built-in method now returns the propertynumber_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 thenumber_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 thedebugger
andlgtunit
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 byuser
. -
UPDATED: The GNU Prolog adapter file now only provides dummy definitions for the
current_module/1
,ensure_loaded/1
, anduse_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 thetypes_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 bashcommand
built-in command in thelogtalk_backend_select.sh
,logtalk_tester.sh
, andinstall.sh
POSIX shell scripts to avoidwhich
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
andsource
keys of the built-in predicatelogtalk_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
, andretractall/1
messages when sent to a known object with theoptimize
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 thescripts/NOTES.md
file.
Library
- ADDED: Portable operating-system interface, moved from the
cc
example. It can be loaded using theos_loader.lgt
file and notes on its limitations can be found in theos.txt
file.
Documentation
- CHANGED: Renamed most documentation
NOTES.txt
files that use Markdown syntax toNOTES.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
andcc/os.lgt
example files have been moved to the library. But thecc/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
andcreate_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 thesubsumes_term/2
,ground/1
, andterm_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 thevariant/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 valuerestrict
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
anduse_module/3
entity properties are no longer supported. -
ADDED: Entity property
calls/2
for querying cross-reference predicate call properties. These properties includecaller/1
,line_count/1
, andas/1
(when using a predicate alias). In the case of aninitialization/1
directive, the caller is identified as(:-)/1
. Due to limitations on most backend Prolog compilers, theline_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 thelogtalk::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 propertydefines/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 thelogtalk::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
tooltest/2
dialect outcome argument now supportstrue(Test)
,error(Error)
, andball(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 predicateunit/1
tocover/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 predicatescontrol/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{!}
andG = !, {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
andpredicate_property/2
messages to the pseudo-objectuser
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 thealias/3
,coinductive/1
,meta_predicate/1
, andmode/2
, predicate directives.
Examples
- UPDATED: Examples
expansion
andinheritance
to avoid a syntax clash with some backend Prolog compilers such as SWI-Prolog that define apublic
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 Prologdouble_quotes
flag fromcodes
tostring
. -
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 Prologdouble_quotes
flag fromcodes
tostring
.
3.00.0 Alpha 29 - October 31, 2013
Logtalk compiler and runtime
-
ADDED: * Property
mode/1
representing the file compilation mode (with possible valuesoptimal
,normal
, anddebug
) to the predicatelogtalk::loaded_file_property/2
. -
IMPROVED: Also reload a source file when the
reload
flag is set tochanged
and the file is not modified but the compilation mode changed due to a change to the global value of the flagsdebug
oroptimize
. -
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 theversion_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 thethreads/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 termlogtalk(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 oldversion
flag is still available for compatibility with Logtalk 2.x applications. -
CHANGED: The
logtalk::loaded_file_property/2
propertyflags/1
now returns both the explicit flags from alogtalk_load/2
call and the flags set within the loaded file using source-file levelset_logtalk_flag/2
directives. This allows e.g. flags such asreload/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 ancestorlogtalk_load/1-2
orlogtalk_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
anddiagrams
tools with support for the alternative.logtalk
source file extension. Allow the file argument of thefile/1-2
predicates to be given by its name, basename, full path, or by using library notation. Fixed bugs that could prevent using thefile/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 thelogtalk_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 predicateterm_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 theforwarding
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-objectuser
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 methodscompile_predicate_indicators/3
andcompile_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
methodstream_properties/1
property totext_properties/1
. -
FIXED: Regression in previous release when optimizing
(::)/2
calls due to the introduction of the newrestrict
value for thecomplements
flag. -
FIXED: When compiling a module as an object, occurrences of
ensure_loaded/1
anduse_module/1
directives that the backend Prolog compiler adapter file failed to expand into supporteduse_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 thelogtalk_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
andlogtalk::loaded_file_property/2
methods. The valid loaded file properties arebasename/1
,directory/1
,flags/1
,stream_properties/1
,target/1
, andmodified/1
. -
REMOVED: The
logtalk::loaded_file/2-4
methods are no longer available. -
REMOVED: The
logtalk
object methodsdecompile_predicate_heads/2-3
,compile_predicate_heads/2-3
,decompile_predicate_indicators/2-3
, andcompile_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 recognizeevents
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 predicatestream_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 theBPDIR
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
, andstreamvars.lgt
).
Tools
-
UPDATED: The
lgtdoc
tool now reports the newcomplements/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 fromuse_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 themodules
example. -
FIXED: Definition for the predicate
expand_path/2
for B-Prolog in thecc
example.
3.00.0 Alpha 24 - September 16, 2013
Logtalk compiler and runtime
-
ADDED: Built-in predicate
logtalk_make/1
, with possible argumentall
, for reload all modified source files, andclean
, for deleting intermediate files generated by the compilation of source files. -
ADDED: Key
target
to thelogtalk_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 theoptimize
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 theclean
compiler flag. -
IMPROVED: Performance of local meta-calls when using the
call/2-N
built-in predicates and thecall//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 compilerread_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 tocall/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 thelogtalk_make(all)
call and{!}
for thelogtalk_make(clean)
call. -
REMOVED: Alias
{}
for the built-in predicatelogtalk_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
andlogtalk_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 theinclude/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 predicatesterm_expansion/2
andgoal_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
keyfile
now returns the full path of the file being compiled, the same as thesource
key. This complies with the de fact standard meaning of this key in Prolog compilers implementing aprolog_load_context/2
predicate. The name of the file is now available using the newbasename
key. -
CHANGED: The
logtalk::loaded_file/3-4
methods now return compiler flags in the same format used by thelogtalk_compile/2
andlogtalk_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 valuesallow
anddeny
, that allows or disables loading a settings file at Logtalk startup. The adapter files set this flag toallow
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 theLOGTALKUSER
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
andmultifile/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 variableLOGTALKHOME
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 newlogtalk_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 librarypairs.lgt
file twice. -
IMPROVED: Compile the
diagrams
,help
, andlgtdoc
tools with theoptimize
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
andthis/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 equivalentuse_module/1-2
predicates. This change is also consistent with the current processing ofensure_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
exampleloader.lgt
file didn’t ensure compilation of the source files with theoptimize
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
andthis/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
andassertz/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
andthis/1
built-in execution-context methods. -
UPDATED: The
logtalk_tester.sh
script now also looks fortester.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
andlogtalk_user_setup.js
scripts now also copy back anysettings.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
anduses/2
directives. -
FIXED: Compile the clauses that allow runtime use of predicates specified in
uses/2
anduse_module/2
directives as auxiliary clauses. -
FIXED: The pseudo-object
user
no longer have thecomplements
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 theas/2
operator to define predicate aliases. -
FIXED: Compilation in debug mode for the built-in
current_logtalk_flag/2
andset_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 themake/0
utility of SWI-Prolog.
Tests
-
IMPROVED: The
logtalk_tester
shell script now supports running unit tests inoptimal
mode, besides the already supportednormal
anddebug
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 thediscontiguous/1
,initialization/1
,multifile/1
andset_logtalk_flag/2
built-in directives.
Examples
- REMOVED: Experimental examples
chr
andproblog
, 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 duplicateduses/3
anduse_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 kindscomment
andcomment(_)
for messages that provide useful but not essential information; theinformation
andinformation(_)
kinds are now reserved for messages printed in reply to a user request for information. Also, removed thebanner(_)
message kind and suppressbanner
messages when thereport
flag is set towarnings
. -
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 theuses/2
directive. -
FIXED: Compilation of calls to the
asserta/1
,assertz/1
, andretract/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 trueif/1
directive with anelif/1
part. -
IMPROVED: Support the specification of Prolog built-in (meta-)predicates in
uses/2
directives (where the first argument is necessarilyuser
).
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 Logtalkbuilt_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
andmeta_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
andfile_size/2
for Lean Prolog to thecc
example.
Installers and installation scripts
- IMPROVED: The Windows installer now deletes any XSB
.xwam
files found in existingadapters
,integration
, andpaths
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 theoptimize
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 tofinal
. -
REMOVED: The
smart_compilation
andreload
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 theclean
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 nowoff
. This is more consistent with the default values of other flags such assource_data
andclean
, 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
anduses/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
anduse_module/3
entity properties now also return information on sufficiently instantiated::/2
or:/2
goals. -
FIXED: The entity properties
uses/3
anduse_module/3
would not be recognized as valid when queried explicitly. -
FIXED: Protocols also have the properties
uses/3
anduse_module/3
as they may containinitialization/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
andcurrent_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
andretractall/1
predicates are no longer recognized as Logtalk built-in predicates. Theforall/2
predicate is a de facto standard predicate while theretractall/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
andsetof/3
calls. -
IMPROVED: Small performance optimization when calling lambda expressions.
-
FIXED: Bug in the compilation of calls to the
bagof/3
andsetof/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 objectlist
for GNU Prolog.
Tools
-
ADDED: Low-level trace option,
$
, for printing the compiled form of the current goal to thedebugger
tool. -
FIXED: A bug in the
debugger
tool preventing printing of the execution context (using the trace optionx
) for the top goal.
Examples
- CHANGED: In the
cc
example, use thestatistics/2
keycputime
in the implementation of the predicatecpu_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
andmode/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 thecurrent_logtalk_flag/2
andset_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 towarning
. -
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 tosimple
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 atomdirective
. -
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)
andexistence_error(ancestor, category)
are now used. -
IMPROVED: Performance of compilation of predicate clauses and grammar rules passed as arguments to the
create_object/4
andcreate_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
andcoinductive/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 theerror/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 haveline_count/1
property. -
NEW: Predicate property
auxiliary
, available when thesource_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 propertyincludes/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 thelogtalk::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 dummymeta_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 theforwarding
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 theexpanding
andmonitoring
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 thelgtdoc
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 thecc
example.
Installers and installation scripts
-
IMPROVED: Replaced the RPM
logtalk.spec
file by alogtalk.spec.in
file that’s processed by thebuild_rpm.sh
shell script by using the contents of theVERSION.txt
file. -
IMPROVED: The
build_release.sh
POSIX shell script now takes as an optional argument a version identifier, using the contents of theVERSION.txt
file as a fallback value. -
IMPROVED: The
logtalk.iss
Inno Setup script, used for building binary Windows installers, now use the contents of theVERSION.txt
file instead of hard-coding version information. -
IMPROVED: The
install.sh
,uninstall.sh
, andbuild_rpm.sh
POSIX shell scripts now use the contents of theVERSION.txt
file to define the name of the installation directory. Theinstall.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 flagcontext_switching_calls
set todeny
. -
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-inexpanding
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 ofunknown_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
andproblog
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
anduser
introduced in the previous alpha release. -
CHANGED: Always interpret
assert/1
calls and messages asassertz/1
. Previously, this would require a back-end Prolog compiler supporting theassert/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}
whereN
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 thelogtalk_load_context/2
built-in predicate for accessing the absolute path to the source file under compilation. -
CHANGED: Renamed the
logtalk_load_context/2
keyentity_name
toentity_identifier
for consistency. The now deprecatedentity_name
key is still supported and aliased toentity_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 andinfo/1-2
key-value pairs. -
FIXED: Error handling of the
threaded_call/2
,threaded_once/2
,threaded_exit/2
, andthreaded_peek/2
built-in predicates. In some cases, the exception term would not include alogtalk/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 toscripts/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 thecc
example. Corrected a typo in the definition of the predicatefile_size/2
for CxProlog. -
ADDED: Unit tests to the
constraints/sicstus
andlogging
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 thetests
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 theredefined_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
andlogtalk_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 havinguser
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 thepoints
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 ofsilent
and themissing_directives
compiler flags with a default value ofwarning
. -
NEW: Updated the compiler to perform error and portability checking for the Prolog standard
set_prolog_flag/2
andcurrent_prolog_flag/2
predicates and theset_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
andpredicate_property/2
messages sent to the pseudo-objectuser
. This allows consistent behavior across back-end Prolog compilers. -
NEW: Added a
loaded_file/4
predicate to thelogtalk
built-in object, which complements the existingloaded_file/2-3
predicates and gives access to the stream options (encoding/1
andbom/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
andset_logtalk_flag/2
goals. -
ADDED: Support for
predicate_property/2
propertiesnumber_of_clauses/1
,declared_in/2
,defined_in/2
, andredefined_from/2
. These properties are only available, however, when thesource_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 thenumber_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 thanuser
. Also addedgoal_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
andsubsumes_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 thesource_data
flag turned on). -
ADDED: Protocols for the
debugger
andlgtdoc
tool interfaces to facilitate defining alternative but compatible debugging and documentation tools.
Examples
-
MOVED: The
diagrams
,help
, andprofilers
examples have been moved to thetools
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 thecall//N
built-in non-terminal to thedcgs
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.