<!--
  - Authors:
  -   Christian Schulte <schulte@ps.uni-sb.de>
  -
  - Contributors:
  -   Denys Duchier <duchier@ps.uni-sb.de>
  -   Leif Kornstaedt <kornstae@ps.uni-sb.de>
  -   Raphael Collet <raphael.collet@uclouvain.be>
  -
  - Copyright:
  -   Christian Schulte, 1998
  -
  - Last change:
  -   $Date: 2008-07-01 15:22:47 +0200 (Tue, 01 Jul 2008) $ by $Author: raph $
  -   $Revision: 17013 $
  -
  - 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.m140">
    <meta name="html.split"	  value="section.m140.lang">
    <meta name="html.split"	  value="section.m140.impl">
    <meta name="html.split"	  value="section.m140.fixes">

    <meta name="html.split"       value="chapter.m132">
    <meta name="html.split"	  value="section.m132.changes">
    <meta name="html.split"	  value="section.m132.usability">
    <meta name="html.split"	  value="section.m132.maintainability">
    <meta name="html.split"	  value="section.m132.internal">

    <meta name="html.split"       value="chapter.m131">
    <meta name="html.split"	  value="section.m131.mogul">
    <meta name="html.split"	  value="section.m131.changes">
    <meta name="html.split"	  value="section.m131.fixes">
    <meta name="html.split"	  value="section.m131.internal">

    <meta name="html.split"       value="chapter.m130">
    <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.m130.changes">
    <Meta name="html.split"       value="section.m130.fixes">
    <Meta name="html.split"       value="section.m130.internal">

    <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.
    </Abstract>
  <Body>

  <chapter id="chapter.m140">
    <title/Mozart 1.4.0/

    <p>Mozart 1.4.0 is both a development and maintenance release.  It
    contains some substantial changes compared to former releases.  It
    provides some new features, but also discards some former
    features, making it backwards-incompatible in some cases.
    This chapter lists the differences between Mozart 1.4.0 and Mozart
    1.3.2.

    <section id="section.m140.lang" proglang=sh>
      <title/Changes to the language/

      <p>This new release provides a certain number of changes in the
      support for distribution.  The philosophy has not changed,
      though: distribution is achieved by transparently sharing
      language entities between sites.  And most of the usual features
      are kept intact, like the modules <<Connection>> and <<Remote>>.
      However, the distribution strategy is now changeable for any
      single entity.  The most dramatic change is in the failure
      handling primitives: the former fault model has been simplified
      to the extreme (only one primitive).  Most of the new features
      are available in the new module <ref.extern to="ozdoc:system"
      key="chapter.dp"/<<DP>>/.

      <subsection><title/New distribution features/

      <p>Mozart now provides more than one protocol for some entities.
      An entity is no longer stuck to one default protocol.  A cell,
      for instance, may be distributed in five different ways for its
      state, and four different ways for its distributed garbage
      collection.  The protocol choice is specified as
      an <em>annotation</em> before the entity is distributed.  The
      list of available protocols is given in the documentation of
      module <ref.extern to="ozdoc:system" key="chapter.dp"/<<DP>>/.

      <p>More entities benefit from distribution support, like arrays
      and dictionaries.  Distributed variables also have built-in
      support for <em>by-need evaluation</em>: making a variable
      needed is now propagated from site to site.  <em>Failed
      values</em> are also distributed.

      <p>Distributed locks have a better support than before thanks to
      stationary objects and procedures.  The built-in support for
      stationary callable entities guarantees a globally unique thread
      identifier for the caller and the callee.  So reentrant locks
      are supported correctly, even in the case of mutually recursive
      stationary procedures and objects.

      </subsection>

      <subsection><title/New fault model/

      <p>The set of possible fault states has been reduced to four:
      <<ok>>, <<tempFail>>, <<localFail>>, and <<permFail>>.  Contrary
      to the former model, the transition from <<tempFail>> to <<ok>>
      is directly observable.

      <p>Upon failure, synchronous operations simply block.
      Exceptions and handlers have been discarded.  So by default,
      nothing <em>wrong</em> happens in an application that does not
      handle distribution failures.  Watchers have been kept, but no
      longer as a primitive.

      <p>Every site maintains a <em>fault stream</em> for each entity
      it refers to.  The fault stream reflects the history of the
      local fault state of the entity on the given site.  Fault state
      transitions are thus notified by dataflow only.  Watchers are
      trivial to build on top of fault streams.

      <p>It is also possible to make an entity fail on purpose.  The
      failure may be visible on the current site (procedure
      <<DP.break>>) or on all sites (procedure <<DP.kill>>).

      <p>The former module <<Fault>> has become obsolete.  The new
      module <<DP>> has taken over all its functionalities.

      </subsection>

      <subsection><title/Post-mortem finalization/

      <p>A new finalization mechanism is available.  It is triggered
      after an entity has left memory, which makes it more reliable
      than the weak finalization, in particular in the presence of
      distribution.

      </subsection>

    </section>

    <section id="section.m140.impl" proglang=sh>
      <title/Changes to the implementation/

      <p>The distribution layer has been completely reimplemented on
      top of the DSS (Distribution SubSystem) library.  The latter was
      written by Erik Klintskog as part of his PhD thesis:
      <ref.extern to="http://www.sics.se/~erik/PAPERS/phd_final.pdf"/
      Generic Distribution Support for Programming Systems/,
      KTH, June 2005.
      The DSS can be used independently of Mozart: it's a C++ library
      that is called by the Mozart emulator, but it can also be used
      in any C++ program to provide similar distribution abilities.
      The design and implementation of the new distribution layer is
      described in Raphael Collet's PhD thesis:
      <ref.extern to="http://www.info.ucl.ac.be/~pvr/raphthesis.pdf"/
      The Limits of Network Transparency in a Distributed Programming
      Language/, UCL, December 2007.
      The DSS library is under the directory <<platform/dss>> in the
      sources of Mozart.

      <p>The distribution layer extends the capabilities of the former
      distribution layer, and implements the new fault model for Oz.
      The new library subsumes the former network protocols used in
      Mozart, but their implementation differ and are incompatible.
      The Mozart marshaler and pickler have been modified to fit the
      new architecture.

      <p>The internal VM support for distributing language entities
      has been redesigned as well, in order to make the distribution
      support more generic.

    </section>

    <section id="section.m140.fixes" proglang=sh>
      <title/Bug fixes/

      <p>A various number of small bug fixes have been incorporated to
      the new release.  Notable ones are:
      <list>

	<item><<IsOdd>> was incorrectly returning <<false>> when given
	an odd negative number.  It now returns <<true>> as
	expected.</item>

	<item>Weak dictionaries can now be finalized via other weak
	dictionaries.  A fixpoint has to be computed in the garbage
	collector in order to determine which ones had to be
	finalized.  This fixpoint computation has been added.</item>

	<item>Unification is now fully <em>incremental</em>.  Unifying
	streams no longer causes memory leaks, for instance.  The
	unification algorithm has been fixed to handle all cases where
	a part of the unification cannot proceed immediately.  So
	unifying <<X|Xs=Y|Ys>> where <<Xs>> and <<Ys>> are read-only
	binds <<X=Y>>, and resumes the unification statement to
	<<Xs=Ys>>, which removes the reference to <<X>> and <<Y>>.
	The new implementation also handles gracefully record
	containing distributed variables: unifying <<X#Y=foo#bar>>
	with <<X>> and <<Y>> distributed performs the distributed
	bindings <<X=foo>> and <<Y=bar>> <em>in parallel</em>, and no
	longer sequentially.</item>

	<item>There were also some important bug fixes in the
	marshaler, which are orthogonal to the new distribution
	layer.</item>

	<item>The executable <<ozengine>> can now belong to a
	directory whose path contains spaces.  Similarly, functors
	compiled as executables can be run from a path different than
	<<'.'>> using paths containing spaces.</item>

      </list>

    </section>

  </chapter>

  <chapter id="chapter.m132">
   <title/Mozart 1.3.2/
   
   <p>Mozart 1.3.2 is a bug-fix and maintenance release. One of the
   main fixes is adding compatibility with gcc compilers newer than
   3.3.x, including the 4.x series.
   <p>

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

      <subsection><title/Dictionaries/
      <p>Copying of dictionaries was broken. Fixed. (bug 1352)</p>
      </subsection>
      
      <subsection><title/FSF/
      <p>Mozart added to the FSF directory. (bug 1207)</p>
      </subsection>

      <subsection><title/Application module/
      <p><code/Application.getGuiArgs/ now returns arguments as
      documented. (bug 1691)</p>
      </subsection>

      <subsection><title/Psql Contribution/
      <p>The contribution to work with PostgreSQL is working again. To
      build it use <code/--enable-contrib-psql/ during configuration.</p>
      </subsection>

   </section>

   <section id="section.m132.usability">
      <title/Changes in the implementation that affect usability and performance/
      <subsection><title/Oz Compiler/
      <p>
        <list>
        <item> Keyword <code/native/ has been removed from class's
        properties. This implies a change in the module <code/Open/ in
        contributions, fixing a runtime error (bug 1277).

        <item> A warning is triggered when a non-valid property is
        added after keyword <code/fun/ in function definitions. This
        prevents programmers from creating eager functions when
        keyword <code/lazy/ is misspelled (bug 1437).

        <item> Added <<--warnshadow>> option to compiler to emit warning
        message when variables in an outer scope are shadowed (bug 1707).

        </list>
      </p>
      </subsection>

      <subsection><title/Garbage Collection/
      <p>
        <list>
	<item> Indexes have been fixed to work with RAM memory bigger
	that 1GB.
        </list>
      </p>
      </subsection>

      <subsection><title/Distribution Layer/
      <p>
        <list>
        <item> <code/NewPort/ does not block anymore when using a
        distributed variable for the stream. Currently, the builtin
        receives one input and one output, but it should change to two
        outputs in a future release (bug 1521).

        <item>Problem with sockets generating 'segmentation fault'
        with P2PS is fixed (bugs 1304, 1339).

        <item>Failed assertion in the Owner table fixed (bug 1461).
        </list>
      </p>
      </subsection>

   </section>

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

      <p>
      <list>
      <item> Mozart 1.3.1 compiles with gcc up to version
      3.3.x. Mozart 1.3.2 add compatibility to build using gcc newer
      than 3.3.x and up to 4.1.x

      <item> Succesful build reported on MacOSX/intel after fixing
      configuration. (bug 1859)
      </list>
      </p>

   </section>

   <section id="section.m132.internal">
      <title/More Bug Fixes/

      <p>
      <list>
      <item> Error messages: 1429, 1816
      <item> XML related: 1333
      <item> GCC Compiler: 1636
      <item> RPM building: 1649
      <item> Reflect module: 1839
      <item> FloatToString: 1869
      <item> Emacs OPI related: 1890
      <item> Tools: 1332, 1459, 1775
      <item> Documentation: 590, 991, 1371, 1445, 1374, 1375, 1419, 1466, 1479, 1614, 1660, 1818, 1820, 1832
      </list>  
      </p>
   </section>

  </chapter>

  <chapter id="chapter.m131">
    <title/Mozart 1.3.1/

    <p>Mozart 1.3.1 is a bug-fix and maintenance release, but most importantly
    it has undergone important modifications to make it work correctly with Mogul
    again. 
    </p>

    <section id="section.m131.mogul" proglang=sh>
      <title/Changes in MOGUL and ozmake/
      <subsection><title/Support for multiple package formats/
      <p>A serious issue for the 1.3.0 release was that <code/ozmake/
      packages produced for 1.2.5 and for 1.3.0 where not compatible.
      The <ref.extern to="http://www.mozart-oz.org/mogul/">MOGUL</ref.extern>
      infrastructure was revised and extended to transparently provide
      support for both.  Packages contributed in one format are now automatically
      also converted and made available in the other format.  <code/ozmake/
      now uses Mozart version-specific areas to install packages so that you
      can have both 1.2.* and 1.3.* versions of Mozart installed on your system.
      Furthermore,
      <code/ozmake/ has been modified to download packages from the
      version-specific area of MOGUL appropriate for the version of Mozart that
      you are running.  Unfortunately, this means that an old version of <code/ozmake/
      will not know that it needs to access an appropriate area; however, you can
      easily configure it to do so with the following command:
<code display>
ozmake --config=put --archive=http://www.mozart-oz.org/mogul/pkg/1.2.5/source
</code>
      After that, <code>ozmake --install --package mogul:/duchier/select</code> will
      once again work as expected, download the named package from the 1.2.5 area in
      MOGUL and install it on your system.</p>

      <subsection><title/Bug Fixes/
      <p>A bug which sometimes caused <code/ozmake/ to hang after downloading a package
      has been fixed.  The compiler bug that was responsible was fixed and a workaround
      was also added to ozmake in case someone compiles it with a compiler that still
      has the bug.
      <p>syntax errors discovered while scanning functors for automatically extracting
      dependencies are now reported nicely
    </section>

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

      <subsection id="sec.m131.oztool">
        <title/oztool/
        <p><code proglang=sh/oztool version/ now prints the version number of
         the installed Mozart (e.g., 1.3.1).
        </p>

      <subsection><title/loop support/
      <p>Previously, the iterator <code proglang=oz/X in ?{E1}..?{E2};?{E3}/
      only permitted to count from ?{E1} up to ?{E2} by increment of ?{E3}.  Now,
      whether we intend to count up or down to ?{E2} is determined by the
      sign of ?{E3}.

      <subsection><title/POSIX support/
      <p>Added <code proglang=oz/OS.rmDir/ to remove a directory.  Note that the directory
      must be empty before it is removed.
      <p>Extended <code proglang=oz/OS.stat/ to also return <code proglang=oz/ino/ and
      <code proglang=oz/dev/ for inode and device information.

      <subsection><title/Standard Library/
      <p>The standard library was improved and extended, and documentation was
      added for all modules.  The library currently has sections for abstract
      datatypes, networking support, operating system support, GUI programming
      and XML support.

    </section>

    <section id="section.m131.fixes">
      <title/Changes in the implementation that affect usability and performance/
      <subsection id="sec.m131.compiler">
        <title/Compiler/
        <p>
        <list>
          <item> Register allocation (bugs 1291, 1070, 1329)
          <item> Improved static analysis (bugs 87, 299, 654, 655)
	  <item> Code generation (bugs 464, 867, 1322): in particular,
	  this fixes the occasional problems with complex andthen/orelse
	  expressions
        </list>
      <subsection id="sec.m131.unification">
        <title/Unification/
	<p>Failure in the unification of OFS (open feature structures)
	did not always untrail properly (bug 1314)
      <subsection id="sec.m131.distribution">
        <title/Distribution Subsystem/
	<p>Distributed resources (distributed entities without a consistency
        protocol represented by a special resource token on remote sites)
        handled inproperly during local garbage collection (bug 1304)

    <section id="section.m131.internal">
      <title/Changes in the implementation that affect maintainability and portability/
      <subsection><title/Compiling C++ native functors on Windows/
      <p>There is currently a bug in GCC (bugzilla #11005) which results in certain
      symbols not being exported by the Mozart DLL on Windows.  This made it impossible to
      compile and link certain C++ native functors on that platform.  We have now included
      a workaround which &eg; makes it possible to compile <file>mogul:/duchier/select</file>
      on Windows again.

  </chapter>

  <chapter id="chapter.m130">
    <title/Mozart 1.3.0/

    <p>
        Mozart 1.3.0 is both the development and maintenance
        release. The work on 1.3.0 began immediately after 1.2.0,
        while the subsequent 1.2.* releases were intended primarily as
        maintenance releases. The Mozart system that became 1.3.0 has
        been extensively (and successfully) used for our own research
        projects.
    </p>

    <p>
        The changes in the language, Mozart libraries and the
        implementation are summarized in the following sections.
    </p>

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

      <subsection id="sec.m130.byneed">
        <title/Redesign of by-need synchronization/
        <p>The by-need synchronization mechanism has been completely
        redesigned and reimplemented.  It now applies to all kinds of
        variables, and does not make use of futures.  The term <q/future/
        now only refers to read-only views of logic variables.
        Here is a summary of the changes in the language.
        <list>
  	<item>Each variable has a <Def/need/ status: it can be <q/needed/
  	  or <q/not needed/.  A needed variable triggers all by-need
  	  computations associated to it (see below).  The need status of
  	  a variable can be queried with the function <<IsNeeded>>.</item>
  	<item>The status of a variable changes monotonically: it can 
  	  only go from <q/not needed/ to <q/needed/.  This change is
  	  triggered by a demanding statement, such as <<{Wait ?_{X}}>>.
  	  Currently only free variables and futures can be <q/not needed/.
  	  Kinded variables are needed by default.  All values are needed
  	  by convention.</item>
  	<item>A by-need computation is simply a computation that
  	  synchronizes on the need of a variable.  This is provided by the
  	  statement <<{WaitNeeded ?_{X}}>>, which blocks until&nbsp;?_{X} is
  	  needed.  The procedure <<ByNeed>> has been redefined in terms of
  	  <<WaitNeeded>> and no longer uses futures.  Lazy functions use
  	  the new <<ByNeed>>.</item>
  	<item>As before, futures are created with the statement
  	  <<?_{X}=!!?_{Y}>>, which makes ?_{X} a read-only view of&nbsp;?_{Y}.
  	  If ?_{X} becomes needed, ?_{Y} is automatically made needed.
  	  This allows to protect a by-need computation from binding attempts.
  	  The procedure <<ByNeedFuture>> provides this combination, together
  	  with failed values (see below) for reporting exceptions.</item>
  	<item>Failed values are no longer considered futures, hence the term
  	  <q/failed future/ should be avoided.  They are created with the
  	  primitive <<Value.failed>>, and have the status <<failed>>
  	  (returned by <<Value.status>>).</item>
        </list>

      <subsection id="sec.m130.uniform">
        <title/Uniform state operators/
        <p>
          Mutable operators (Cells, Object Attributes,
          Dictionary/Array Entries) can now be updated with the <<:=>>
          operator and the current value retrieved with the <<@>>
          operator.  More details in <ptr.extern to="ozdoc:base"
          key="chapter.infix">.
        </p>

      <subsection id="sec.m130.base">
        <title/The Oz Base environment/
        <p>
          Added <<Array.exchange>>, <<Dictionary.exchange>>,
          <<WeakDictionary.exchange>>, <<Dictionary.condExchange>>,
          and <<WeakDictionary.condExchange>>.
        </p>

      <subsection id="sec.m130.ozcar">
        <title/Ozcar/
        <p>
  	  The Ozcar manual has been largely reworked for improved
          precision
  	  and readability.  Ozcar itself has been extended by the ability
  	  to debug threads remotely.  This feature also supports the debugging
  	  of distributed applications.
        </p>

      <subsection> <title/Ozmake/
        <p>
  	  'ozmake' became a part of the Mozart's standard library, and
  	  so it it included in the release.
        </p>

      <subsection id="sec.m130.windows">
        <title/Oztool on Windows/
        <p>
  	  Mozart is now buildable with <code proglang=sh/gcc/ version
          3 and upwards. <code proglang=sh/oztool/ now reverts to 
          <code proglang=sh/gcc/ and <code proglang=sh/g++/ 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">.
        </p>

      <subsection><title/QTk/
        <p>
          QTk now transparently supports accentuated characters on all 
	  platforms. The <<hidden>> parameter has been added to the <<set>>
	  method of the <<placeholder>> widget. The <<onCreation>> parameter
	  has been added to all widgets. The <<QTk.flush>> function has been
	  introduced. Several bugs were fixed, in particular display problems
	  on Mac OS X.
        </p>

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

      <subsection id="sec.m130.gc">
        <title/Garbage collection/
        <p>
          Entries in thread stacks and closures that are no longer
          reachable are now garbage collected.
        </p>

      <subsection><title/Oz dictionaries/
        <p>
          The implementation of Oz dictionaries has been replaced. In
          particular, the new implementation can efficiently handle
          lookups for absent entries (when it is necessary to confirm
          that an entity is not in the dictionary), and can handle
          subsequent numeric keys space-efficiently.
        </p>

      <subsection><title/Performance of the distribution subsystem/
        <p>
          The distribution subsystem and the distribution's marshaler
          have been analyzed and tuned in order to achieve high
          throughput between Mozart processes.
        </p>

      <subsection><title/Pickling format/
        <p>
          The pickling format has been incompatibly changed for the
          sake of space and run-time efficiency.
        </p>

      <subsection><title/Bugs../
        <p>
          In general, we tried to keep up with the bug reports. There
          were too many of them to list them all here..
        </p>

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

      <subsection><title/GCC caveats for building from sources/
        <p>
          The Mozart 1.3.0 release supports both the GCC 3.2+ with its
          new multi-vendor C++ ABI, and the old 2.95.*. GCC 3.2+ is
          the default on most contemporary GNU/Linux platforms, as
          well as available for most types of unix and the CYGWIN
          environment for Windows. We use GCC 3.3.2 on Linux and
          Solaris, and 3.3.1 with CYGWIN.
        </p>

        <p>
          We would like to emphasize that Mozart binaries are not
          compatible if compiled with these two versions of GCC! In
          particular, all custom native libraries have to be
          (re)compiled with the compiler used for building the Mozart
          system itself.
        </p>

        <p>
          Moreover, building a GCC 3.2+ compiler (to be used for
          compiling Mozart) on an old Linux installation is more
          complicated than it might appear, and we strongly advise
          against that. Upgrading Linux is much simpler and more
          reliable way to obtain the right GCC compiler.
        </p>


  </chapter>

  <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.r1">
      <title/Revision 1/
      <p>
      <list>
        <item/Fixed a garbage collection bug that showed up on Solaris 9./
	<item/ozdoc now generates PNG graphics rather than GIF./
      </list>
    </section>

    <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>
