Logtalk 2.39.2 released

Announcements of new Logtalk releases and events

Moderator: Paulo Moura

Post Reply
Paulo Moura
Logtalk developer
Posts: 483
Joined: Sat May 05, 2007 8:35 am
Location: Portugal

Logtalk 2.39.2 released

Post by Paulo Moura » Tue May 04, 2010 1:01 pm


Logtalk 2.39.2 is now available for downloading. This release optimizes the internal representation of entity and predicate properties, improves reflection support, improves unit testing support, improves interoperability with Prolog module libraries, fixes all known bugs, and includes portability updates for B-Prolog, ECLiPSe, Qu-Prolog, SICStus Prolog, SWI-Prolog, XSB, and YAP. Thanks to Michael Igler and Parker Jones for helping beta-testing this release.

Upgrading from previous release:

* See the "UPGRADING.txt" file and the detailed release notes below for more details.

Known compatibility issues:

* B-Prolog: A bug in the delete_file/1 built-in predicate on Windows results in spurious messages when compiling and loading source files.
* YAP: Some bugs in multi-threading support prevent some thread examples from running. In addition, a bug in the YAP 6.0.4 Windows version results in syntax errors when loading some library objects.
* XSB: Some bugs in multi-threading support prevent some thread examples from running. Use of the latest XSB CVS version is recommended.

Detailed release notes:

* 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. Thanks to Parker Jones for the bug report.

* 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. Thanks to Parker Jones for the bug report. 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.

Happy logtalking,

Paulo Moura
Logtalk developer

Post Reply

Who is online

Users browsing this forum: No registered users and 3 guests