Top

Mozart System Limitations



Limitations

In general, Mozart has very few system limitations. Memory allocation is dynamic. The number of record fields, the size of arrays and dictionarys, the number of characters in an atom, the number of threads, integer precision, etc., are all limited only by available memory. Memory is requested from the operating system according to need. The allocation strategy is user-customizable (see Chapter 16 of ``System Modules''). If memory use decreases, then all unused memory is eventually returned to the operating system.

However, a few limits remain.

Garbage Collection

All memory areas of the virtual machine are garbage collected except for the atom table and the table of record arities. In particular, the area used to store program instructions is garbage collected.

We recommend to avoid dynamically creating atoms (with String.toAtom or VirtualString.toAtom) or records with new arities (for example, with Record.filter). Tuples do not have entries in the arity table, so they are not subject to this restriction.

Procedures

Procedures can have no more than 10000 arguments.

Finite Domains and Finite Sets

The range of a finite domain variable is from 0 to 2^{27}-2 (i.e., 134217726).

The range of a finite set domain variable is from \{\} to \{0, ..., 2^{27}-2\}.

Integers and Floats

Integers of 28-bit or less precision are stored in registers. Floating-point numbers and integers needing more than 28-bit precision are stored on the heap.

This means that calculations are significantly faster and memory-efficient when done with small integers rather than with floating-point numbers or big integers.

Graphics Interface

The graphics interface (see Chapter 21 of ``System Modules'') is much slower under Windows than under Unix. To be precise, interprocess communication between the Oz and tk processes is slow. This limitation will be fixed soon. The Oz and tk processes themselves have no speed problems.

Compiler

The compiler is part of the interactive run-time system. It may use large amounts of memory on large programs or programs that access large data structures in the run-time environment. This memory use is temporary. After the compiler completes, the memory is eventually returned to the operating system.

Distribution

See the distribution tutorial ``Distributed Programming in Mozart - A Tutorial Introduction'' for a list of limitations related to distribution and fault tolerance.


Version 1.0.1 (19990218)