Welcome to the Dictionary of Programming Languages, a compendium
of computer coding methods assembled to provide information and
aid your appreciation for computer science history.
Browse the dictionary by clicking on a section:
A
B
C
D
E
F
G
H
I
JK
L
M
N
O
P
QR
S
T
UV
WXYZ+
Get a full dump of the dictionary:
List of Names
Short Form
Full Form
-
Modula 3
- Language type:
- Description:
Modula-3 is a compiled procedural that
supports object-oriented and block-structured
programming. It is a descendant of Modula-2
and Pascal, and is intended for application
development, large-scale software
engineering, and computer science
education.
As a descendant of Pascal, Modula-3 is
strongly typed and can enforce type safety.
The language supports a conventional
set of data types: numbers, enumerations, strings,
records, sets, and arrays. Modula-3 supports the usual control flow
selection and looping constructs.
It provides
good support for modular programming, including
subroutines and modules with explicit
interfaces.
Unlike Pascal, Modula-3 has full support
for abstract data types and
simple OOP,
dynamic memory management with garbage
collection, generics, exception handling,
and concurrency. It is an
important part of Modula-3's claim to being
industrial-strength that it includes
robust error handling and multi-threading
as part of the language.
Modula-3 does not support some OOP features
that it's designers believed would overcomplicate
the language or detract from productive
software development: multiple
inheritance, delegation,
operator overloading, and
reflection.
Module-3's object-oriented programming model
is very simple: an object is simply a
record type augmented with a method suite.
Superclass method overloading is supported.
Pascal compilers attempt to enforce type
safety in every line of a program. A
Modula-3 compiler allows some modules to
be designated as explicitly unsafe, freeing
the programmer to use tricky or
machine-dependent techniques to gain
efficiency or access to hardware.
There is a fairly wide variety of support
libraries available for Modula-3, including
ones for network communication,
object persistence, database access, 3D rendering,
and graphical user interfaces.
Early implementations of Modula-3 produced
C code for native compilation, but modern
systems produce native machine code directly.
Both commercial and free compilers for
Modula-3 are available, for all major
platforms include Unix, Linux, and WindowsNT.
Digital Equipment Corp, one of the
originators of the language, makes a free
compiler available in source form.
At least one commercial implementation of Modula-3
is available as a comprehensive development
environment. Information about Modula-3 is
also fairly easy to find on the WWW.
- Origin:
Luca Cardelli et al, Olivetti and DEC, 1988.
- See Also:
- Remarks:
Developers that have used Modula-3 have
had praise for its elegance and completeness.
It has a large feature set, but not
so large or complex
as to be overwhelming (e.g. Ada).
Facilities that you need for serious
system development are built-in, like
concurrency and garbage collection.
It is something of a mystery that
Modula-3 is not more widely employed (perhaps
its family relationship with Pascal, regarded
by many as too self-limiting for serious
development, scares developers away).
The direct linguistic predecessor of
Modula-3 was Modula-2+, an enhancement of
Modula-2 incorporating ideas from Mesa.
Niklaus Wirth was consulted on the design
of Modula-3, but was not the primary
designer as he was for Modula-2.
At this time, Modula-3 is not the subject
of any formal standardization activities.
- Links:
-
-
-
- Date:
- Sample code:
An example of using the Modula-3 VBTKit GUI
system.
MODULE Push EXPORTS Main;
IMPORT Trestle, VBT, TextVBT, RigidVBT, ButtonVBT, BorderedVBT, HVSplit,
Axis;
action of button when pushed
PROCEDURE QuitAction (self: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
Trestle.Delete(main); (* NB. "main" is visible here. *)
END QuitAction;
CONST
horz = 30.0; (* horizontal size "hello" window *)
vert = 10.0; (* vertical size of "hello" window *)
VAR
hello := RigidVBT.FromHV(TextVBT.New("Hello World"), horz, vert);
quit := ButtonVBT.New(ch := TextVBT.New("Quit"), action := QuitAction);
main := HVSplit.Cons(Axis.T.Ver, hello, BorderedVBT.New(quit));
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main);
END Push.
Descriptions in this dictionary are ©1997-99 Neal Ziring. Some
examples copyright of their respective authors. Some
technologies and languages are trademarked. Permission to
copy descriptions is granted as long as authorship credit is preserved.
Comments on this dictionary, corrections and suggestions, are all welcome.
Please use email, the address is ziring@home.com
[Ziring MicroWeb Home]
[Dictionary Start]
[Sign Guestbook]
Dictionary and script maintained by Neal Ziring, last major modifications 3/18/98. Most recent
additions to dictionary and master list, 1/00.