- Up - | Next >> |
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
).
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''.
Added Array.exchange
, Dictionary.exchange
, WeakDictionary.exchange
, Dictionary.condExchange
, and WeakDictionary.condExchange
.
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.
'ozmake' became a part of the Mozart's standard library, and so it it included in the release.
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''.
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.
- Up - | Next >> |