Modula-2

Modula-2 är ett programspråk konstruerat av professorn i datalogi Niklaus Wirth vid ETH runt 1978, som uppföljare till Modula, ett annat av hans programspråk (som dock aldrig implementerades). Modula-2 är löst baserat på programspråket Mesa från Xerox, som Wirth såg under sitt år på Xerox PARC 1976.

Beskrivning 

Modula-2 är ett generellt proceduriellt språk, tillräckligt flexibelt för systemjobb, men även till bredare användning. Det designades särskilt för att hantera kompilering i separata moduler och dataabstraktion på ett enkelt sätt. Mycket av syntaxen är baserad på Wirths tidigare språk Pascal. Modula-2 designades för att likna Pascal, men med en del funktioner borttagna och framförallt modulkonceptet och direkt support för parallella processer tillagt.

En modul i Modula-2 kan användas för att kapsla in procedurer och datastrukturer som hör ihop, och begränsa dess gränssnitt till det övriga programmet. Ett program i Modula-2 består av moduler, som var och består av två delar: en definitions- eller interfacedel som består av de delar av modulen som syns för andra moduler, och en implementationsdel, som innehåller den programkod som modulen behöver på insidan.

Språket har strikt hantering av scope. Om ModuleA till exempel exporterar identifierarna A, B och C och ModuleB innehåller deklarationen:

    IMPORT ModuleA;

så måste referenser till de identifierarna skrivas explicit som "ModuleA.A", "ModuleA.B" och "ModuleA.C" i ModuleB. Med följande deklaration kan dock namnen A, B och C importeras direkt in i ModuleBs namnrymd.

    FROM ModuleA IMPORT
       A, B, C;

Det här kan verka onödigt restriktivt och "pratigt", men har den trevliga effekten att man kan se var alla identifierare som används i en fil är deklarerade utan att behöva läsa någon annan källkodsfil. Antingen står det uttryckligen vilken modul en identifierare kommer från, eller så är den antingen deklarerad eller explicit importerad i den aktuella modulen. Den här egenskapen är särskilt användbar när man ska sätta sig in i ett stort program som består av många moduler.

Språket tillhandahåller (enkel) parallellism på en processor (monitorer, korutiner och explicit kontrollöverföring) och för hårdvaruaccess (absoluta adresser, bithantering och avbrott).

Besläktade språk 
Även om Modula-2 är den mest kända och använda varianten så finns det flera besläktade språk: Originalet Modula (tänkt för systemprogrammering), Modula-2+, Modula-2*, Modula-3 (Av DEC och Olivetti, tillhandahåller skräpsamling), Oberon (ett senare språk av Wirth), Oberon-2 och flera andra. Dessa språk ska inte betraktas som "ersättare" till Modula-2, de är olika språk med olika målsättningar, olika styrkor och olika svagheter.

Tillsammans med C och Ada betraktas Modula-2 ofta som ett av de tre viktigaste "moderna" programspråken (från strukturerad programmerings tid). Av de tre är Modula-2 det minsta, enklaste att läsa och lära sig, och det renast designade, både syntaktiskt och konceptuellt. Modula-2 utvecklades som systemprogramspråk för arbetsstationen Lilith, och var basen för Oberon-projektet hos ETHZ. De flesta nuvarande programspråken har tillvaratagit flera egenskaper från Modula-2. En vidareutveckling av programspråket är Modula3 som bland annat innehåller objektorientering och automatisk skräpsamlare.

Aktuella kompilatorer 
 Canterbury Modula-2 genererar Javakällkod
 Gardens Point Modula-2
 GNU Modula-2 compiler (under utveckling)
 Mod51 för intels microkontrollerfamilj 80x51 (kommersiell)
 ModulaWare för OpenVMS (kommersiell)
 Objective Modula-2 compiler (under utveckling)
 p1 Modula-2 för Macintosh (kommersiell)
 The Karlsruhe Modula-2 Compiler MOCKA
 The Ulm Modula-2 System
 Excelsior Modula-2 (XDS)

Tidigare kompilatorer 
 M2Amiga för Amiga
 Logitech hade en serie Modula-2-kompilatorer
 Stony Brook Modula-2
 TopSpeed (även kända som Clarion, JPI, Jensen and Partners) hade flera bra 16-bitars Modula-2-​kompilatorer, med bra IDEer. Det här var Modula-2s "Turbo Pascal"; inte helt standard men populär inom både företag och utbildning.

Externa länkar 
 http://www.modula2.org/

Funktionella programspråk