author: Michel Dagenais
copyright: Michel Dagenais, GNU General Public License, 1998
date: 17 January 1998
keyword: Modula-3
keyword: library
keyword: wide audience

# The Modula-3 Standard Library

## Abstract

This library complements the Core library with a base set of data structures, algorithms, input/output, operating system access, and runtime support modules.

## Some Useful Modula-3 Interfaces

A subset of the interfaces implemented in the `m3core` and `libm3` libraries was carefully selected, reviewed and documented by the interface police in the technical report Some Useful Modula-3 Interfaces.

## Data Structures

- types contains interfaces for the primitive types, to be used as arguments for generic modules.
- sequence is a generic module for sequences, which subsume extensible vectors, stacks and queues.
- atom implements TEXT sharing for efficiently storing and comparing identifiers or other text strings.
- list is a generic linked list module.
- sx implements lists of lists, with parsing and formatting procedures, useful to represent symbolic expressions such as lisp like data or programs.
- table is a generic key/value mapping implemented as a hash table.
- sortedtable is a sorted generic key/value mapping implemented as a tree.
- bundleintf is used to access bundled resources (files needed at runtime such as bitmaps which were packaged with m3bundle).
- pqueue is a generic priority queue.

## Algorithms

- sort implements a generic sorting procedure.
- random number generator.

## Input/Output and Operating System Access

- rw contains input output operations on files and devices.
- fmtlex implements conversions between TEXT and the other primitive types (integer, float, boolean...).
- os interfaces to operating system services such as processes and files manipulations.
- params accesses command line parameters and environment variables.
- pickle offers automated binary storage and retrieval of graphs of objects and records in memory.

## Numerical Support

- arith interfaces to the logarithmic functions.
- sqrt implements square roots.
- statistics computes simple statistics such as mean and variance.

## Miscellaneous

- etimer may be used to measure the elapsed time within various sections of a program.
- geometry implements basic integer 2 dimensional geometry objects and transformations.
- formatter implements a pretty printing Writer.
- perftool is used by runtime performance monitoring tools such as shownew.
- property implements property lists. Generic Tables are more flexible and should be used instead.
- uid provides unique identifiers and unique timestamps.
- regex provides regular expression matching for TEXT.