## 4.1 Changes in Oz, Mozart libraries and UI

### 4.1.1 Redesign of by-need synchronization

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 ``future'' now only refers to read-only views of logic variables. Here is a summary of the changes in the language.

- Each variable has a need status: it can be ``needed'' or ``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`.

- The status of a variable changes monotonically: it can only go from ``not needed'' to ``needed''. This change is triggered by a demanding statement, such as `{Wait` `X``}`. Currently only free variables and futures can be ``not needed''. Kinded variables are needed by default. All values are needed by convention.

- 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 `X` is needed. The procedure `ByNeed` has been redefined in terms of `WaitNeeded` and no longer uses futures. Lazy functions use the new `ByNeed`.

- As before, futures are created with the statement `X``=!!``Y`, which makes `X` a read-only view of `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.

- Failed values are no longer considered futures, hence the term ``failed future'' should be avoided. They are created with the primitive `Value.failed`, and have the status `failed` (returned by `Value.status`).

### 4.1.2 Uniform state operators

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 Chapter 11 of ``The Oz Base Environment''.

### 4.1.3 The Oz Base environment

Added `Array.exchange`, `Dictionary.exchange`, `WeakDictionary.exchange`, `Dictionary.condExchange`, and `WeakDictionary.condExchange`.

### 4.1.4 Ozcar

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.

### 4.1.5 Ozmake

'ozmake' became a part of the Mozart's standard library, and so it it included in the release.

### 4.1.6 Oztool on Windows

Mozart is now buildable with `gcc` version 3 and upwards. `oztool` now reverts to `gcc` and `g++` as default when invoked with the `-gnu` option. This can be configured as described in Section 6.1 of ``Oz Shell Utilities''.

### 4.1.7 QTk

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.