<!--
  - Authors:
  -   Christian Schulte <schulte@ps.uni-sb.de>
  -
  - Contributors:
  -   Denys Duchier <duchier@ps.uni-sb.de>
  -   Leif Kornstaedt <kornstae@ps.uni-sb.de>
  -
  - Copyright:
  -   Christian Schulte, 1998
  -
  - Last change:
  -   $Date: 2003/01/23 23:23:00 $ by $Author: duchier $
  -   $Revision: 1.19.2.13.2.5 $
  -
  - This file is part of Mozart, an implementation
  - of Oz 3
  -    http://www.mozart-oz.org
  -
  - See the file "LICENSE" or
  -    http://www.mozart-oz.org/LICENSE.html
  - for information on usage and redistribution
  - of this file, and for a DISCLAIMER OF ALL
  - WARRANTIES.
  -
  -->

<!DOCTYPE Book SYSTEM "ozdoc.dtd" [

<!-- Extension to the DTD -->
<!ENTITY % proglang.values.local "|sh|fundamental">

<!ENTITY % author.class "author|author.extern|comic">
<!ENTITY % picture.element "picture|picture.extern|picture.choice">
<!ELEMENT comic - O (%picture.element;)>

<!-- Include Files -->

<!-- Abbreviations -->
<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY dot "." -- to distinguish it from periods -->
<!ENTITY Oz "Oz">

<!-- Processing Instructions -->
<!ENTITY emdash PI "emdash">
<!ENTITY endash PI "endash">
<!ENTITY nbsp PI "nbsp">
<!ENTITY ellipsis PI "ellipsis">
<!ENTITY slash PI "slash">
<!ENTITY ie PI "ie">
<!ENTITY wrt PI "wrt">
<!ENTITY eg PI "eg">

]>

<Book proglang=oz>
  <Front>
    <meta name="proglang.mode" arg1="oz" arg2="oz-mode">

    <meta name="html.split"       value="chapter.m125">
    <meta name="html.split"       value="chapter.m124">
    <meta name="html.split"       value="chapter.m123">
    <meta name="html.split"       value="chapter.m122">
    <Meta name="html.split"       value="chapter.m121">
    <Meta name="html.split"       value="chapter.m120">
    <Meta name="html.split"       value="chapter.m110">
    <Meta name="html.split"       value="chapter.m101">
    <Meta name="html.split"       value="chapter.m100">

    <Meta name="html.split"       value="section.m121.important">
    <Meta name="html.split"       value="section.m121.changes">
    <Meta name="html.split"       value="section.m121.fixes">
    <Meta name="html.split"       value="section.m121.misc">
    <Meta name="html.split"       value="section.m121.bugs">

    <Meta name="html.split"       value="section.m120.changes">
    <Meta name="html.split"       value="section.m120.fixes">
    <Meta name="html.split"       value="section.m120.internal">

    <Meta name="html.split"       value="section.m110.changes">
    <Meta name="html.split"       value="section.m110.fixes">

    <Meta name="html.split"       value="section.m100.general">
    <Meta name="html.split"       value="section.m100.syntax">
    <Meta name="html.split"       value="section.m100.base">
    <Meta name="html.split"       value="section.m100.system">
    <Meta name="html.split"       value="section.m100.tools">

    <Meta name=ozversion value="3.0">
    <Meta name=status value=revised>
    <Title/Changes/
    <Abstract>
      This documents gives a brief overview of the
changes between different Mozart versions. In
particular, it lists the changes from
      Oz 2.0 (and its implementation DFKI Oz) to Oz 3.0 (and its
      implementation Mozart).
    </Abstract>
  <Body>

  <chapter id="chapter.m125">
    <title/Mozart 1.2.5/
    <p>Mozart 1.2.5 is a bug-fix and maintenance release, but most importantly
    it has undergone important modifications to make it compatible with both old C++
    compilers (&eg; <code proglang=sh/gcc 2.95.x/) and the new breed of C++ 
    compilers (&eg; <code proglang=sh/gcc 3.x/) implementing the new multi-vendor
    standard C++ ABI (Application Binary Interface).

    <section id="sec.m125.portability">
      <title/Portability/
      <p>
      <list>
        <item>Mozart 1.2.5 is now compatible with newer C++ compilers that implement
	the new multi-vendor standard C++ ABI.  In other words, it can be properly
	compiled with <code proglang=sh/gcc 3.x/.  The binary layout of C++ classes
	as implemented &eg; by <code proglang=sh/gcc 3.2/ has changed from what it
	was in &eg; <code proglang=sh/gcc 2.95.x/ and this had
	some fundamental and lethal consequences for earlier versions of Mozart.  The
	design of some datastructures in Mozart was accordingly revised.<p>

	<item>Mozart now runs on <name/hppa/ aka <name/linux-parisc/.  While Mozart
	1.2.5 still is not ready for full 64 bit architectures, it does well under
	kernels that provide 32 bit addresses in user-space.<p>

	<item>For users of Gentoo Linux, we now provide ebuilds to install and
	maintain a Mozart installation using the portage system.<p>

	<item>improved Darwin support now also available in CVS.<p>

	<item>additional logic to fix the <file/glibc/ problem with time ticks introduced when
	the Linux kernel bumped <code proglang=sh/HZ/ up to 1000.<p>
     </list>

    <section id="sec.m125.graphics">
      <title/Graphics/
      <p><list>
        <item>fixed the Tk interface to work with Tk 8.4.<p>
	<item>new optional <file/mozart-gtk/ component providing GTK 1.2 bindings (see
        download page for further information).<p>
      </list>

    <section id="sec.m125.windows">
      <title/Windows/
      <p>changes and fixes that concern the Windows platform:
      <list>
	<item><code proglang=sh/oztool/ now uses <code proglang=sh/gcc-2/
	  and <code proglang=sh/g++-2/ as default when invoked with the
	  <code proglang=sh/-gnu/ option.  This can be configured as
	  described in <ptr.extern to="ozdoc:tools" key="section.oztool-env">
      </list>

    <section id="sec.m125.vm">
      <title/Virtual Machine/
      <p>changes and fixes that concern the virtual machine:
      <list>
	<item>several fixes in the support for execution of <ref.extern
	  to="http://www.ps.uni-sb.de/alice/"/Alice/ programs
      </list>

    <section id="sec.m125.cp">
      <title/Constraint Programming/
      <p>
        <list>
	  <item>fixed <code proglang=oz/FD.reified.card/<p>
	  <item>fixed <code proglang=oz/FD.int/ problem with descriptions with
	  more than 1024 items.<p>
	</list>

    <section id="sec.m125.misc">
      <title/Miscellaneous/
      <p>
        <list>
	  <item>When building from sources, the default is now to ignore an existing
	  mozart installation (this default can be overriden with the new <file/configure/
	  option <code proglang=sh/--with-global-oz/).  Previously, the user had to be
	  very careful to remove from his/her environment all traces of <file/oz/ prior
	  to invoking <file/configure/.<p>
	  <item>fixed an issue related to sharing when sending to a superordinated port.<p>
	</list>

  <chapter id="chapter.m124">
    <title/Mozart 1.2.4/
    <p>Mozart 1.2.4 is a bug-fix and maintenance release, with some
    enhancements.
    <section id="sec.m124.base">
      <title/Base/
      <p>changes and fixes that concern the base language:
      <list>
        <item/bytestrings: space now prints as space instead of being encoded as octal/
	<item/fixed insertion sort in <file/dictionary.cc/ (so what?)/
	<item/improved static analysis for <code/Port.new/:
	  <code/{Port.new s _}/ now diagnoses the error due to the typo
	  (atom instead of variable)/
	<item/added <code/Value.isFailed/: true iff the arg is a
	failed future/
	<item/<code/Int.'div'/, <code/Int.'mod'/: work consistently and according
	to the specification for small and big integers (concerns negative numbers only)/
	<item/<code/Value.waitQuiet/ no longer blocks on failed futures/
	<item/robustly handle the case of a messed up <code/OZLOAD//
	<item/bug fix for <code/VirtualString.toAtom//
	<item/Sort and Merge are now stable/
	<item>new environment variable <code/OZ_DOTOZ/ to override
	default <file>~/.oz</file>. corresponding property
	<code/oz.dotoz/</item>
	<item><code/List.take/, <code/List.drop/ and
	  <code/List.takeDrop/ no longer unnecessarily block on nondet
	  list tail that is not looked at</item>
      </list>
    </section>
    <section id="sec.m124.windows">
      <title/Windows/
      <p>changes and fixes that concern the Windows platform:
      <list>
        <item/fixes to compile again with MSVC/
	<item/debug emulator can be built/
	<item/Control-C should now work/
	<item proglang=sh/configuration: Updated to link correctly under the
	newest mingw (check for either <code/-ldirent/ or <code/-lmingwex/)
	<item/fixed other problems due to changes in mingw library/
	<item/<code/OS.getEnv/: now correctly distinguishes between an unset
	environment variable and an environment variable set to
	the empty string/
	<item/fixed <code/Application.getCgiArgs/ on Windows for newer
	Apache (same as previous item)/
	<item/fixed <code/Open.pipe/ pbs/
	<item/<code/OS.pipe/: When the process at the other end of a pipe
	terminates, end-of-file is reported instead of an
	exception/
	<item/<code/OS.read/: When an end-of-file arrives on standard input,
	it is now correctly reported instead of blocking
	indefinitely/
	<item>fixed weird compilation/linking pbs, actually caused by clashing GIDs (see DP)</item>
	<item proglang=sh/oztool more flexible: supports <code/-I/, <code/-l/, <code/-L/ and <code/-s/ for GNU and MSVC/
	<item/OPI: fixed encoding (on Windows) for sending data with accented chars to oz process/
      </list>
    </section>
    <section id="sec.m124.doc">
      <title/Documentation/
      <p>changes and fixes to the Mozart documentation:
      <list>
        <item><file>install</file>: fixed obsolete hrefs, added windows/cygwin info</item>
	<item><file>notation</file>: fixed def of "in expression"</item>
	<item><file>tutorial</file>: typos</item>
	<item><file>xsl/ozdoc-fontify.el</file>: replaced obsolescent dot-marker by point-marker</item>
	<item><file>xsl/ozdoc.cls</file>: works again with newer version of float.sty
      </list>
    </section>
    <section id="sec.m124.cp">
      <title/Constraint Programming/
      <p>changes and fixes concerning the constraint programming
      support:
      <list>
        <item>documented limitations:
	<list>
	  <item/free var cannot be constrained in subspace: must first be constrained in home space/
	  <item/number of alternatives of a choice point must be less
	  than 2^27-2/
	</list>
	</item>
	<item><file>doc/system/fd</file>: fixed typos</item>
	<item>fixed <code/dis/</item>
	<item>fixed <code proglang=cc/FDBitVector::findMinElemen/ to
	correctly return -1 for empty vector</item>
	<item>fixed corner case that was causing the infamous "change of representation"
	bug at 64 elements in rare occasions (<code proglang=cc/FSetValue::operator <=/)</item>
	<item/domain consistent propagators are now properly woken up/
	<item/<code/\=:/ now correctly takes variable aliasing and entailment into account/
	<item/reified constraints: fixed occasional misbehaviour due to out of bound array access/
	<item/<code/FD.distribute/: bug fixes + improvements. (used to not correctly synchronize
	on stability on 1st invocation)</item>
	<item/<code/FS.distribute/: fixed to use stable order, improved, round robin bug fixed
	(used to drop variables)/
      </list>
    </section>
    <section id="sec.m124.lang">
      <title/Oz Language/
      <p>changes and fixes concerning the Oz language
      <list>
        <item><code/for/ loop now supports new experimental features <code/while:E/
	and <code/until:E/<!--   (and X from G) --></item>
	<item><file>doc/loop</file> slightly improved</item>
	<item><code/for _ in 1..5 do ... end/ now works (it used to
	block)</item>
	<item>eliminated unnecessary memory allocation for experimental
	<code/collect/ feature</item>
      </list>
    </section>
    <section id="sec.m124.system">
      <title/System Modules/
      <p>changes and fixes concerning the System modules:
      <list>
        <item>Application:
	  <list>
	    <item/added <code/Application.processCgiString//
	    <item/fixed <code/Application.getCgiArgs/ on Windows for newer Apache/
	    <item/bug fix for <code/Application.getCmdArgs//
	  </list>
	</item>
	<item>Finalize:
	  <list>
	    <item><file>doc/system/finalize</file>: improved doc about stateless values etc&ellipsis;;</item>
	  </list>
	</item>
	<item>Open:
	  <list>
	    <item>documented <code/text/ and <code/binary/ flags</item>
	    <item/<code/Open.text/: raises a <code/closed/ exception instead of a
	    <code/type/ exception when operating on a closed stream/
	  </list>
	</item>
	<item>System:
	  <list>
	    <item>documented <code/System.onTopLevel/</item>
	  </list>
	</item>
	<item>Property:
	  <list>
	    <item>synchronize on undet property values instead of raising an error</item>
	  </list>
	</item>
	<item>DP:
	  <list>
	    <item/40% speed up for small distributed messages/
	    <item/speedup for pickling and 10% decrease in size/
	    <item/fixed memory leaks in libdp/
	    <item>global IDs are now robustly/provably unique</item>
	  </list>
	</item>
	<item>Tk:
	  <list>
	    <item/iso8859-1 chars properly handled/
	    <item/image resolver initialized using methods of pickle resolver/
	  </list>
	</item>
      </list>
    </section>
    <section id="sec.m124.tools">
      <title/Tools/
      <p>changes and fixes concerning Mozart related tools:
      <list>
        <item>Browser:
	  <list/<item/it is now ok to browse a port in a deep guard//
	</item>
	<item>Inspector:
	  <list/<item/can now inspect array in deep guard//
	</item>
	<item>Gump:
	  <list/<item/use relative import for generated native
	  functor//
	</item>
	<item>Compiler:
	  <list>
	    <item/<code/\insert/ with very long filenames now works/
	    <item/misc fixes/
	    <item/fixed <code/dynamicvarnames/ pb/
	  </list>
	</item>
	<item>ozdoc:
	  <list>
	    <item/cross-referenced exercises now use sensible text/
	    <item/beginning of support for XML/
	  </list>
	</item>
	<item>OPI / Emacs Mode:
	  <list/<item/fixed encoding (on Windows) for sending data
	  with accented chars to oz process//
	</item>
      </list>
    </section>
    <section id="sec.m124.misc">
      <title/Miscellaneous/
      <p>
      <list>
        <item>Configure/Build:
	  <list proglang=sh>
	    <item/version checking improved/
	    <item/fixed pbs with new version of Bison/
	    <item/fixed pbs with new version of GMP/
	    <item/added switch <code/--enable-compile-elisp/ (default=yes) as requested by Debian/
	    <item/added <code/--with-emacs-options=?{OPTIONS}/
	    (default=<code/-q --no-init-file/ for GNU <code/-q -no-init-file/ for XEmacs)/
	    <item>more robust creation of native functor interface in <file>contrib/ri</file></item>
	    <item/support OpenBSD/
	    <item/configures and compiles again on recent Linux distros using new versions of libraries/
	  </list>
	</item>
	<item>Examples:
	  <list><item><file>share/examples/grammar</file> updated</item></list>
	</item>
	<item>Test Suite:
	  <list/<item/fixes + new tests//
	</item>
      </list>
    </section>
  </chapter>

  <chapter id="chapter.m123">
    <title/Mozart 1.2.3/
    <p>Mozart 1.2.3 is primarily a bug-fix release addressing 
recently discovered memory leaks.  It also contains enhancements
and is fully backward compatible with 1.2.2
    <list>
      <item>Fixed a memory leak in the regex contrib: memory occupied by a compiled
regex was not properly released during finalization.</item>
      <item>Fixed a memory leak in the unpickler.  The leak affected particularly
applications that performed:
        <list>
	  <item/numerous loading of compiled functors/
	  <item/numerous retrieval of values from a GDBM database/
	</list>
      </item>
      <item>Windows: setting environment variable <code proglang=sh/OZ_TRACE_LOAD/
caused the system to misbehave.  This was actually due to forgetting to copy the
value returned by the environment variable lookup out of a static buffer.</item>
      <item>Many holes have been filled in the compiler documentation.
In particular, the main chapters are all complete; only
the appendices lack explanation.</item>
      <item>Constraint Programming: <code/FD.atLeast/ and <code/FD.atMost/ performed
incorrect propagation when their first argument was a FD variable.  The implementation
was completely overhauled.  All of <code/FD.exactly/, <code/FD.atLeast/ and <code/FD.atMost/
are now implemented as instantiations of the same template class.</item>
      <item>The <code/Application/ module now exports <code/Application.processArgv/ which
permits to invoke argument processing on a list of strings explicitly provided as a
parameter.</item>
      <item>The compiler's Gump support was modified so that generated native functor and parser
state description are placed in by default in the directory of the source file.  This can be
explicitly overridden by option <code/gumpDirectory/, or by command-line option
<code proglang=sh/--gumpdirectory/.</item>
      <item>Standard Library: Mozart 1.2.3 is the first release to include the Mozart
Standard Library.  At present the latter contains only <code/QTk/ available at URI
<file>x-oz://system/wp/QTk.ozf</file>.</item>
    </list>
  </chapter>

  <chapter id="chapter.m122">
    <title/Mozart 1.2.2/
    <p>Mozart 1.2.2 is an improvement release and is fully backward compatible
with Mozart 1.2.1
    <list>
      <item>Improved debugging support for <code/for/ loops: they now provide
meaningful debug info and can be stepped in</item>
      <item>Reference documentation added to TkTools</item>
      <item>Windows:
      <list>
        <item>Release 1.2.1 for Windows omitted file <file>cache/x-oz/contrib/os/mode.ozf</file>
which is required by the GDBM contrib.  This is now included.</item>
        <item><code/OS.uName/ now correctly fills <code/machine/, <code/release/ and <code/version/ fields;
Before, they always contained <code/"unknown"/, and provides more information in the
<code/sysname/ field.  Before, the <code/sysname/ field always contained <code/"WIN32"/; it is now
<code/"win32s"/, <code/"win32_windows"/ or <code/"win32_nt"/.</item>
      </list>
    </list>
  </chapter>

     <chapter id="chapter.m121">
      <title/Changes between Mozart 1.2.0 and Mozart 1.2.1/

<p>    
The release of Mozart 1.2.1 is an
important bug-fix release, with some enhancements, and is fully
backward compatible with Mozart 1.2.0.  
</p>

      <section id="section.m121.important">
        <title/Important Issues/

          <p>
          <list>
            <item>
   A severe bug in record
    unification that has been introduced in 1.2.0 is fixed.
            <item>
   Fixed incorrect variable aliasing detection on Windows (resulted in
    weaker propagation, therefore in different and larger search
    trees).
            <item>
   Many improvements in the Windows port, in particular for subprocesses,
   finally correctly enabling oztool and ozmake.
            <item>
   Both domain- and bounds-consistent variants of the alldifferent
   constraint for finite domains are available.
</list>
</p>

      <section id="section.m121.changes">
        <title/Changes/

<p>
<list>
<item>Inspector replaces Browser as default viewer in Explorer and Ozcar

<item>The verbosity of printing variables can be controlled by the
    property <<'print.verbose'>>
<item>Mozart uses sorting in many important places (record construction,
    dictionaries, finite domains, many finite domain propagators). All 
    uses of sorting now share a single, efficient and robust implementation.
<item>Documented <<FD.distinctD>> (domain-consistent alldifferent) and added 
    <<FD.distinctB>> (bounds-consistent alldifferent, naive quadratic version)
</list>
</p>

      <section id="section.m121.fixes">
        <title/Bug Fixes in Detail/

<p>
<list>
<entry>record unification
<item>
        an invalid optimization was introduced in 1.2.0 that affected
        speculative unification of records
<entry>variable aliasing detection (Windows)
<item>
        variable aliasing detection was inoperative.  As a
        result propagation was weaker.  This could be observed with
        the SEND+MORE=MONEY example which produced a larger search
        tree
<entry proglang=sh><<oztool>> (Windows)
<item>
	<<oztool ld>> now also works under Cygwin (not only Mingw32).
	Furthermore, options are now accepted in any order, and options
	<<-I>>, <<-l>>, <<-L>> and <<-s>> are supported for gcc and
	Microsoft Visual C++
<entry><<OS.system>> and <<Open.pipe>> (Windows)
<item>
	<<OS.system>> was broken in 1.2.0 and has now been repaired;
	bug fixes in inheritance and closing of handles
<entry>failed futures
<item>
        (dis)equality testing now correctly passes up exceptions.
        <<Value.byNeedFail>> is now careful to be non-requesting.
<entry>IO problems (Windows 2000 Service Pack 2)
<item>system would freeze if <File/ws2_32.dll/ was not loaded
<entry>Entailment of propagators
<item>propagators are now again included in the suspension count
<entry><<Combinator.reify>>
<item>fixed bug related to merging
<entry><<Schedule.cumulative>>
<item>	fixed bug related to sorting task intervals
</list>
</p>

      <section id="section.m121.misc">
        <title/Miscellaneous/

<p>Cross-compilation is no longer necessary to build Mozart for
    Windows.  The entire system can now be natively compiled on
    Windows under the Cygwin environment.</p>


     <chapter id="chapter.m120">
      <title/Changes between Mozart 1.1.0 and Mozart 1.2.0/

      <p>
        Mozart 1.2.0 is primarily a maintenance release with improved
        usability, maintainability and performance. The changes in the
        language, Mozart libraries and the implementation are
        summarized in the following sections.
      </p>


      <section id="section.m120.changes">
        <title/Changes in Oz, Mozart libraries and UI/

        <subsection><title/Loops/
          <p>
          <list>
            <entry>* patterns are now supported:
            <item>
<code display>for X#Y in L do ... end</code>

            <entry>* iterator expressions with a bit of a C-flavor
are supported:
            <item>
<code display>for X in Init;Cond;Next do ... end</code>
for example:
<code display>for I in 1;I<5;I+1 do ... end</code>
also iterators of the form <code/E1..E2/, <code/E1..E2;E3/,
<code/E1;E3/ as before.

            <entry>* nullary <code/break/ and <code/continue/ procedures
can be obtained using loop features, e.g:
            <item>
<code display>for break:B X in L do ...{B}... end</code>

            <entry>* EXPERIMENTAL: loops can be used as expressions
using a hidden accumulator, e.g.:
            <item>
<code display>
        {Show
         for collect:C
             L in Ls
         do
            for X in L do
               if {IsOdd X} then {C X} end
            end
         end}
</code>

This experimental facility uses loop features <code/collect/,
<code/append/, <code/prepend/, <code/minimize/, <code/maximize/,
<code/count/, <code/sum/, <code/multiply/, <code/return/,
<code/default/.

For more information check the documentation (<ptr.extern
to="ozdoc:loop">).
          </list>
          </p>

        <subsection><title/<Q/Failed/ Futures and Module Manager/
          <p>
          <list>
            <item> <code>{Value.byNeedFail E ?V}</code>
binds <code/V/ to the new notion of a <Q/failed future/.  Any attempt
to synchronize on <code/V/ raises <code/E/ as an exception.
            <item> The module manager was updated to use <Q/failed
futures/: when a module cannot be successfully linked its value
becomes a failed future (instead of a record) which raises the
exception which caused linking to fail each time the module is
subsequently accessed.  Thus, programmers have a chance of catching
and recovering from linking errors.
          </list>
          </p>

        <subsection><title/Spaces/
          <p>
          <list>
            <item> <code/Space.askVerbose/ returns <code/suspended/
rather than <code/blocked/
            <item> An exception is raised, if the argument to
<code/Space.commit/ refers to a non-existing alternative
            <item> The control condition for application of space
operations have been unified and extended, see the documentation
            <item> <code/Space.kill/ kills a space by injecting fail into it
          </list>

A full treatment of spaces is available in the Christian Schulte's
doctoral dissertation "Programming Constraint Services", from the
Mozart publications page.
          </p>

        <subsection><title/Distribution Subsystem/
          <p>
          <list>
            <item> The Oz programmer interface to the distributed
subsystem has been extended. Parameters like buffer size and timeouts
can now be specified at runtime.
            <item> The family of tools for monitoring the behavior of
the Mozart system has been extended with a new member, the
Distribution Panel. The tool displays information about known remote
Mozart sites, amount of communication, measured round-trip and
exported/imported entities. Possibilities to remotely monitor other
Mozart processes does also exist.
          </list>
          </p>        

        <subsection><title/Constraint Systems/
          <p>
Constraint systems (finite domains, finite sets) have undergone, as
usual, various improvements and bug fixes.  Check the documentation.
          </p>

        <subsection><title/Port Improvements/
          <p>
          <list>
            <item> Ability to send from a subordinated space to a
superordinated space (provided that no local variables and names
are referred to).
            <item> SendRecv does a send and returns an answer. For
details, see doc. This again works across spaces.
          </list>
          </p>

        <subsection><title/Pickling Format/
          <p>
Unfortunately, old pickles cannot be read by this new system. We do
plan to have a generic conversion tool, but face a lack of human
resources.
          </p>

        <subsection><title/`ozl --rewrite'/
          <p>
The Oz linker (ozl) now supports a new command-line option,
`--rewrite', which allows to transform the import URLs used
by the output functor. Check the documentation for details.
          </p>


      <section id="section.m120.fixes">
        <title/Changes in the implementation that affect usability and performance/

        <subsection><title/Bugs/
          <p>
Bug fixes, including, but not limited to:
          <list>
            <item> the core (centralized) system
            <item> distribution subsystem
            <item> constraint solving facilities
            <item> Oz debugger (ozcar)
            <item> the Windows port
            <item> various memory leaks
          </list>

All in all, a lot of them. Really a lot..  The system is used now
for a series of our projects, as well as for projects outside the
Mozart consortium, and also for teaching at all our three sites.

Have also a look at http://www.mozart-oz.org/cgi-bin/oz-bugs/FIXED
          </p>

        <subsection><title/2GB of Live Data/
          <p>
Oz programs can reference now up to 2GB of live data on a computer
with the 32bit address space, compared to .5GB for all the previous
releases.
          </p>

        <subsection><title/New Supported Platforms/
          <p>
New supported platforms - linux ppc & pentium 4.
          </p>

        <subsection><title/Improved Distribution Subsystem/
          <p>
The distribution subsystem has been improved, in particular, as the
traffic between Mozart sites increases. In extreme cases the win is
up to orders of magnitude.
          </p>

        <subsection><title/No Fast Inter-Site Communication/
          <p>
Unfortunately, the inter-site communication over shared memory
(property <code/'distribution.virtualsites'/, see also <ptr.extern
to="ozdoc:system" key="chapter.remote"> is currently inoperable. We
are working on bringing it back in the next release. This is caused by
extensive changes in the implementation of the distribution subsystem,
as outlined in <ptr to="section.m120.internal">.
          </p>


      <section id="section.m120.internal">
        <title/Changes in the implementation that affect maintainability and portability/

        <subsection><title/Accessing Oz Data Structures/
          <p>
Mozart 1.2.0 features the new design and implementation of the part of
the run-time system (engine) that deals with allocation and accessing
Oz data structures. This not only allows 2GB of live data, as
mentioned in <ptr to="section.m120.changes">, but also:
          <list>
            <entry>* Greatly enhanced portability
            <item>
Mozart does not impose anymore any constraints on where the "C"
data regions are mapped, which is different across different
flavors of Un*x. This also simplified the Windows port.
            <entry>* Is THE prerequisite for clean 64bit ports
            <item>
while this release still does not support 64 Bit machines such
as Alphas, etc, this change is the first -- and quite big --
step towards that goal.
          </list>
          </p>

        <subsection><title/Redesign of the Distribution Subsystem/
          <p>
Distribution subsystem has undergone a principle overhaul.
          <list>
            <item> The distribution subsystem is cleanly divided into
a protocol layer and a message-passing layer, with interfaces
between them explicitly specified.
            <item> Flexible connection establishment. A pair of
Mozart sites connect now by execution of dedicated, replaceable Mozart
functors. This enables customization of connection protocols for
creation of closed subdomains or traversal of fire-walls. Currently
there is no user interface to this facility, but we plan to introduce
one.
            <item> The message-passing layer has been redesigned and
re-implemented.  The new design is featured by:
            <list>
              <item> better resource utilization, both in terms of
memory and system resources (e.g file descriptors).
              <item> improved balance between the (centralized)
engine and the distribution subsystem in terms of run time. In
particular, large messages sent between Mozart sites do not lock out
the engines on either side.
              <item> an open architecture enabling introduction of
new transportation mediums.
              <item> higher throughput by better pipelining of messages.
              <item> caching of TCP channels reworked.
              <item> automatic round trip calculation.
              <item> failure detection on measured round trips rather
than by TCP.
            </list>
          </list>

A document describing the Distributed Subsystem added to the
documentation tree.
          </p>

      </section>


    <chapter id="chapter.m110">
      <title/Changes between Mozart 1.0.1 and Mozart 1.1.0/

      <p>
        Mozart 1.1.0 is a maintenance
        release that features a completely new and
        improved implementation of pickling and a
        major
        improvement of the
        constraint programming primitives.   
      </p>

      <section id="section.m110.changes">
        <title/Changes/


        <subsection><title/Pickling/
        
        <p>
Due to some redesign of the instruction set and the pickling
algorithm, the pickle format changed between Mozart 1.0.1 and
Mozart 1.1.0.  A conversion tool has been made available however,
see <Ptr.Extern to="ozdoc:tools" key="chapter.convert"> for
documentation.
        </p>
          
        <subsection>
          <title/Constraint Programming/

        <p>
        <list>
         <entry>General improvements
         <item>
One of the main achievements in the 1.1.0 release is a fairly complete
overhaul of the constraint programming functionality in Mozart. This
makes the system leaner with respect to both code size and memory
requirements and several even severe bugs have been fixed. In average,
the refurbishment buys you a 20% speedup on constraint applications (up
to 40% in rare cases).

         <entry>Constructive disjunction removed
         <item>
            That's basically just for the records:
            nobody used it. Since it was complicated and a constant
            source of problems it has been
            removed. In the rare case that you
            used constructive disjunction, contact
            us for help.

         <entry><<FD>> and <<FS>> synchronization behavior corrected
         <item>
            All <<FD>> and <<FS>> propagators now
            conform to their documentation as it
            comes  to synchronization on their
            arguments. Mozart 1.0.0 and 1.0.1 were
            buggy in that execution did not block
            even though the propagators required
            their arguments to be finite domain or
            finite set variables. Watch out! In
            case your scripts that use finite
            domain or finite set propagators just
            block (they show a light (ugly) green
            color in the Oz Explorer) this is a
            likely cause! Fixing is easy: just
            make sure that all variables supplied
            to propagators are in fact constrained
            to be finite domains or finite sets.

         <entry><<Space>> and <<RecordC>> are
                system modules
         <item>
            To achieve better factorization of
            constraint programming support in
            Mozart all constraint programming
            modules are system modules rather than
            modules in the base environment. This
            results in a much smaller memory
            footprint of the Mozart engine in case
            the constraint programming facilities
            are not needed. 
         
        </list>

        <subsection>
          <title/Distribution/

<p>
The distribution layer of Mozart has problems with fire-walls. From our
point of view fire-walls defines all sub nets that restrict their
traffic in some way. It has been impossible to connect to oz sites
through any kind of fire-walls up till now. A naive solution is included
in this release. It will only enable connections through the simplest of
fire walls, but that is better than nothing.  We are working on a more
general solution that will enable our sites to work over more complex
fire-walls.
</p>
<p>
There were problems related to the shortcoming of fire-walls. When a
Mozart sites needs to communicate it will try to open a connection. If
it fails to reach the desired site it will time-out and retry unless it
can deduce that the destination site is dead. The site will continue
trying to open the connection until it succeeds or finds the site dead.
This behavior can disturb fire-walls a lot. The time-out is now growing
with a growth factor. There is now a way to alter the start time-out
value, the growth factor and the timeout ceiling.
</p>


        <subsection>
          <title/Documentation/

          <p>
          <list>
          <entry>Global Index
          <item>The online documentation has been provided with a new index
that encompasses all index entries from the individual
documents.  It can be reached from the main documentation
page, either using the link in the margin or the link
under the Getting Started/Documentation
          header. Caveat: Not all documents have a
          useful index yet! 

          <entry>Postscript and PDF
          <item> Is available now.
          </list>

	<subsection><title/Support for loops/
	  <p>
In order to provide convenient syntax for loops, 2 new keywords have
been introduced: <code/for/ and <code/do/.  This is an incompatible
change.  Check your code: you must now quote every occurrence of
<q/for/ and <q/do/.  Support for loops is still
preliminary.  The general syntax is:
<code display>for ?{Iterators} do ... end</code>
where ?{Iterators} is a sequence of 1 or more iterators.  Supported
iterators are &eg;
<code display/X in L/
for iterating over the elements of a list
<code display/X in I..J/
for iterating from integer <code/I/ to <code/J/.  The loop terminates
as soon as one iterator runs out.
The complete documentation is available in <ptr.extern
to="ozdoc:loop"></p>

	<SubSection>
	  <Title/Compiler Macro Names/
	  <P>
	    The Mozart compiler defines macro names to identify the version
	    of the system that is running (see <Ptr.Extern to="ozdoc:compiler"
	    key="section.macronames">).  These used to be
	    <Code display proglang=oz>Oz_1   Oz_1_0   Oz_1_0_1</Code>
	    for Mozart&nbsp;1.0.1, but to avoid clashes with the macro
	    names provided by DFKI Oz, they are now
	    <Code display proglang=oz
	    >Mozart_1   Mozart_1_1   Mozart_1_1_0</Code>

        <SubSection>
	  <Title/URL Support/
	  <P>The format of URL records has changed incompatibly.  It
	  is now simpler:  feature <code/absolute/ is a boolean
	  indicating whether the url is absolute and feature
	  <code/path/ is now just a list of strings representing the
	  components of the path.  An empty component is now simply
	  omitted when converting to a string using cache syntax: thus
	  the bug involving a <code>//</code> in the middle of a path
	  has now disappeared.  Parsing urls is also faster.

      </section>

      <section id="section.m110.fixes">
        <title/Fixes/

        <subsection>
          <title/All Platforms/

          <p>
          <list>
          <item> Return methods for classes in
                 <<Tk.menuentry>> added.
          <item>Added <<Class.getAttr>> to
                 straightforwardly resolve
                 multiple inheritance conflicts.
          <item>Fixed printing of '~' for floats in
                 virtual strings (bug 390).
          <item>Code garbage collection bug fixed
                 (bug 389).
          <item>Bug in <<Record.dropWhile>> fixed,
                 thanks to Benko Tamas (bug 383).
          <item>Bug in <<FD.exactly>> fixed,
                 thanks again to Benko Tamas (bug
                 378)
          <item>Bug in documentation of <<Append>>
                 fixed (bugs 331, 372)
          <item>Bug fix in <<ByNeed>> returning a
                 variable (bugs 340, 370)
          <item>Several bug fixes for networked
                 file systems (aka interrupted
                 system calls) (bug 360)
          <item> Bug fix in handling <<X=X|X>> during
                 garbage collection (bug 359)
          <item> Bug fix in <<IsDet>> for distributed
                 variables (bug 357) 
          <item> Added <<Pickle.pack>> and
                 <<Pickle.unpack>> for pickling
                 and unpickling from/to byte
                 strings. 
          <item> Fixed bug for doing large number
                 of http requests (bug 350)
          <item> Bug fix for binding faulty distributed
                 variables (bug 348)
          <item> Several compiler bug fixes (bugs
                 304, 305, 306, 344, 339)
          <item> Bug fix in raising distributed
                 programming exception (bug 341)
          <item> Several fixes in unification
                 (bugs 337)
          <item> Some quirks in documentation
                 fixed (bugs 257, 295, 302, 322, 327)
          </list>


        <subsection>
          <title/Windows/

          <p>
          <list>
	  <item> Executable functors are now fully supported under Windows.
	  <item> More contributions have been made available.  In particular
		 the native functors for the regex and gdbm modules have now
		 been built.
          <item> Subprocesses started from Mozart
                 do not open new console windows.
          <item> Mozart is no longer confused by
                 other programs such as <file/fortify/ by
                 a complete redesign of the communication
                 between Mozart and Tk
                 (bug 338).
          <item> Temporary files are put under
                 <file/C:\TEMP/ by default
                 (instead of <file/C:\/).  
                 Creating many files directly under <file/C:\/ made
                 Windows NT freeze.
          <item> <file/ozd/ now looks in the registry to see
                 whether it can figure out where Emacs is installed.
                 Furthermore, <file/ozd/ depended upon <file/bash/ as
                 command interpreter to start Emacs&emdash;now it also
                 works with <file/command.com/ and <file/cmd.exe/.
          </list>

        <subsection>
          <title/Linux/

          <p>
          <list>
          <item> Memory management for Linux 2.2.x
                 fixed (bugs 391, 403).
          </list>


        <subsection>
          <title/Other Platforms/

          <p>
          <list>
          <item> Initial support for Mac OS X.
          <item> Compiles under FreeBSD (Bug 393).
          </list>
        
      </section>

       
    <chapter id="chapter.m101">
      <title/Changes between Mozart 1.0.0 and Mozart 1.0.1/

      <p>
        This is a minor improvement release to fix
        some small bugs and offer some
        improvements. You can judge yourself
        whether you should upgrade to 1.0.1 by 
        reading the list of fixes and
        improvements. If you have suffered from
        any of the problems mentioned, you should
        definitely download the new version.  

      <list>
         <entry>General fixes
         <item>
         <list>
           <item> Obsolete menu entries in OPI removed (Bug 276) 
           <item> Argument parsing made even more POSIX compliant (Bug 278) 
           <item> Error messages pop up right buffer in OPI (Bug 243) 
           <item> OPI connects correctly to engine during startup 
           <item> Module managers resolve user
                  names '~name' in file names (Bug 219) 
                          Many small fixes 
         </list>


         <entry>Windows fixes 
         <item>
         <list>
            <item> Blanks in URLs work now: Mozart
                   can now be installed into a directory
                   whose path has blanks in it
                   (for example 
                    <file/C:\Program Files\Mozart/)
                          (Bug 255) 
            <item> Default contributions available 
            <item> Performance improvements for Graphics 
            <item> Improved installation under
                   Windows (Increased Mozart awareness for
                   Microsoft Internet Explorer and Netscape Communicator) 
         </list>
         
         <entry>Unix fixes 
         <item>
         <list>
            <item> OZHOME can be adapted in oz startup script 
            <item> Linear solver packages excluded by default 
         </list>
         
         <entry>Linux RPM fixes 
         <item>
            <list>
              <item>Version numbering scheme fixed such that upgrades become possible
             </list>

         <entry>Other platform fixes 
         <item>
          <list>
            <item> Configure problems for FreeBSD
                   3.0 (freebsd*-i486) fixed 
            <item>
                          Ports to Irix (irix6-mips), OSF-Alpha (osf1-alpha), HPUX (hpux-700)
                          improved 
         </list>

          <entry>
          Improvements 
          <item>
          <list>
          <item>          Remote module managers support arbitrary fork methods (in particular
                          <<ssh>>) 
          <item>
                          Parallel search engines
allow specification of fork methods 
<item>
                          Example programs
included in all distributions (not only rpms) 
<item>
                          <<Open.pipe>> allows
brute force shutdown via close method 
          </list>
        </list>

    <chapter id="chapter.m100">
      <title/Changes between DFKI Oz and Mozart 1.0.0/

      <section id="section.m100.general">
         <title/General Changes/

      <subsection id="section.m100.general.modules">
        <title/Functors and Modules/

        <p>
          Mozart now comes with a powerful internet-based module
          system that supports lazy loading, native modules and
          more. For an introduction see <ptr.extern
          to="ozdoc:apptut">. 

        <p>
          To make best use of the new module system, the previous Oz
          Standard Modules have been split into the <em/base
          environment/ and the <em/system modules/. The compiler
          always provides the base environment, it contains all
          operations working on data structures like records, lists,
          and so on. For more information see <ptr.extern
          to="ozdoc:base">. 

        <p>
          All remaining modules (including the constraint programming
          support) are now provided as system modules that are subject
          to import in functor definitions. The system modules are
          described in <ptr.extern to="ozdoc:system">.

        <p>
          The Oz Programming Environment however still follows the
          design to ease explorative development. For that reason all
          system modules are still available in the Oz Programming
          Environment. The Environment nicely exemplifies the merits
          of the new module system: while providing all system modules
          the Environment starts in a fraction of a second by taking
          advantage of dynamic linking.

      <subsection id="section.m100.general.app">
        <title/Applications/

        <p>
          The rudimentary standalone application support available in
          DFKI Oz has been replaced by powerful abstractions and
          command line tools (see <ptr.extern to="ozdoc:tools">) to
          support different aspects of application programming. In
          fact, a new tutorial (see <ptr.extern to="ozdoc:apptut">)
          is entirely devoted to application programming with Oz and
          Mozart. 

    <section id="section.m100.syntax" proglang=oz>
      <Title/Syntax Improvements/
      <P>
	Mozart implements the language Oz&nbsp;3, as opposed to
	DFKI Oz&nbsp;2, which implemented Oz&nbsp;2.  This chapter
	summarizes language changes between Oz&nbsp;2 and Oz&nbsp;3,
	of which most are only of syntactical nature.
      <subsection>
	<Title/Conditionals/
	<P>
	  The <<case>> keyword used to introduce one of two conditionals:
	  the boolean or the pattern matching conditional.  To adapt to
	  common intuitions, the syntax and semantics have been changed.
	<Para class=apropos><Title/Boolean Conditionals/
	  The boolean conditional is now written as
	  <<<if ?{E} then ?{SE1} else ?{SE2} end>>>
	  If the construct is statement position, the <<else ?{SE2}>> part
	  is optional and defaults to <<else skip>>.
	<P>
	  Since the <<if>> keyword is now used for boolean conditionals,
	  the former (and seldom used) <<if>> conditional has been renamed
	  to <<cond>>.  There is no <<elsecond>> to replace <<elseif>>.
	<Para class=apropos><Title/Pattern-Matching/
	  The <<case ?{E} of &ellipsis; end>> conditional retains its syntax
	  but changes its semantics.  Where formerly logic (dis-)entailment
	  was used to match the value against a pattern, now a series of
	  sequential tests is performed.  This makes no difference if the
	  match is entailed.  Disentailment, however, may remain undiscovered
	  and the thread block, &eg;, in:
	  <<<case f(a b) of f(X X) then &ellipsis; end>>>
	<P>
	  Furthermore, the box <<[]>> separating pattern-matching clauses
	  now also has sequential semantics, and is thus equivalent to the
	  now deprecated, though still allowed, <<elseof>>.
	<P>
	  <<elseif>> and <<elsecase>> may still be freely intermixed within
	  <<if>> and <<case>> conditionals.
      <subsection>
	<Title/Functors/
	<P>
	  To accomodate modular application development, a module system
	  has been designed.  The language itself supports the definition
	  of <Em/functors/, from which modules can be obtained via linking.
      <subsection>
	<Title/Exceptions/
	<P>
	  The construct <<raise ?{E1} with ?{E2} end>> has been removed.
	  This was an experimental feature that has been found to be
	  rarely used.
      <subsection>
	<Title/Keywords/
	<Para class=apropos><Title/New Keywords/
	  Due to syntax changes, Oz&nbsp;3 has the following keywords, which
	  thus cannot be used as unquoted atoms any more:
	  <Table>
	    <TR>
	      <TD/<<at>>/<TD/<<cond>>/<TD/<<define>>/<TD/<<export>>/
	    <TR>
	      <TD/<<functor>>/<TD/<<import>>/<TD/<<prepare>>/<TD/<<require>>/
	  </Table>
	<Para class=apropos><Title/Removed Keywords/
	  The following keywords have been returned atom status and do
	  not count as keywords any more:
	  <Table>
	    <TR>
	      <TD/<<with>>/
	  </Table>
      <subsection>
	<Title/Core Expansion/
	<P>
	  The core expansion of Oz&nbsp;3 as defined in
	  <Ptr.Extern to="ozdoc:notation"> does not give core variables
	  (written without backquotes) normal variable status any more,
	  but considers them variables statically bound within a runtime
	  library environment.  This means that the used backquote
	  variables are not part of the Base Environment.
	<P>
	  This was necessary because the old design compromised language
	  security.

    <section id="section.m100.base">
      <title/Base/
      <p>
	This chapter documents the changes that have taken place in the
	Base Environment (formerly Standard Modules) and base language.
    
      <subsection class=unumbered>
        <title/Classes with Multiple Inheritance/

        <p>
          Multiple inheritance does not provide for automatic
          conflict resolution. If a conflicting method definition
          arises in multiple inheritance, the 
          conflict <em/must/ be resolved by overriding the
          method. Otherwise, an exception is raised.
        <p>
          A conflicting method definition arises if a method is
          defined by more than one class. For example,
<<<class A meth m skip end end
class B meth m skip end end
class C from A B end>>>
          raises an exception (the old model would silently pick the
          method from <<B>>), since both <<A>> and <<B>> define the
          method <<m>>. The only way to fix this is by overriding <<m>>
          when creating class <<C>>: 
          <<<class C from A B meth m skip end end>>>
        <p>
          Features and attributes are handled identically. For a
          more thorough discussion see <ptr.extern
          to="ozdoc:tutorial" key="chapter.classes">.

      <subsection class=unumbered>
        <title/The Modules <<Class>> and <<Object>>/

        <p>
          The modules <<Class>> and <<Object>> underwent a major
          redesign and re-implementation. The redesign became
          necessary because the old modules compromised both system
          and application security. Programming abstractions that
          support common patterns of object oriented programming are
          described in the module <<ObjectSupport>> (see <ptr.extern
          to="ozdoc:system" key="chapter.objectsupport">).


      <subsection id="section.m100.base.chunks">
        <title/Chunks/

        <p>
          The procedures <<Chunk.hasFeature>> and <<Chunk.getFeature>>
          are gone. Just use <<HasFeature>> and <<Value.'.'>> (see
          <ptr.extern to="ozdoc:base" key="chapter.values">).

    <section id="section.m100.system">
      <title/System Modules/

      
      <subsection id="section.m100.system.search">
        <title/Search Engines renamed/

        <p>
          The engines that used to be available by <<SearchOne>>,
          <<SearchAll>>, and <<SearchBest>> are now available under
          <<Search.base.one>>, <<Search.base.all>>, and
          <<Search.base.best>> (for more information see <ptr.extern
          to="ozdoc:system" key="chapter.search">). However in the Oz
          Programming Interface <<SearchOne>>,
          <<SearchAll>>, and <<SearchBest>> are still available for
          convenience. 

      <subsection id="section.m100.system.schedule">
        <title/Scheduling support moved/

        <p>
          Scheduling support is now provided by the system module
          <<Schedule>> rather than <<FD.schedule>>. See also
          <ptr.extern to="ozdoc:fdt" key="chapter.scheduling">  and
          <ptr.extern to="ozdoc:system" key="chapter.schedule">.

      <subsection id="section.m100.system.property">
        <title/<<System.get>> and <<System.set>>/

        <p>
          <<System.get>> and <<System.set>> have been replaced by more
          powerful procedures that are available in the module
          <<Property>>, which is described in 
          <ptr.extern to="ozdoc:system" key="chapter.property">.

      <subsection id="section.m100.system.vstoval">
        <title/<<System.valueToVirtualString>> and <<System.virtualStringToValue>>/

        <p>
          <<System.valueToVirtualString>> and
          <<System.virtualStringToValue>> are now available as
<<Value.toVirtualString>> (see
          <ptr.extern to="ozdoc:base" key="chapter.values">) and
<<Compiler.virtualStringToValue>> (see
          <ptr.extern to="ozdoc:compiler"
          key="section.api.module">). In particular, 
          <<Compiler.virtualStringToValue>> is a full featured and
	  stable replacement for the ad-hoc
          <<System.virtualStringToValue>>. 

    <section id="section.m100.tools">
      <Title/Tools/
      <subsection>
	<Title/New Tools/
	<P>
	  Mozart comes with (improved) versions of the tools that
	  came with DFKI Oz.  Additionally, it has:
	  <List>
	    <Item>a profiler, described in <Ptr.Extern to="ozdoc:profiler">,
	      and
	    <Item>a source-level debugger called Ozcar, described in
	      <Ptr.Extern to="ozdoc:ozcar">.
	  </List>
      <subsection>
	<Title/Compiler/
	<P>
	  The compiler has been reimplemented in Oz.  This means that an
	  arbitrary number of compiler objects may be instantiated on the
	  same VM.  Linguistic reflection is thus fully supported through
	  an API that offers unrestricted access to the compiler's
	  functionality, documented in <Ptr.Extern to="ozdoc:compiler">.
      <subsection>
	<Title/Gump/
	<P>
	  Gump, the frontend generator for Oz, is no longer a stand-alone
	  tool that must be invoked on a file, but is closely integrated
	  into the Oz compiler.  It is now sufficient to set a switch:
	  <<<\switch +gump>>>
	  and full Gump functionality as described in <Ptr.Extern
	  to="ozdoc:gump"> is available within the language.  Furthermore,
	  support for Gump under Windows has been greatly improved.

</Book>
