# 3 Language and design issues

## 3.1 Why is the syntax so weird?

The most unusual thing about the syntax is the choice of curly braces for procedure application. Once you get used to that you can be rather comfortably puzzled by other things.

## 3.2 Does Oz have garbage collection?

Yes, Oz has automatic garbage collection (2 space copying GC). For open distributed computing applications, it also implements automatic distributed GC, but, at present, not all distributed cyclic datastructures can be collected successfully.

## 3.3 What is constraint programming?

## 3.4 Can I also have state?

## 3.5 What is multi-paradigm programming?

Multi-paradigm programming is the freedom to choose and mix programming paradigms according to your tastes and needs. Unlike most other programming languages which lock you into a single programming paradigm, Oz unifies into one simple and coherent framework the functional, object-oriented, and logic flavors of programming. This is possible due to the very general and powerful underlying paradigm of concurrent constraint programming.

## 3.6 Does Oz support object-oriented programming?

Yes, Oz supports the class/instance model for object-oriented programming. A class is created e. g. as follows:

> `declare
> class Foo
> attr val
> meth init(V) val<-V end
> meth show {Show foo(val: @val)} end
> end`

An instance is created using procedure `New` applied to class `Foo` and initial message `init(12)` for example:

> `declare O = {New Foo init(12)}`

Object `O` can be applied to message `show` as follows:

> `{O show}`

which, in this case causes `foo(val: 12)` to be printed.

A point of terminology: we speak of object application rather than of message sending.

## 3.7 Does Oz support functional programming?

## 3.8 Does Oz support logic programming?

## 3.9 Does Oz support modular programming?

## 3.10 Does Oz support concurrent programming?

## 3.11 Does Oz support distributed programming?

## 3.12 Can I do backtracking?

## 3.13 What is a computation space?

## 3.14 How do I program a search problem?

## 3.15 Why is `[]` not the empty list

## 3.16 What is the meaning of the `$` marker

## 3.17 What is the meaning of the `,` marker

## 3.18 What datatypes does Oz provide?

## 3.19 What is a basic constraint?

## 3.20 What is a non-basic constraint?

## 3.21 What is a propagator?