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