## 5.1 Changes

### 5.1.1 Pickling

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 Chapter 7 of ``Oz Shell Utilities'' for documentation.

### 5.1.2 Constraint Programming

General improvements

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

Constructive disjunction removed

  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.

`FD` and `FS` synchronization behavior corrected

  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.

`Space` and `RecordC` are system modules

  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.

### 5.1.3 Distribution

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.

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.

### 5.1.4 Documentation

Global Index

  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!

Postscript and PDF

  Is available now.

### 5.1.5 Support for loops

In order to provide convenient syntax for loops, 2 new keywords have been introduced: `for` and `do`. This is an incompatible change. Check your code: you must now quote every occurrence of ``for'' and ``do''. Support for loops is still preliminary. The general syntax is:

> `for` Iterators`do ... end`

where Iterators is a sequence of 1 or more iterators. Supported iterators are e. g.

> `X in L`

for iterating over the elements of a list

> `X in I..J`

for iterating from integer `I` to `J`. The loop terminates as soon as one iterator runs out. The complete documentation is available in ``Loop Support''

### 5.1.6 Compiler Macro Names

The Mozart compiler defines macro names to identify the version of the system that is running (see ``The Mozart Compiler''). These used to be

> `Oz_1 Oz_1_0 Oz_1_0_1`

for Mozart 1.0.1, but to avoid clashes with the macro names provided by DFKI Oz, they are now

> `Mozart_1 Mozart_1_1 Mozart_1_1_0`

### 5.1.7 URL Support

The format of URL records has changed incompatibly. It is now simpler: feature `absolute` is a boolean indicating whether the url is absolute and feature `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 `//` in the middle of a path has now disappeared. Parsing urls is also faster.