Az első, és legnépszerűbb strukturált programnyelvek között szerepelt a Pascal, amelyet Niklaus Wirth professzor (ETH – Zürich) dolgozott ki, és valósított meg. Könnyen elsajátítható programnyelvnek bizonyult, ezen kívül előnyös volt algoritmus és adatszervezés szempontjából. Sok jó tulajdonsága mellett csak strukturáltságot tartalmazott, ami idővel kevésnek bizonyult.
Wirth 1975-ben kifejlesztette a Modula nevű moduláris programnyelvet. 1977-ben kezdett dolgozni a Modula-2 nevű programnyelven. Az első megvalósított verzió futtatása egy PDP-11-es számítógépen történt 1979-ben.
Wirth a Pascal előnyeit a Modula-2 -be szintén bevezette, ezen kívül kibővítette a moduláris és alacsony szintű programozás lehetőségeivel.
A Modula-2 egy strukturált, moduláris programozási nyelv – magas szintű programozási nyelv.
Szintaktika
Fenntartott szavak
A Modula-2 fenntartott szavainak listája.
Ezeket nem definiálhatjuk újra, és nem használhatjuk fel az általunk létrehozott, programban szereplő egységek elnevezéseire.
AND ARRAY BEGIN BY CASE
CONST DEFINITION DIV DO
ELSE ELSIF END EXIT EXPORT
FOR FORWARD FROM IF IMPLEMENTATION
IMPORT IN LOOP MOD MODULE NOT
OF OR POINTER PROCEDURE QUALIFIED
RECORD REPEAT RETURN SET THEN TO
TYPE UNTIL VAR WHILE WITH
Kulcsszavak
A Modula-2 standard, könyvtári függvényei.
Újradefiniálhatók, felhasználhatók az általunk létrehozott, programban szereplő egységek elnevezéseire. Ez azonban nem ajánlott.
ABS ADR ADDRESS BITSET
BOOLEAN BYTE CAP CARDINAL
CHAR CHR DEC EXCL FALSE FLOAT
HALT HIGH INC INCL INTEGER
LONGCARD LONGINT LONGREAL MAX MIN
NIL ODD ORD PROC REAL SIZE TRUE
TRUNC VAL WORD
A Modula-2 program struktúrája
MODULEmodulNeve;FROMmodulNeveIMPORTobjNeve;(* Importált objektumok listája - használhatjuk FROM és modulNeve nélkül is,ilyenkor a modulNeve az IMPORT után következik. A programban szereplő modulNeve modulból származó objektumot pedig így használjuk: modulNeve.objNeve; *)(* Deklarációk *)TYPEtipusNeve=tipusDef;(* típusok *)CONSTkonstNeve=konstKifejez;(* konstansok *)VARvaltozoNeve:tipusNeve;(* változók *)BEGIN(* A program törzse itt kezdődik *)utasitasok;ENDmodulNeve.