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 redigera

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[förtydliga], korutiner och explicit kontrollöverföring) och för hårdvaruaccess (absoluta adresser, bithantering och avbrott).

Besläktade språk redigera

Ä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 redigera

Tidigare kompilatorer redigera

Externa länkar redigera