Logtalk 2.43.0 released

Announcements of new Logtalk releases and events

Moderator: Paulo Moura

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

Logtalk 2.43.0 released

Post by Paulo Moura » Sun Jul 31, 2011 12:49 am


Logtalk 2.43.0 is now available for downloading. This is a major release. Highlights include revamped support for structural reflection, improved coinduction support, major internal and user-level changes to exception handling and reporting, portability updates, fixes for all know bugs, and a new Windows installer that can be used by non-admin users.

Upgrading from previous release:

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

Known compatibility issues:

* B-Prolog 7.5#7: A bug in the op/3 built-in predicate results in some failed unit tests.
* YAP: Some bugs in multi-threading support prevent some thread examples from running. In addition, a bug in the YAP 6.2 Windows version prevents its use with Logtalk.
* Ciao Prolog is not currently supported due to the lack of support for stream aliases.

Detailed release notes:

* Added experimental support for Lean Prolog.

* Changed error reporting by the Logtalk compiler and runtime. All exception terms now use, whenever possible, the error(Error, logtalk(Goal, Entity)) format. Changed the internal error checking to use, whenever practical, the new '$lgt_must_be'/2-3 internal predicates.

* Added an "optimize" flag, whose default value is "on". This flag allows the user to turn off existing optimizations for e.g. debugging tasks (the currently implemented optimizations include the removal of redundant calls to true/0 from the body of compiled predicate clauses and the removal of redundant calls to (=)/2 from the body of clauses generated by the expansion of grammar rules).

* Added a "source_data" flag, whose default value is "on". With this flag set to "on", Logtalk will keep the information represented using mode/2, info/1-2, uses/2, and use_module/2 directives plus source location data (including source file names and line numbers), useful both for debugging and for integration with development tools. This flag can be turned off in order to generate more compact code. The parameter_names/1 object and category property is removed in order to avoid redundancy.

* Implemented protected/1 and private/1 properties for objects, protocols, and categories. Together with the public/1 property, these properties allows the list of predicates declared in the entity to be accessed for reflective computations. Implemented declares/2, defines/2, includes/3, and provides/3 properties for accessing the properties of predicates declared and defined within an entity. Declaration properties include line_count/1, the line number of the predicate scope directive. Definition properties include line_count/1, the line number of the head of the first clause for the predicate, and number_of_clauses/1, the number of clauses for the predicate. Also implemented experimental uses/3 and use_module/3 properties.

* Added a predicate property, redefined_from/1, allowing querying about the object or category that contains a predicate definition that is redefined.

* Added a loaded_file/3 predicate to the "logtalk" built-in object, which complements the existing loaded_file/2 predicate and gives access to the explicit options used when the file was compiled and loaded.

* Implemented compiler support for the meta_non_terminal/1 directive and the call//N built-in non-terminal.

* Simplified the compilation of grammar rules by removing the support for dealing with non-terminal scope and existence errors at the grammar rule level instead of the predicate level. Although this feature could be helpful when debugging grammar rules, it complicated the integration of Logtalk with Prolog-native development tools.

* Updated the Logtalk compiler in order to save the entity clause locations and make this information available to the back-end Prolog compilers.

* Updated the Logtalk compiler in order to avoid generating unnecessary internal catchall clauses for the predicate declaration and definition tables for dynamic entities.

* Updated the Logtalk compiler in order to preclude using multifile predicates for breaking object encapsulation. A primary declaration entity must exist, containing both a scope and a multifile directive for the predicate. In addition, defining clauses for a multifile Entity::Functor/Arity without a corresponding multifile/1 directive will now result in a compilation error instead of simply a warning.

* Removed the Logtalk compiler restriction that forced discontiguous/1 and dynamic/1 directives to precede calls to the declared predicates.

* Improved the Logtalk compiler report of misspelt calls to non-terminals in grammar rules.

* Allow the use of the :/1 control construct on the body of grammar rules.

* When debugging messages specified in uses/2 directives, the message is now printed implicitly qualified as in the source code written by the user.

* Changed the internal predicates used in the implementation of the built-in multi-threading predicates in order to facilitate the integration with high-level debugging tools that require decompilation of the generated Prolog code.

* Corrected a bug introduced in Logtalk 2.42.4 on the compilation of entity predicates that call synchronized predicates. This bug resulted in calls being made instead to the non-synchronized forms of the predicates, which would manifest in random failures of thread goals.

* Corrected a long standing bug where a runtime-compiled meta-call within a category would be compiled as a call to a predicate of the object importing the category instead as a call to a local category predicate.

* Corrected a long standing bug where entity flag values set locally using the set_logtalk_flag/2 directive would fail to be saved into the entity compiled code.

* Corrected a long standing bug when abolish a dynamic predicate in a non-prototype object where the abolish/1 method would succeed without the predicate being actually abolished.

* Corrected a bug in setting the correct execution context when calling a meta-argument that requires a runtime compilation in the context of "sender".

* Corrected a bug in the compilation of explicit-qualified calls to module meta-predicates where the module qualification would be dropped from the compiled call. Note that these calls will use Logtalk meta-predicate semantics (i.e. the meta-arguments will be called in the context of the caller) instead of the usual Prolog module meta-predicate semantics.

* Corrected a bug where the coinduction stacks was not initialized when using the <</2 control construct.

* Corrected a bug that prevented using the coinductive/1 directive with a list of predicate indicators as argument.

* Corrected a bug in the implementation of the threaded_peek/1 built-in predicate when called from within categories.

* Corrected a bug when compiling a Prolog module as an object when the module/2 directive is used to export operator declarations.

* Updated the built-in debugger command that prints the execution context to also print the meta-call context and the coinduction stack.

* Changed the semantics of the coinductive/1 directive to use the same semantics as the coinductive1/1 directive found on the U.T.Dallas coinduction implementation. Thanks to Feliks Kluzniak for the examples that helped clarified the issues with the previous implementation. In addition, take advantage of the soft-cut control construct when supported by the back-end Prolog compiler for better performance.

* Refined error checking for the built-in predicates category_property/2, object_property/2, and protocol_property/2, throwing a type_error/2 when the second argument is neither a variable or a callable term.

* When compiling a module as an object, warn instead of throwing an error when compiling a call to a built-in predicate used as a query.

* Attempting to load a settings file containing syntax errors will now print a warning instead of failing silently.

* Allow using a Prolog module as an hook object. The module must be loaded and its identifier must be different from any object identifier.

* Changed reporting of declared but not defined static predicates to exclude multifile predicates.

* Fixed a compilation performance issue with objects and categories containing a large number of clauses for the same predicate.

* Improved portability of calls from within objects and categories of calls to Prolog database and reflection built-in predicates whenever the first argument is an explicit module-qualified term.

* Turning on the "smart_compilation" compiler flag will now automatically switch off the "clean" flag.

* Reimplemented the reflection built-in methods predicate_property/2, object_property/2, protocol_property/2, and category_property/2 in order to make them deterministic for most calls where the second argument is bound.

* Added Logtalk compiler support for default annotations, defined in the back-end Prolog compiler config files.

* For all config files, renamed the predicate '$lgt_is_proper_list'/1 to '$lgt_is_list'/1 and and replaced the old '$lgt_is_list'/1 predicate by a new '$lgt_is_list_or_partial_list'/1 predicate.

* Updated the SWI-Prolog config file in order to delete QLF files when the "clean" flag is "on" and to avoid preventing loading of a Logtalk source file when a Prolog file with the same name exists on the same lookup directory. In addition, add source location information to the generated Prolog files resulting from the compilation of Logtalk source files. This location information is necessary for supporting some of the SWI-Prolog development tools.

* Updated the SWI-Prolog integration files in order to hide the source code of the Logtalk (::)/2 and (<<)/2 built-in predicates from this compiler debugging tools. Also corrected an index/1 directive for an internal predicate lookup caching predicate.

* Updated the SWI-Prolog hooks file in order to support tracing Logtalk source code using the SWI-Prolog graphical debugger and using the edit/1 predicate with library notation and with the Logtalk "altdirs" flag on.

* Updated the ECLiPSe config file, simplifying some of the file handling predicates, turning off ISO overly restrictions on operator usage, and making use of the recently implemented call/N built-in control constructs when available.

* Updated the GNU Prolog config file for the stable 1.4.0 release.

* Updated the SICStus Prolog 4 config file in order to workaround some of the incompatible changes to absolute_file_name/2 and open/3-4 introduced on version 4.1.0.

* Updated the B-Prolog config file to require version 7.5#5 or later as this release fixes some of the bugs on previous versions that show up when using Logtalk. Added default annotations for matching clauses.

* Added predicates select/4 and selectchk/4 to the library entities "listp", "list", and "difflist".

* Corrected a bug in the library support for unit tests, "lgtunit", where testing for exceptions would accept any exception term as conforming to the unit test specifications.

* Updated the "cc" example with bug fixes and improvements for ECLiPSe contributed by Joachim Schimpf, with a bug fix for the SWI-Prolog implementation of the expand_path/2 predicate (resulting from recent changes to the SWI-Prolog absolute_file_name/3 built-in predicate), and with a definition for the command_line_arguments/1 predicate for B-Prolog.

* Updated the "coinduction" example, adding some more individual examples by Gopal Gupta and Feliks Kluzniak.

* Updated the "xml_parser" contribution in order to workaround portability issues with GNU Prolog.

* Correct a bug in some shell scripts where "#/bin/bash" was used instead of "#!/bin/bash". Thanks to Yiorgos Adamopoulos for the bug report.

* Updated the MacOS X command-files (on the "scripts/macosx/command_files/" folder) in order to depend on the value of the LOGTALKHOME environment variable instead of using a fixed path to the Prolog integration scripts.

* Updated the Inno Setup GUI Windows installer script in order to allow full installation by non-admin users.

* Added syntax coloring support for the ISO Prolog directive include/1 to all supported text editors and syntax highlighters.

* Corrected some bugs on the tab triggers for the Gedit Logtalk snippets that prevented their use.

* Changed back to using XEP instead of FOP when generating the PDF versions of the User and Reference manuals as FOP truncates the contents of some of the pages. Thanks to Feliks Kluzniak for the bug report.

Happy logtalking,

Paulo Moura
Logtalk developer

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest