December 21st, 2011· Changed the compiler to take into account the uses/2 directive when compiling calls to the reflection built-in methods. This change extends the semantics of the uses/2 directive and allows easier migration from plain Prolog applications to Logtalk.
· Updated the implementation of the predicate_property/2 built-in method, adding a scope/1 property.
· Updated the Logtalk compiler to add information about a source file name, source file directory, and source file compiler options to the generated Prolog files. In previous versions, this information was registered only when loading a source file. The changes simplify building applications where Logtalk libraries are pre-compiled and pre-loaded.
· Updated the Logtalk compiler to print the name of the hook object used in the compilation of source files when the "hook" compiler flag is defined.
· Updated the built-in debugger in order to avoid unnecessary choice points created by back-end Prolog compilers whose retract/1 implementation fails to take advantage of logical update semantics to make calls deterministic.
· Corrected a bug in the Logtalk compiler runtime handler where it failed to decompile internal entity identifiers when throwing entity existence exceptions.
· Updated the Lean Prolog config file, adding index/1 directives for some of the dynamic predicates used by the internal Logtalk runtime tables.
· Updated the SWI-Prolog integration files to test for the availability of the index/1 directive, which is deprecated by the new experimental SWI-Prolog support for just-in-time multi-argument indexing.
· Added predicates subsequence/4 (for generating subsequences of a list with a given length), substitute/4 (for replacing elements in a list), and hamming_distance/3 to the library "listp" and "list" entities.
· Added euclidean_norm/2, chebyshev_norm/2, manhattan_norm/2, euclidean_distance/3, chebyshev_distance/3, manhattan_distance/3, and scalar_product/3 predicates to the library "numberlistp" and "numberlist" entities.
· Corrected some silly bugs in the definition of the "character" library object predicates is_bin_digit/1, is_octal_digit/1, is_dec_digit/1, and is_hex_digit/1.
· Updated the library "all_loader.lgt" loader file to also load the "meta_compiler_loader.lgt" loader file.
February 21st, 2011· Allow dynamic predicates declared in a category to be called in "this" from within the category. In previous versions, such calls would result in a compile-time error, forcing these predicates to be called in "self" using the ::/1 message sending control construct).
· Added Logtalk compiler support for pre-compiled clause heads (using the 1 control construct). This feature is mostly useful when using the term-expansion mechanism.
· Corrected a bug on the code that simplifies the predicate clauses generated by the compilation of grammar rules. The code would loop when a grammar rule contained a meta-variable, which the Logtalk compiler should (but currently don't) report as illegal (the call/1 control construct should be used instead on this case).
· Simplified the compilation of calls in the context of the pseudo-object "user".
· Added a debugger command "p" to the Logtalk built-in debugger. This command prints the current goal using the print/1 predicate when available. Renamed the debugger command "q" to "Q". Corrected a bug where the debugger command "w" would not be recognized. Changed the debugger command "d" to quote terms when necessary.
· Added a partial implementation of the ISO Prolog predicate_property/2 predicate to the ECLiPSe config file.
· Updated the SWI-Prolog config file in order to remove the erroneous
· declaration of the library meta-predicates dde_register_service/2, time/1, and when/2 as built-in meta-predicates.
· Applied a bug fix to the "flags" contribution made available by its author, Theofrastos Mantadelis. Workaround a compatibility issue with GNU Prolog.
· Added a memberchk/2 predicate to the library "setp" protocol and "set" object. Added predicates is_control/1, is_newline/1, and is_end_of_line/1 to the library "characterp" and "character" entities.
· Added an experimental example of using attributed variables within Logtalk objects and categories. Currently requires the use of YAP or SWI-Prolog as the back-end Prolog compiler.
· Added support for indexicals to the "constraints/sicstus" example.
· Extended the "delegates" example with a sample implementation of a delegator using a parametric object.
· Extended the "dynpred" example in order to illustrate how to define category predicates that handle dynamic predicates in the context of "this" and in the context of "self".
· Added a wall_time/1 predicate to the "cc" example.
· Updated the syntax highlighting test files, adding missing true/0 and fail/0 control constructs.
January 25th, 2011· Updated the Logtalk compiler in order to allow checking for module predicate properties without requiring importing the predicates into "user" (note, however, that the module must still be loaded prior to the compilation of source files calling the module predicates).
· Updated the Logtalk compiler in order to check compile-time instantiated closure arguments on call/2-N goals for common programming errors.
· Updated the Logtalk compiler in order to generate warnings for lambda expressions with variables that are not declared as either free variables or lambda parameters or with variables that are declared as both free variables and lambda parameters. Thanks to Jan Burse for suggesting these sanity checks.
· Updated the Logtalk runtime in order to support using the
December 22nd, 2010· Added support to the Logtalk compiler for detecting and reporting missing dynamic/1 and discontiguous/1 predicate directives.
· Added a new lint flag, "missing_directives", with a default value of "warning", to all config files. This flag enables printing of compiler warnings for missing dynamic/1, discontiguous/1, and multifile/1 predicate directives.
· Added support for new meta-predicate template mode indicators: (/) for a
· predicate indicator, [/] for a list of predicate indicators, and [0] for a list of goals.
· Corrected a bug in the Logtalk compiler when checking meta-predicate clause heads for errors where the "::" meta-argument mode indicator was still being interpreted as "0".
· Corrected a bug in the handling of closures (in meta-calls) that are used to construct calls to control constructs or built-in predicates
· which could result in calling some meta-arguments in the wrong context.
· Thanks to Ulrich Neumerkel for the illustrating example in the SWI-Prolog
· mailing list.
· Updated the Logtalk compiler in order to avoid printing warnings about missing references to the "expanding" and "monitoring" built-in protocols
· when compiling modules as objects.
· Reverted the changes in version 2.39.2 that allowed the pseudo-object
· "user" to virtually contain the definition of all Prolog built-in predicates. This could lead to different results depending on the back-end Prolog compiler, specially when calling meta-predicates in the context of "user".
· Corrected a bug in the SWI-Prolog "swihooks.lgt" file that resulted in
· a bogus error message about an invalid Logtalk flag when consulting a
· Prolog file when there is a Logtalk source file with the same name in
· the same directory.
· Added missing support for proprietary built-in meta-predicates to the
· B-Prolog, SICStus Prolog, SWI-Prolog, XSB, and YAP config files.
· Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order to
· override the meta-predicate templates for the consult/1 and load_files/2
· built-in predicates.
· Added an implementation of a map_reduce/5 meta-predicate to the library
· object "meta".
· Added an implementation of a command_line_arguments/1 predicate to the
· "cc" example.
· Updated the "lambdas" and "metapredicates" examples, illustrating how to
· calculate Fibonacci numbers using a fold left meta-predicate. Updated the
· "metapredicates" example with an usage example of the map_reduce/5 meta- predicate.
· Updated the "problog" example, adding preliminary support for the new
· annotated disjunctions syntax.
· Added a "magic" element to the Logtalk mime-type file for the freedesktop.org shared mime-info database.
December 2nd, 2010· Added an implementation of persistent object flags, contributed by
· Theofrastos Mantadelis.
· Added a new pair of built-in predicates, conforms_to_protocol/2-3,
· implementing the transitive closure of the protocol implementation
· relation.
· Added an experimental directive, annotation/1, for supporting Logtalk
· integration with other languages such as ProbLog and CHR.
· Reverted the changes in the previous release that allowed a stand-alone
· object to (also) be used as root of class hierarchies.
· Defined a set of low-level utility predicates, available as public methods
· from the "logtalk" built-in object. Modified the (virtual) compilation of
· this object in order to always interpret it as a prototype.
· Simplified and improved the performance of the predicate lookup caching
· code, resulting in improved dynamic binding performance. Simplified and
· improved the performance of the built-in methods asserta/1 and assertz/1
· when asserting a clause for a new predicate. Simplified the updating of
· the internal table for dynamically defined predicates when using the
· built-in methods retract/1 and retractall/1. Simplified the compiler
· code used when creating new entities.
· Changed the semantics of the "dynamic_declarations" flag so that it is
· only checked when sending an asserta/1 or assertz/1 message to an object.
· Local asserting of clauses for new predicates is now always allowed.
· Updated the implementation of the built-in method abolish/1 in order to
· also support abolishing of local dynamic predicates.
· Improved the performance of source file compilation by avoiding redundant
· cleaning of auxiliary compilation predicates.
· Modified the Logtalk compiler in order to interpret occurrences of ":" in
· module meta-predicate directives as equivalent to "::" instead of "0" in
· Logtalk meta-predicate directives. This change follows the current trend
· for de facto standardization for meta-predicate directives but is still
· problematic for some Prolog compilers. Logtalk will throw an exception
· when compiling calls to Prolog built-in meta-predicates or Prolog module
· meta-predicates whose template includes a ":" meta-argument specifier.
· Improved compiler error checking for entity relations, detecting and
· reporting most incorrect attempts to extend, instantiate, specialize,
· import, implement, or complement the wrong kind of entities.
· Implemented a parameter_names/1 property for parametric categories
· and parametric objects. Implemented a public/1 property for objects,
· protocols, and categories.
· Corrected a bug where the compilation (or dynamic creation) of parametric
· objects or parametric categories with instantiated parameters would fail
· to discard the parameter values in the runtime tables of defined entities.
· Added support for using explicit object qualification and explicit module
· qualification in meta_predicate/1 directives.
· Updated the implementation of the directives dynamic/1, discontiguous/1,
· and multifile/1 in order to remove explicit module qualification from the
· predicate indicator arguments when the module is "user".
· Updated the compilation of clause heads for module multifile predicates
· in order to remove the explicit module qualification when the module is
· "user".
· Updated the implementation of the built-in predicate logtalk_compile/2
· in order to ensure the same compiler options semantics for compiled code
· as the built-in predicate logtalk_load/2.
· Avoid a spurious choice-point created when reporting singleton variables
· during source file compilation with some back-end Prolog compilers such
· as ECLiPSe and SWI-Prolog.
· Corrected a error handling issue in the implementation of the built-in
· predicates logtalk_compile/2 and logtalk_load/2 where the error terms
· would be wrapped in an extra error/2 term.
· Updated the Logtalk compiler in order to also delete the intermediate
· files generated by the back-end Prolog compilers when compiling the
· Prolog files generated by Logtalk with the "clean" flag is set to "on".
· Updated the built-in objects, "logtalk" and "debugger", and the built-in
· protocols, "expanding" and "monitoring", to support static binding.
· Updated the term-expansion mechanism implementation in order to support
· the use of the {}/1 compiler bypass control construct to wrap elements
· in the list of expanded terms (returned by the term_expansion/2 built-in
· method when used in hook objects), to allow expansion of the end_of_file
· term, and to throw an instantiation error when term-expansion generates
· a list containing an element that is a variable.
· Interpret "prolog_compatible_version", "tabling", and "coinduction" as
· read-only flags. Removed documentation on the deleted "multifile_directive"
· flag. Added missing documentation on the "prolog_compatible_version" flag.
· Added support for accessing the compiler input stream using the built-in
· predicate logtalk_load_context/2 with the key "stream".
· Improved compile-time and runtime error handling for the blackboard
· built-in predicates.
· Updated the implementation of the built-in predicate set_logtalk_flag/2
· in order to switch off the clean (smart_compilation) flag when switching
· on the smart_compilation (clean) flag.
· Recognize logtalk_library_path/2 as a Logtalk built-in predicate when
· compiling source files.
· Corrected a bug where abolishing a dynamic category or a dynamic protocol
· compiled in debug mode would fail to update the internal table of entities
· compiled in debug mode.
· Corrected a bug in the processing of meta-calls when the called goal is
· an explicit message to an object where the receiver instead of the sender
· would be tested for events support.
· Corrected a static binding bug where meta-predicates called within other
· meta-predicates would not be correctly compiled. This bug prevented the
· "mtbatch" example from running.
· Corrected a bug in the Logtalk compiler second pass where processing
· calls to non-standard Prolog built-in meta-predicates would fail to
· test for Logtalk built-in predicates and Logtalk built-in methods with
· the same predicate indicator.
· Removed references to the de facto standard predicates retractall/1,
· compare/3, and callable/1 from all the config files of Prolog compilers
· where these predicates are built-in.
· Added declaration of file name extensions for intermediate files generated
· by the Prolog compilers themselves to the config files of B-Prolog, Ciao,
· Qu-Prolog, and XSB.
· Updated the config files of SICStus Prolog, SWI-Prolog, and YAP in order
· to parse the Prolog proprietary directive public/1 (whose semantics depend
· on the Prolog compiler).
· Updated the Qu-Prolog config file with support for accessing environment
· variables and updated definitions of file-system access predicates that
· avoid issues with file paths containing spaces. Logtalk now requires
· Qu-Prolog 8.12 or a later version.
· Updated the GNU Prolog config file in order to support the built_in_fd/0,
· built_in_fd/1, built_in/0, built_in/1, and ensure_linked/1 proprietary
· directives.
· Workaround a B-Prolog 7.4 bug where the built-in predicate callable/1 is
· missing the property "built_in". Declared the predicates and/3, equiv/3,
· and or/3 as built-in predicates. Added support for table/1 directives
· whose argument is predicate template with the cardinality limit omitted.
· Updated the Qu-Prolog integration files in order to avoid a segmentation
· fault when using a 32 bits compilation of Qu-Prolog. Thanks to Peter
· Robinson for his help in solving this problem.
· Added a YAP integration file, "yaphooks.pl", defining the hook predicate
· user:prolog_predicate_name/2.
· Commented out the setting of the proprietary Prolog flag "iso" to "true"
· in the SWI-Prolog config file due to all the module libraries that fail
· to compile/work in "iso" mode. Updated the implementation of the internal
· predicate '$lgt_expand_path'/2 in order to also expand directory paths.
· Added a workaround for ignoring the new operator public/1 introduced in
· SWI-Prolog 5.11.9 while compiling Logtalk source files.
· Renamed the SWI-Prolog integration files, "swihook.pl" and "xpcehook.pl"
· to, respectively, "swihooks.pl" and "xpcehooks.pl".
· Added a definition for the hook predicate user:prolog_predicate_name/2 to
· the SWI-Prolog hook file, "swihooks.pl". This hook predicate allows a more
· user-friendly experience when using the SWI-Prolog profiler with Logtalk.
· Requires SWI-Prolog 5.10.2 (stable) or 5.11.8 (development) or later
· versions. Thanks to Jan Wielemaker for his support on improving the usage
· of the user:prolog_predicate_name/2 hook on the SWI-Prolog profiler.
· Updated the library "types_loader.lgt" file to also load the heaps library
· files.
· Added an example, "diagrams", illustrating how to generate entity diagrams
· for a source file and for a library of source files using Logtalk reflection
· features and the DOT language.
· Added an example, "profilers", featuring simple wrappers for the SICStus
· Prolog 4 profiler and the YAP count profiler.
· Added an example, "delegates", illustrating an implementation of the
· delegation design pattern.
· Added a highly experimental example, "chr", of CHR integration. Currently
· requires the use of Qu-Prolog, SICStus Prolog, SWI-Prolog, or YAP as the
· back-end Prolog compiler.
· Added an experimental example, "constraints/sicstus", illustrating how
· to use the SICStus Prolog CLP(FD) library within objects and categories.
· Added individual examples of using B-Prolog Action Rules within objects
· to the "constraints/bp" example.
· Updated the "cc" example, adding support for Qu-Prolog, adding an
· operating_system_type/1 predicate, and correcting the declaration
· of the predicate shell/1.
· Updated the "help" example, allowing it to be loaded when using any
· supported back-end Prolog compiler. In addition, when help is requested
· for a functor that is both a built-in directive and a built-in predicate,
· both web pages will be open.
· Updated the "benchmarks" example in order to use more realistic tests for
· the database built-in predicates and the methods assertz/1 and retract/1.
· Updated the "operators" example in order to avoid a unit test failure
· when reloading the "triple.lgt" source file.
· Updated the "modules" example in order to use the use_module/2 directive
· which is supported by Logtalk) instead of the use_module/1 directive
· which is only supported for some back-end Prolog compilers) in the
· "client" module.
· Updated the "problog" example. Logtalk integration with ProbLog is much
· improved but requires the latest development version of ProbLog. Thanks
· to Theofrastos Mantadelis for his support on ProbLog.
· Added a fully connected graph path search problem, contributed by
· Theofrastos Mantadelis, to the "benchmarks" example.
· Corrected a bug in the use of the built-in predicate object_property/2
· in the "roots" example that would result in errors when deleting dynamic
· objects.
· Updated the "examples/tester.sh" script in order to also work when
· running Logtalk without using the installer packages or scripts.
· Updated the "build_release.sh" script in order to calculate all the
· necessary checksums when building the MacOS X installer package.
· Corrected a bug in the "logtalk_backend_select" shell script that
· prevented selecting GNU Prolog as the default back-end Prolog compiler.
October 7th, 2010· Modified the compilation of objects that don't instantiate, specialize,
· or extend other objects in order to allow their use as roots of either
· class hierarchies or prototype hierarchies. This change simplifies the
· definition of class hierarchies when reflexive designs are not required.
· Added support for the blackboard built-in predicates (bb_put/2, bb_get/2,
· bb_delete/2, and bb_update/3) found on some Prolog compilers such as YAP
· and SICStus Prolog. Note that a Prolog compiler natively supporting these
· predicates is required. This support aims to facilitate porting of Prolog
· applications using the blackboard; these predicates should be avoided when
· writing portable Logtalk applications.
· Simplified the internal representation of entity prefixes and entity
· predicate functors. The new representation is also a bit more compact.
· Corrected a bug in the compilation of clauses for multifile predicates
· defined in the pseudo-object "user" where the execution context for the
· clause body goals would be undefined.
· Corrected an optimization bug in the compilation of grammar rules that
· resulted in failed compilations whenever the body of a grammar rule was
· equivalent to fail/0. Thanks to Ulrich Neumerkel for the bug report.
· Corrected an optimization bug in the compilation of grammar rules that
· resulted in incorrect compilations when folding pairs of consecutive
· variable unifications generated as a by-product of the translation of
· grammar rules into clauses. Thanks to Ulrich Neumerkel for the bug report.
· Corrected a bug in the table of ISO Prolog specified arithmetic functions
· that is used by the Logtalk compiler when checking arithmetic expressions
· for portability (wrong arity of the bitwise complement function).
· Corrected a bug in the compilation of calls to Prolog proprietary built-in
· meta-predicates that are redefined within an object or category.
· Corrected a race condition bug when running multi-threaded code compiled
· in debug mode that could result in bogus failures.
· Corrected a bug in the definition of the built-in object "logtalk" when
· used as a root for a class hierarchy (two missing linking clauses for the
· implemented protocols).
· Set the default value for the Logtalk flag "code_prefix" to '$' for all
· supported back-end Prolog compilers.
· Updated the ECLiPSe config file in order to support compilation of the
· proprietary built-in predicate set_error_handler/2 and correct the buggy
· compilation of the proprietary built-in predicate set_event_handler/2.
· These two built-in predicates are only supported, however, when used as
· directives.
· Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order
· to correct a bug in the compilation of the ensure_loaded/1 directive
· when used within a Prolog module being compiled as an object.
· Updated the YAP config file to workaround a bug in the built-in predicate
· absolute_file_name/3 where a directory can be returned when looking for a
· regular file (fixed in the current beta of the 6.0.7 version).
· Restored the hacks in the SWI-Prolog and YAP config files, broken in
· the previous release, that allow calling the Prolog built-in predicates
· phrase/2-3 with a Object::GRBody goal in the first argument.
· Updated the SWI-Prolog config file in order to use the numbervars/3 option
· singleton(true) in the auxiliary predicates for pretty printing non-ground
· terms.
· Added predicates intersection/4 and union/4 to the library support for
· ordered sets (protocol "setp" and object "set").
· Added a highly experimental example of ProbLog integration. Requires
· Logtalk to be run with YAP; it may also require a patched version of
· the ProbLog distribution.
· Updated the "multifile" example to illustrate how the body of clauses for
· multifile predicates is compiled.
· Removed some unused files from the "coinduction" example.
September 16th, 2010· Added experimental support for coinductive predicates to the Logtalk
· compiler using a coinductive/1 directive. Requires a back-end Prolog
· compiler providing minimal support for cyclic terms (currently, YAP
· CxProlog, ECLiPSe, SICStus Prolog, and SWI-Prolog). Thanks to Gopal
· Gupta, Neda Saeedloei, Feliks Kluzniak, Ajay Bansal, and Vitor Santos
· Costa for feedback and implementation suggestions
· Added a "coinductive" predicate property
· Added a "coinduction" read-only flag
· Added a new Logtalk built-in predicate, logtalk_load_context/2, similar
· to the prolog_load_context/2 built-in predicate found in several Prolog
· compilers, in order to provide access to the compilation/loading context
· The initial set of supported context keys is {entity_name, entity_prefix
· entity_type, file, directory, term_position}. The term_position key is
· only supported in back-end Prolog compilers that provide the start and
· end lines of a read term
· Simplified the Logtalk compiler by using stream aliases
· Updated the implementation of the create_object/4 and create_category/4
· built-in predicates in order to also support the definition of an initial
· set of grammar rules
· Corrected a bug in the runtime error handler that would result in entity
· existence errors being reported as (internal) predicate existence errors
· Corrected a bug where the protocols implemented by the built-in object
· "logtalk" would not be returned by the implements_protocol/2-3 built-in
· predicates
· Corrected a bug where multifile/1 directives would only accept a single
· predicate indicator as argument
· Corrected a bug where compiling an explicit module-qualified module meta-
· argument would result in a compilation loop when the qualified goal is a
· variable
· Ciao Prolog 1.10 is no longer supported as this compiler fails to provide
· support for ISO Prolog standard stream aliases and the stream_property/2
· built-in predicate. Support for this Prolog compiler will be reevaluated
· when a new stable version becomes available
· ECLiPSe 6.0#141 or a later version is now required when using this
· back-end Prolog compiler due to use of stream aliases in the Logtalk
· compiler
· Updated the CxProlog config file to require version 0.97.5 or later. This
· version adds the epsilon/0 arithmetic constant that is used in the library
· unit test support
· Updated the SWI-Prolog and YAP config files in order to support the
· expects_dialect/1 proprietary directive
· Removed the definitions of the no longer necessary '$lgt_keysort'/2 and
· lgt_sort'/2 internal predicates from the supported config files
· Updated the shell scripts used for generating the PDF versions of the
· Logtalk User and Reference Manuals for better performance and to fix an
· incompatibility with recent versions of the xsltproc XSLT processor
· Updated the "library/lgtunit_loader.lgt" helper file to avoid entity
· redefinition warnings when loading the "library/all_loader.lgt" helper
· file from the "library" directory itself
· Added an example, "adventure", with Logtalk adaptations of Prolog text
· adventures originally written by David Matuszek and Dan Cliburn
· Added an experimental example of coinduction when using CxProlog, ECLiPSe
· SICStus Prolog, SWI-Prolog, or YAP as the back-end Prolog compiler
· Updated the "constraints/swipl/loader.lgt" helper file to avoid the errors
· generated when loading the CLP(FD) library with the SWI-Prolog "iso" flag
· set to "true"
· Updated the "dcgs" example unit tests to avoid a compilation error when
· using SWI-Prolog 5.11.3 and later versions due to changes in this compiler
· parser for stricter ISO Prolog syntax
· Updated the "help" example in order to provide help for Logtalk built-in
· directives
· Updated the "examples/tester.sh" script in order to fix a compatibility
· issue with XSB
· Added support for the SHJS syntax highlighter
· Added syntax coloring support for the new coinductive/1 predicate
· directive to all supported text editors and syntax highlighters
· Updated the TextMate commands used for generating (X)HTML, PDF, and TXT documentation in order to be independent of the default settings for the
· "altdirs" and "xmldir" compiler flags
September 16th, 2010· Added experimental support for coinductive predicates to the Logtalk compiler using a coinductive/1 directive. Requires a back-end Prolog compiler providing minimal support for cyclic terms (currently, YAP, CxProlog, ECLiPSe, SICStus Prolog, and SWI-Prolog).
· Added a "coinductive" predicate property.
· Added a "coinduction" read-only flag.
· Added a new Logtalk built-in predicate, logtalk_load_context/2, similar to the prolog_load_context/2 built-in predicate found in several Prolog compilers, in order to provide access to the compilation/loading context.
· The initial set of supported context keys is {entity_name, entity_prefix, entity_type, file, directory, term_position}. The term_position key is only supported in back-end Prolog compilers that provide the start and end lines of a read term.
· Simplified the Logtalk compiler by using stream aliases.
· Updated the implementation of the create_object/4 and create_category/4 built-in predicates in order to also support the definition of an initial set of grammar rules.
· Corrected a bug in the runtime error handler that would result in entity existence errors being reported as (internal) predicate existence errors.
· Corrected a bug where the protocols implemented by the built-in object "logtalk" would not be returned by the implements_protocol/2-3 built-in predicates.
· Corrected a bug where multifile/1 directives would only accept a single predicate indicator as argument.
· Corrected a bug where compiling an explicit module-qualified module meta- argument would result in a compilation loop when the qualified goal is a variable.
· Ciao Prolog 1.10 is no longer supported as this compiler fails to provide support for ISO Prolog standard stream aliases and the stream_property/2 built-in predicate. Support for this Prolog compiler will be reevaluated when a new stable version becomes available.
· ECLiPSe 6.0#141 or a later version is now required when using this back-end Prolog compiler due to use of stream aliases in the Logtalk compiler.
· Updated the CxProlog config file to require version 0.97.5 or later. This version adds the epsilon/0 arithmetic constant that is used in the library unit test support.
· Updated the SWI-Prolog and YAP config files in order to support the expects_dialect/1 proprietary directive.
· Removed the definitions of the no longer necessary '$lgt_keysort'/2 and '$lgt_sort'/2 internal predicates from the supported config files.
· Updated the shell scripts used for generating the PDF versions of the Logtalk User and Reference Manuals for better performance and to fix an incompatibility with recent versions of the xsltproc XSLT processor.
· Updated the "library/lgtunit_loader.lgt" helper file to avoid entity redefinition warnings when loading the "library/all_loader.lgt" helper file from the "library" directory itself.
· Added an example, "adventure", with Logtalk adaptations of Prolog text adventures originally written by David Matuszek and Dan Cliburn.
· Added an experimental example of coinduction when using CxProlog, ECLiPSe, SICStus Prolog, SWI-Prolog, or YAP as the back-end Prolog compiler.
· Updated the "constraints/swipl/loader.lgt" helper file to avoid the errors generated when loading the CLP(FD) library with the SWI-Prolog "iso" flag set to "true".
· Updated the "dcgs" example unit tests to avoid a compilation error when using SWI-Prolog 5.11.3 and later versions due to changes in this compiler parser for stricter ISO Prolog syntax.
· Updated the "help" example in order to provide help for Logtalk built-in directives.
· Updated the "examples/tester.sh" script in order to fix a compatibility issue with XSB.
· Added support for the SHJS syntax highlighter.
· Added syntax coloring support for the new coinductive/1 predicate directive to all supported text editors and syntax highlighters.
· Updated the TextMate commands used for generating (X)HTML, PDF, and TXT documentation in order to be independent of the default settings for the "altdirs" and "xmldir" compiler flags.
July 6th, 2010· Restored support for GNU Prolog. Requires GNU Prolog version 1.4.0 (or later), which provides support for the ISO Prolog predicate directive multifile/1.
· Improved the built-in debugger by making explicit the calls to the (\+)/1 built-in predicate.
· Corrected a bug where a call to a local predicate would always fail when an object or category contains a declared but not defined non-terminal.
· Corrected a bug in the compilation of (\+)//1 calls in grammar rules.
· Recognize retractall/1, ground/1, keysort/2, sort/2, and numbervars/3 as de facto Prolog standard built-in predicates. Calls to these predicates will no longer be reported when the portability flag is set to "warning". In addition, added syntax coloring support for these predicates.
· Recognize e/0 and pi/0 as de facto Prolog standard built-in arithmetic functions. Calls to these functions will no longer be reported when the portability flag is set to "warning". In addition, added syntax coloring support for these two functions.
· Updated the internal hook predicate '$lgt_tr_predicate_indicators'/2, used in the config files for processing proprietary Prolog directives, in order to translate both grammar rule non-terminal indicators and predicate indicators. A possible usage scenario is tabling grammar rule non-terminals.
· Updated the definition of the Logtalk flag "prolog_version" for Ciao in order to compute major, minor, and patch version numbers.
· Corrected a bug in the goal_expansion/2 clauses found on the SWI-Prolog and YAP config files that are used for expanding calls to the Prolog built-in predicates phrase/2-3 with a Object::GrammarRuleBody in the first argument.
· Updated the B-Prolog config file to require version 7.4 or later and to workaround a missing "built_in" property for the built-in predicate setup_call_cleanup/3.
· Added unit tests for the "securemp" and "constraints/gprolog" examples.
· Improved the "debug_hooks" example, showing how to use a parametric hook object in alternative to two simple hook objects.
· Improved the "help" example by adding a helper predicate for quick access to the Logtalk User and Reference manuals. Added support for CxProlog.
· Added partial support for CxProlog to the "cc" example in order to support the "help" example.
· Updated the "multifile" example in order to avoid compilation errors when using a back-end Prolog compiler (such as B-Prolog) that doesn't support discontiguous predicates.
· Improved the "examples/tester.sh" script in order to print the current time and date, plus the Logtalk and back-end Prolog compiler versions, and to abstract the different syntax requirements for initialization goals used by Prolog compilers.
June 16th, 2010· Bundled version 1.0 of Verdi Neruda, a meta-interpreter collection that includes both top-down and bottom-up search strategies.
· Added experimental on-line help support using the new "help" example. See the example "NOTES.txt" file for a list of current operating-system and back-end Prolog compiler limitations.
· Changed the representation of meta-argument which are goals in the meta_predicate/1 directives from "::" to "0". When compiling calls to Prolog module meta-predicates, the meta-argument indicator ":" is interpreted as "0", which will work for most cases. Due to the lack of standardization of the Prolog meta_predicate/1 directive, special care must taken when calling both Prolog proprietary built-in meta-predicates and Prolog module meta-predicates.
· Changed the implementation of the term and goal expansion mechanisms in order to only be performed automatically by the Logtalk compiler when compiling a source file. When dynamically creating entities at runtime or when asserting clauses, the term_expansion/2 and goal_expansion/2 built-in methods must be called explicitly.
· Corrected a bug when using the ::/2, ::/1, ^^/2, and :/1 Logtalk control constructs from bagof/3 and setof/3 calls with existentially quantified variables. This bug could result in missing alternative solutions when backtracking over the bagof/3 and setof/3 calls.
· Updated the Logtalk compiler implementation in order to simplify passing of compilation context data.
· Updated the Logtalk compiler in order to throw a permission error if the
· user attempts to define clauses for the (>>)/2 control construct used in
· lambda expressions.
· Updated the Logtalk compiler in order to preprocess proprietary Prolog directives within entities (using any defined config file hooks) after term-expansion but before trying to compile the directives as Logtalk directives. This change allows for simpler and more robust handling of Prolog proprietary directives, specially module directives.
· Recognize callable/1 and compare/3 as Prolog standard built-in predicates. Calls to these predicates will no longer be reported when the portability flag is set to "warning". In addtion, added syntax coloring support for these two predicates.
· Added support for the built-in non-terminal call//1 specified in the ISO Prolog standardization proposal for Definite Clause Grammars.
· Improved the implementation of Definite Clause Grammars in order to rewrite exceptions generated when processing NonTerminal, ::NonTerminal, and Obj::NonTerminal goals in grammar rules to refer to non-terminals instead of compiled predicate forms when running in debug mode.
· Changed the scope of the built-in methods phrase/2-3 from public to private for consistent meta-predicate semantics. Updated the "dcgs" example and the corresponding unit tests in order to comply with the new phrase/2-3 predicate scope.
· Corrected a bug in the implementation of the phrase/2-3 built-in methods that could allow access to non-visible grammar rules.
· Improved performance of Module:NonTerminal goals in grammar rules.
· Corrected a bug in the implementation of the dynamic/0 directive where the Logtalk compiler would fail to generate all the necessary dynamic/1 predicate directives. Bug introduced in the previous stable release.
· Corrected a bug in the implementation of the clause/2 built-in method where an error would be generated when trying to access clauses for local dynamic predicates without a corresponding dynamic/1 directive within objects and categories with a dynamic/0 directive.
· Corrected a bug in the compilation of meta-calls and the
May 4th, 2010· Changed the internal representation of most entity properties to use a more compact bit representation, stored in the tables of loaded entities.
· Changed the internal representation of non-critical predicate properties to use a more compact bit representation, which includes the "multifile" predicate property, stored in the tables of entity declared predicates.
· Changed the type of the built-in methods (\+)/1, call/N, once/1, catch/3, throw/1, bagof/3, findall/3, forall/2, setof/3, self/1, sender/1, this/1 and parameter/2 from local predicates to private predicates. Corrected a bug in the predicate_property/2 built-in method where some of those built- in methods would be reported as public. These changes should only require updating any application code that explicitly expected the exception term permission_error(access, local_predicate, Pred), which have been changed to permission_error(access, private_predicate, Pred).
· Added support for parsing operator declarations in the uses/2, public/1, protected/1, and private/1 directives.
· Updated the Logtalk compiler in order to avoid generating unnecessary (but harmless) catchall clauses for predicate declaration lookups when there are no local predicate declarations.
· Updated the Logtalk compiler in order to convert calls to the non-standard assert/1 built-in predicate as calls to the assertz/1 built-in predicate.
· Updated the Logtalk compiler in order to reject use_module/2 directives where the first argument is not an atom (assumed to be the module name). This change results in using the config files to find the module name from the module file name when the first argument of the use_module/2 directive is a compound term (as usual when using library notation).
· Updated the definition of the pseudo-object "user" in order to virtually contain the definition of all Prolog built-in predicates.
· Updated the definition of the built-in object "logtalk" in order to implement the built-in protocols "expanding" and "monitoring".
· Updated the "expanding" built-in protocol in order to declare the predicates goal_expansion/2 and term_expansion/2 as both dynamic and multifile.
· Corrected a bug in the Logtalk compiler where a misleading error would be reported when a source file contains a clause or a directive that is a plain variable.
· Corrected a bug in the Logtalk compiler where a broken term_expansion/2 definition expanding a term to a variable would succeed instead of throwing an error.
· Optimized meta-calls when using closures wrapped in the {}/1 control construct. Removed redundant check for debugging mode when executing meta-calls.
· Corrected a potential bug in the Logtalk runtime when updating the meta-call context for lambda expressions that could result in losing part of the context.
· Corrected a bug in the Logtalk runtime where errors generated when calling the phrase/2 built-in method would be reported as resulting from calls to the phrase/3 built-in method.
· Corrected a bug in the implementation of the predicate_property/2 built-in method that allowed access to properties on non-visible predicates.
· Updated the predicate_property/2 built-in method in order to generate meta-predicate templates for the call/2-N built-in methods, to return "multifile" properties for Prolog built-in predicates, and to support two new properties, "logtalk" and "prolog", that allows us to distinguish between predicates defined by Logtalk and predicates defined by the back-end Prolog compiler.
· Corrected a bug in the Logtalk built-in debugger that would prevent user interaction at the "fact" and "rule" unification ports by always skipping to the next port, ignoring leash settings.
· Corrected a bug in the processing of the conditional directives that would result in an hanging else/0 directive when the "then" block of a false "if" was a "if...else...endif" block.
· Added support for the predicate renaming operator as/2 found on SWI-Prolog and YAP but only when parsing use_module/2 directives in modules that are being compiled as objects.
· Updated the SWI-Prolog hooks file, "configs/swihook.pl", in order to avoid intercepting Prolog ensure_loaded/1 calls by the prolog_load_file/2 hook predicate. This change solves issues when calling Prolog module library predicates from within Logtalk objects and categories.
· Changed the predicate '$lgt_pl_meta_predicate'/2 in all supported config files to '$lgt_pl_meta_predicate'/3 in order to simplify the handling of proprietary built-in meta-predicates by the Logtalk compiler and runtime.
· Updated the ECLiPSe, SICStus Prolog, SWI-Prolog, and YAP config files in order to preprocess the use_module/2 directive, converting the module file name into the module name.
· Updated the SWI-Prolog and YAP config files in order to preprocess the reexport/2 module directive, converting the module file name into the module name, and in order to ignore the meta-predicate declaration of the directives/predicates use_module/1-2.
· Updated the SWI-Prolog config file with more robust and fast code for preprocessing module directives when the modules are already loaded. Also added support for the new use_foreign_library/1-2 proprietary directives and partial support for modules that take their name from the file name.
· Updated the YAP config file in order to use the more standard predicate working_directory/2.
· Added support for parsing use_module/3 directives to the SICStus Prolog config files. Improved finding the module name from the module file name when preprocessing the directives use_module/1-2.
· Moved the "eclipse6.pl" config file to the "configs/unsupported" folder as Logtalk only supports ECLiPSe using the "eclipse6iso.pl" config file. Updated the "eclipse6iso.pl" config file with partial parsing solutions for some proprietary ECLiPSe directives.
· Updated the ECLiPSe config file with more robust code for parsing use_module/1 directives, capable of processing both ECLiPSe module/1 directives and the module/2 directives used by other Prolog compilers.
· Updated the B-Prolog config file in order to support foreach/2-N calls for any valid value of N (previous versions of the config file only supported foreach/2-4 calls).
· Updated the Qu-Prolog integration script, "qplgt.sh", in order to use larger memory values for the code and environment areas an in preparation for its next release.
· Replaced the predicate as_dictionary/2 in the library object "bintree" with a new implementation, contributed by Paul Fodor, that returns a semi-balanced tree.
· Added a predicate and an operator definition, =~=/2, for comparing floats for approximate equality to the library object "lgtunit". Updated the unit tests of several examples in order to use this predicate.
· Updated the "examples/tester.sh" script in order to report an error when the default Prolog back-end compiler is not found. Updated the script to also report errors that are not written to standard error and to print a note when a unit test is not applicable.
· Updated the "encodings" example unit test loader file to correctly detect back-end Prolog compilers supporting the encoding/1 directive. Added new test files for each supported text encoding.
· Added some more unit tests for the "reflection" example.
· Fixed a typo that prevented running the "mtbatch" example using XSB as the back-end Prolog compiler.
· Simplified the "cc" example when using SICStus Prolog 4.x as the back-end compiler by moving importing of the "system3" library shell/1-2 predicates to the config file.
· Added unit tests for the "constraints", "hooks", "miscellaneous", and "people" examples.
· Corrected a bug in the "lambdas" example (a missing meta_predicate/1 directive in the object "sigma").
· Improved "inheritance" example in order to better illustrate inheritance semantics for classes and instances. Added a set of unit tests.
· Updated the implementation of the best first heuristic state space search method in the "searching" example in order to avoid unnecessary meta-calls.
March 31st, 2010· Updated the Logtalk compiler and runtime to support calls to the built-in predicates threaded_peek/2 and threaded_exit/2 where the second argument (thread tag) is only instantiated at runtime. Updated the exception term thrown by threaded_exit/2 when the thread goal don't exist to use error/3 instead of error/2.
· Updated the implementation of the uses/2 directive in order to allow safe use of the declared shortcuts at runtime.
· Corrected a bug when using the use_module/2 directive that resulted in a performance penalty when calling module predicates.
· Updated the Logtalk compiler to warn the user when finding deprecated directives.
· Updated the Logtalk compiler to recognize "prolog_compatible_version" and "tabling" as valid flags.
· Updated the Logtalk compiler to compile settings files with the compiler flag "altdirs" turned off in order to avoid problems with directory permissions for back-end Prolog compilers, such as Ciao and XSB, which require the first run of Logtalk to be made by an administrative user.
· Corrected a bug in the Logtalk compiler that forced recompilation of source files when the "smart_compilation" flag was set to "on".
· Corrected an erroneous compiler warning when reporting referenced but unknown objects when using the {Object}::Message notation. Thanks to Parker Jones for the bug report.
· Corrected a bug in the
February 9th, 2010· Added support for calling :/1 goals using the
December 21st, 2009· Added support for using the {}/1 compiler bypass Logtalk control construct to wrap closures that should be executed within the context of the pseudo-object "user" (e.g. calls to Prolog built-in predicates).
· Workaround module meta-predicate semantics in order to support calls to module meta-predicates specified in use_module/2 directives within objects and categories.
· Added support for compiling calls to module meta-predicates that are explicitly qualified (may require that the modules are loaded, depending on the back-end Prolog compiler).
· Code cleanup of meta-predicate directives compilation. Tighten checks of meta-predicate directives and meta-predicate directive arguments.
· Improved compilation of call/2-N goals.
· Improved performance of meta-calls that are compiled at runtime.
· Improved performance of the lambda expression Free/Goal, usually used in bagof/3 and setof/3 calls.
· Improved lambda expression error-checking and added support for using a (>>)/2 lambda expression as a goal.
· Corrected a bug in handling the meta-call context for lambda expressions.
· Corrected a typo in the exception term generated when sending a message to an object corresponding to a built-in local method.
· Updated the CxProlog config file in order to set write term and write list limits that allow compilation of the Logtalk libraries and examples (the default values are two low in some cases leading to compilation errors).
· In addition, take advantage of the new "version_data" flag, thus requiring version 0.97.4 or a later version.
· Updated the SWI-Prolog config file in order to recognize and compile the proprietary directive at_halt/1.
· Updated the B-Prolog config file in order to add a missing meta-predicate declaration for the proprietary foreach/2 built-in predicate.
· Updated the YAP config file by adding a missing declaration for the time/1 proprietary built-in meta-predicate and by commenting out setting the call that sets the "language" flag to "iso" due to all the YAP libraries that don't compile with this setting.
· Updated the XSB config file by adding a missing declaration for the time/1 proprietary built-in meta-predicate and a definition for the predicate setup_call_cleanup/3 (in order to restore compatibility with the Logtalk multi-threading features).
· Updated all config files with information on the availability of the setup_call_cleanup/3 predicate.
· Expanded the "lambdas" example with a contribution by Artur Miguel Dias, more sample queries (including non-deterministic ones), and some simple benchmarks.
· Added syntax coloring support for the ^/2 existential quantifier operator for most supported text editors and syntax highlighters. Added sample code using the ^/2 existential quantifier to the syntax coloring test file.
December 4th, 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
July 7th, 2009· Added support for parsing reexport/2 module directives when compiling
· Prolog modules as Logtalk objects. The predicate renaming operator as/2
· found on SWI-Prolog and YAP is also supported
· Added support for using grammar rule non-terminal indicators in the uses/2
· multifile/1, reexport/2, and use_module/2 directives
· Added support for parsing operator declarations in the module/2, export/1
· reexport/2, and use_module/2 module directives
· Added support for declaring and defining object and category multifile
· grammar rules
· Corrected a bug where a failed load of a settings file could be reported
· as successful
· Corrected a bug when compiling an object or category normal predicate that
· redefines a built-in Prolog meta-predicate
· Added missing dynamic directives in the definition of the pseudo-objects
· "debugger" and "user"
· Eliminated message-sending overheads when sending messages to the pseudo-object "user"
· Allow the "debugger" built-in object to play the role of both a class and
· a prototype when being specialized or extended
· Added support for compiling module-qualified arguments in calls to Prolog
· database and reflection built-in predicates
· Added support for using multiple info/1 directives per entity and multiple
· info/2 directives per predicate (useful when compiling modules as objects)
· Added limited support for translating queries as initialization goals when
· compiling modules as objects (queries must be calls to locally defined
· predicates or to predicates referenced in use_module/2 directives)
· Optimized performance of meta-predicates whose meta-arguments are goals
· not closures, when using static binding
· Improved automatic generation of XML documenting files for parametric
· objects when no parameter names are given
· Updated the SWI-Prolog config file in order to support the proprietary
· predicate directives format_predicate/2, noprofile/1, and volatile/1
· Updated the SICStus Prolog, SWI-Prolog, and YAP config files in order to
· workaround broken meta-predicate declarations for the built-in predicates
· format/2-3 and in order to support the sloppy use of the ensure_loaded/1
· directive within modules, rewriting it to a use_module/1 directive
· Updated the ECLiPSe, SWI-Prolog, and YAP config files in order to support
· parsing of reexport/1 module directives
· Updated the YAP config file in order to support parsing of the use_module/1
· module directive
· Updated the ECLiPSe config files in order to make available the predicate
· numbervars/3 and to support parsing of comment/2, import/2, inline/2, and
· set_flag/3 proprietary directives
· Updated the SICStus Prolog config files in order to support parsing of the
· load_foreign_resource/1 proprietary directive
· Updated the B-Prolog config file in order to support the new foreach/3-4
· meta-predicates and the new table mode directive in B-Prolog 7.3. Added
· definition for the "prolog_version" read-only compiler flag
· Updated the XSB config file in order to enable support for multifile
· directives (version 3.2 or later is required)
· Improved conversion guide for migrating Prolog module code to Logtalk
· Improved documentation and examples of using the term and goal expansion mechanisms
· The "lgt2*.sh" documentation shell scripts have been updated to ignore
· XML files that are not XML documenting files generated by the Logtalk
· compiler