<< Prev | - Up - | Next >> |
Mozart implements the language Oz 3, as opposed to DFKI Oz 2, which implemented Oz 2. This chapter summarizes language changes between Oz 2 and Oz 3, of which most are only of syntactical nature.
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.
Boolean Conditionals
The boolean conditional is now written as
if
Ethen
SE1else
SE2end
If the construct is statement position, the else
SE2 part is optional and defaults to else skip
.
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
.
Pattern-Matching
The case
E of
... 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, e. g., in:
case f(a b) of f(X X) then
...end
Furthermore, the box []
separating pattern-matching clauses now also has sequential semantics, and is thus equivalent to the now deprecated, though still allowed, elseof
.
elseif
and elsecase
may still be freely intermixed within if
and case
conditionals.
To accomodate modular application development, a module system has been designed. The language itself supports the definition of functors, from which modules can be obtained via linking.
The construct raise
E1 with
E2 end
has been removed. This was an experimental feature that has been found to be rarely used.
New Keywords
Due to syntax changes, Oz 3 has the following keywords, which thus cannot be used as unquoted atoms any more:
|
|
|
|
|
|
|
|
Removed Keywords
The following keywords have been returned atom status and do not count as keywords any more:
|
The core expansion of Oz 3 as defined in ``The Oz 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.
This was necessary because the old design compromised language security.
<< Prev | - Up - | Next >> |