What's New
6.2
Amzi! 6.2 is the final release following a string of 6.1.x beta releases.
New Features
Overview
Robust Server Architecture
Amzi! 6.2 provides a better platform for server-based applications. Many of
the internals, such as garbage collection and handling of dynamic clauses, have
been rewritten to better support 24/7 online operations.
Easier Development and Deployment
The old import/export constructs have been replaced with the more powerful
ISO-standard module capabilities which help organize larger applications. Logic
Server Extensions (LSXs) can be loaded from either the host language or Prolog,
and compiled Prolog modules can be loaded anytime from both files and memory.
Diagnostics for common errors are clearer, and many syntactically correct, but
erroneous constructs are flagged as errors. Little touches like allowing either
forward or backward slashes in file names make it easier to build multi-platform
applications.
ISO-Standard
Many of the changes in the release are related to the ISO-standard, most notably
the inclusion of full ISO module support and ISO stream support.
High Performance Logic Base
Much of the work that has gone into the 6.2 release is internal. For example,
the dynamic logic base has been completely rewritten.
Two immediate benefits of this work are support for indexed and sorted dynamic
predicates, both of which offer tremendous performance gains for applications
with a lot of data.
Comprehensive Internet Support for .NET, ASP, JSP and Java Servlets
A .NET interface is now included with the Logic Server APIs, which can be used
from any .NET language. There are new samples illustrating the use of the Logic
Server with ASP, JSP and Java Servlet Internet technologies. A COM interface
is also available for a limited set of Logic Server API calls (no callbacks).
New Libraries and Utilities
New libraries and utilities have been added, including a cross reference utility,
XML library, date/time library, and performance probe utility. An optional preprocessor
is also included.
Full Internationalization
In addition to Unicode support, locale-specific multibyte characters are supported in all environments.
Increased System Limits
Work has been done to eliminate some of the pesky system limits, most notably the atom table, which is now only limited by memory. The compiler can compile any number of clauses, the number of variables is greatly increased, and the loader buffers are automatically resized as needed.
Improved Documentation
Much of the Prolog documentation has been redone and updated, and new sections
added for debugging tips and modules. A frequently asked questions page has
also been included. Also each sample has its own doc.html file that describes
how to build it and run it.
Advanced Mathematics
There are a number of enhancements of interest to the mathematically inclined, most notably support for infinite precision real numbers, prime number generation, and rational number arithmetic.
Details
Compatibility
Quick conversion from 5.0 to 6.2
To get 5.0 programs quickly running under 6.2, use your text editor to make a
global search for these changed syntactic patterns:
- ` (backquote) - Change to: 0' (zero singlequote)
- '!EOF' - Change to: end_of_file
- compare_lists, remove_dups - moved from built-in to list library.
Either use the directives :- ensure_loaded(list). :- import(list). or copy
the source code from the list library to your application.
- abolish - look for old two argument version, abolish(Functor, Arity)
and replace with one argument version: abolish(Functor/Arity).
- recorda, recordz, instance, erase, db_ref - these are all no longer
supported, use assert/retract instead.
See below for details.
Details of 5.0 to 6.2 differences
- You must compile and relink programs for the new release, as internal formats
have changed.
- ISO changes - wherever possible we have kept support, but not documentation,
for old Amzi! syntaxes that are deprecated due to the ISO standard. For example,
the old Amzi! fopen/3 is still supported along with the new ISO standard open/3.
In some cases, listed here, that was not possible.
- Old vs. New Modules - Programs which use old Amzi! modules need to be updated
to the new ISO modules.
- recorda/z, instance, erase, db_ref not supported - Programs making direct
manipulation of the dynamic database will need to use conventional predicates
instead.
- bug.plm - this library is now in the system library, so you no longer need
to include it to use the '?' operator for debugging compiled code.
- '!EOF', the end of file atom, has been changed to the ISO standard, end_of_file.
This means you must change programs that check for '!EOF' to check for end_of_file
instead.
- The non-standard backquote (`) notation used for characters in earlier releases
of Amzi! is no longer supported. Instead the ISO 0' is used. So `a needs to
be changed to 0'a.
- Strings can now be delimited with backquotes (`) as the standard hints.
This is in addition to the deprecated $-delimited strings which are still
supported.
- abolish/2 is no longer supported, just abolish/1, such as abolish(duck/1)
or with modules, abolish(dwmod:duck/1). It abolishes all of the dynamic clauses
for a predicate.
- Two earlier version built-in predicates, remove_dups/2, and compare_lists/3,
are no longer built-ins but are implemented in the list library instead.
Build Notes (most recent first)
6.2.14
- Fixed bug so that load/4, load from memory, works correctly.
- John Cullen, a user, fixed some bugs and made some changes in the IDE. (Thanks
John)
- Fixed compile, link and build windows so they are reused on subsequent compiles,
links, and builds.
- Fixed bug that caused crashes when build selected but no project open.
- Fixed loss of .xpl and project information when projects saved when edit
windows are open.
- Fixed bug relating to error messages about unnamed files.
6.2.13
- Fixed bug that caused the compiler to interpret the string `[]` as the atom
[].
- Fixed bug that causes retract(x,y) to crash. This is a valid form of retract
where the first argument is a valid module name. Same for retractall/2 and
assert/2.
- Fixed two bugs that occured when programs retract clauses that are still
in active goals. In other words, situations where the program pulls the rug
out from under itself. While not good programming, this type of program should
work as expected now.
6.2.12
- Rebuild Solaris release using latest 3.2 gcc and STL libraries due to problems
on that platform caused by heavy work load. Problems resolved by rebuild.
6.2.11
- Fixed bug in lsClearCall() that would not always trim the callstack back
to the correct choice point.
- Fixed bug in unload when .plm file was loaded from memory.
- The use of the escape character, \, for embedded quotes (', `, ") is
not supported, use double quotes instead. i.e., 'Don''t go near the water'.
- is_integer/1 bug fixed, works correctly for decimal numbers now.
- New internal implementation of gensym/2 much much faster.
- Value of 'e' corrected, 12th digit was wrong.
- Professional version unlock tests less severe.
- Unix only -- added new configuration parameter 'maxmemory' for setting the
memory (in megabytes) available to the Amzi! process.
- Fixed VB LSAPI bug, functions with an argument representing arity now use
Integer instead of Byte for the arity.
- Aborts due to outputting highly nested terms are now gracefully caught.
Usually these are caused by cyclic terms. The allowable nesting can be set
using the configuration parameter 'outputdepth'.
6.2.10
- Debugger bugs fixed.
- Trail space properly conserved in recursive loops with cuts, previously
these would prematurely terminate because of increasing trail use.
- Retract bug fixed that occurred when retracting clauses which were rules.
- Retract bug fixed that occurred when clauses were retracted that were being
actively used in a goal that could still be backtracked into.
6.2.9
- The COM Object has been replaced by a complete .NET
Class (a managed wrapper) with some samples.
6.2.8
- CGI interface parses query_string and asserts value
even when content_length not specified.
- loadlsx/1 recognizes the current module
and places it's predicates in that module. This allows encapsulation of extended
predicates in LSXs.
- Programs with load/unload loops no longer leak.
6.2.7
- New installation program for Windows
- Better garbage collection for interpreted programs
6.2.6
- Fixed debugger bug, module names would some times be represented as integers,
now are always full names.
- Mathematical operators floor and ceil would erroneously return fractional
results sometimes with real (infinite precision) arithmetic. They now return
integers.
- gc/0 predicate modified to garbage
collect heap, things, and dynamic storage.
- Exported missing predicates phrase/3 and for/4.
- lsMakeFloat fixed to create the correct kind of float, single or double,
based on the setting of the Prolog flag 'floats'.
6.2.5
- Created Solaris 8.0 release, using gcc.
6.2.4
- Logic Server 'Execs' and 'Calls' might user module syntax, which is a :/2
structure. 'GetArg' used to refer to that :/2 structure, rather than the goal
of interest. 'GetArg' and 'GetArgType' now both skip the :/2 and refer to
the goal of interest. For those applications that really want to examine a
:/2 structure, the new cTYPEs cMOD and cGOAL have been added. See lsGetArg.
- Registration codes are now recognized for various licenses.
- Linux build of libamzi.so now includes references to -lstdc++ and -lm, so
these don't need to be specified in Logic Server applications.
- Performance improved for applications that to many Logic Server calls using
'ExecStr', 'CallStr', 'AssertStr' and 'RetractStr.' Note that some Logic
Server programs that improperly rely on a term being bound across 'Exec' or
'Call' boundaries might not work as before.
- Bug note - Linux C++ Logic Server programs will crash when attempting to
continue after catching a Logic Server error. So display the error as soon
as you catch it! This might be a gcc problem. A workaround is to change the
definitions for CLogicServer in amzi.h to allocate CLSExceptions on the heap
(new), and throw pointers instead.
- The first 6.2 release incorrectly handled numbers in European and other
locales. Locale is now only used for wide - multibyte character translations,
so all numbers remain in ISO standard Prolog syntax.
- setof/3 and bagof/3 modified to accept setof(N, (O,P)^pet(O,P,N),
L) syntax as well as O^P^pet(O,P,N) syntax.
- For real number arithmetic, the meaning of epsilon (precision in recursive
computations) has changed. epsilon is used by both real sqrt and real power
calculations. The default of 0 means power calculations go to full precision,
but sqrt will stop at 36 decimal places of precision.
- get_env_var/2, which gets the
value of a system environment variable, has been added to osutils.lsx for
Windows.
Copyright ©1995-2006 Amzi!
inc. All Rights Reserved. Privacy Policy.
Amzi!, KnowledgeWright and WebLS are registered
trademarks and Adventure in Prolog, Logic Server, Logic Explorer, Adventure
in Prolog and Subscription Plus are trademarks of Amzi! inc.