Modula-2

Modula-2 er et programmeringsspråk som ble designet og utviklet mellom 1977 og 1985 av Niklaus Wirth (f. 1934) ved Eidgenössische Technische Hochschule Zürich. Språket ble allment tilgjengelig i 1978. Modula-2 ble forstått som etterfølgeren til Pascal og Modula. Det var også påvirket av Mesa og de nye programmeringsmuligheter som Wirth oppdaget i datamaskinen Xerox Alto under hans sabbatsår i 1976 ved Xerox PARC.

Nøkkelkonseptene i Modula-2 var:

 Modulet som separat kompileringsenhet for separat kompilering
 Korutinen som basis for parallelle prosesser
 Datatyper og prosedyrer som tillater aksess til maskin-spesifikke data

I august og september 1984 omtalte det amerikanske tidsskriftet Byte språket og dets miljø. Modula-2 ble første gang brukt på en PDP-11 minidatamaskin i Zürich; i 1980 ble språket portert til arbeidsstasjonen Lilith. I tidens løp er det blitt portert til IBM stormaskiner, så vel som til innebygde systemer, personlige datamaskiner og moderne datamaskinarkitekturer som RISC-V.

Modula-2 ble etterfulgt av Modula-2+ (1984), Modula 3 (1988), Oberon (1987), Oberon-2 (1991) og Oberon-07 (2007).

 Beskrivelse 
Modula-2 er et prosedyrisk språk som er laget for generelle formål. Det er både et imperativt og strukturert programmeringsspråk. Det er egnet for både systemprogramming og applikasjonsprogrammering. Syntaksen er basert på programmeringsspråket Pascal, men enkelte elementer og tvetydigheter i syntaksen til Pascal er fjernet. Modula-2 støtter modulær programmering hvor modulet er konstruert for separat kompilering og data-abstraksjon; og korutiner sørger for fleroppgavekjøring og parallelle beregninger.

Språket gjør det mulig å bruke en-pass kompilatorer. En slik kompilator som ble laget av Gutknecht og Wirth i 1984 var omkring fire ganger raskere enn tidligere fler-pass kompilatorer.

Her er et eksempel på kildekoden til programmet «Hello world»:

MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
  WriteString("Hello World!")
END Hello.

 Dialekter 
Det finnes to hoveddialekter av Modula-2. Den første er PIM, oppkalt etter boken Programming in Modula-2 av Niklaus Wirth. Det kom fire utgaver av denne boken; Andre, tredje (korrigert) og fjerde utgave beskriver hver enkelt beskriver små varianter av språket. Den andre hoveddialekten er ISO, oppkalt etter standardiseringen til International Organization for Standardization. Her er forskjellene på dem.

 PIM2 (1983)
 Krevde en eksplisitt EXPORT klausul i definisjonsmoduler.
 Funksjonen SIZE behøver ikke å importeres fra modulet SYSTEM
 PIM3 (1985)
 Fjernet EXPORT klausulen fra definisjonsmoduler. Ettersom alt innenfor et definisjonsmodul definerer grensesnittet til dette modulet, ble EXPORT klausulen overflødig.
 Funksjonen SIZE er gjennomtrengende (synlig i ethvert område uten å importeres)
 PIM4 (1988)
 Spesifiserte oppførselen til operatoren MOD når operandene er negative.
 Krevde at alle ARRAY OF CHAR strenger avsluttes med ASCII NUL, selv om strengen passer nøyaktig inn i sin tabell.
 ISO (1996, 1998)
 ISO Modula-2 fjernet de fleste tvetydighetene i PIM Modula-2. Den tilføyde datatypene COMPLEX og LONGCOMPLEX, unntakshåndtering, modulterminering (FINALLY klausulen) og et komplett standard I/O-bibliotek. Der finnes mange små forskjeller og avklaringer.

 Språkelementer 
 Reserverte ord 
PIM [2,3,4] definerer 40 reserverte ord:

AND         ELSIF           LOOP       REPEAT
ARRAY       END             MOD        RETURN
BEGIN       EXIT            MODULE     SET
BY          EXPORT          NOT        THEN
CASE        FOR             OF         TO
CONST       FROM            OR         TYPE
DEFINITION  IF              POINTER    UNTIL
DIV         IMPLEMENTATION  PROCEDURE  VAR
DO          IMPORT          QUALIFIED  WHILE
ELSE        IN              RECORD     WITH

 Innebygde identifikatorer 
PIM [3,4] definerer 29 innebygde identifikatorer:

ABS         EXCL            LONGINT    REAL
BITSET      FALSE           LONGREAL   SIZE
BOOLEAN     FLOAT           MAX        TRUE
CAP         HALT            MIN        TRUNC
CARDINAL    HIGH            NIL        VAL
CHAR        INC             ODD
CHR         INCL            ORD
DEC         INTEGER         PROC

Kompilatorer
GNU Modula-2
GNU Modula-2 ble lansert (versjon 1.0) den 11. desember 2010. Den er en front-end til GNU Compiler Collection (GCC), er fri og åpen programvare og er lisensiert under GNU General Public License versjon 3 (GPLv3).

I GCC 13.1, som ble lansert 13. april 2023, ble GNU Modula-2 integrert som standard. GNU Modula-2 støtter alle dialektene av språket: PIM2, PIM3, PIM4, og ISO/IEC 10514-1 i et komplett sett med biblioteker. Attributten <* noreturn *> støttes med kompilatorflagget -Wreturn-type.

I GCC 15.1 kom følgende nyheter:
 Nøkkelordet FORWARD ble implementert
 SYSTEM-modulet eksporterer datatypen COFF_T som mapper til POSIX-typen off_t. Størrelsen på denne datatypen kan kontrolleres med flagget -fm2-file-offset-bits=
Tilgang til de innebygde GCC-elementene clz, clzll, ctz og ctzll er tilgjengelige fra modulet Builtins.

Andre kompilatorer
  Amsterdam Compiler Kit (ACK), ved Vrije Universiteit i Amsterdam, har en kompilator for Modula-2. Den brukes primært på MINIX, men brukes også på en rekke andre operativsystemer og arkitekturer; koden vedlikeholdes fortsatt og kan lastes ned som freeware
 ADW Modula-2 – for 32-biter Microsoft Windows, ISO-kompatibel, følger ISO/IEC 10514-1, ISO/IEC 10514-2 (objektorienterte utvidelser), ISO/IEC 10514-3 (generisk utvidelse); er freeware
 Aglet Modula-2 – for AmigaOS 4.0 og PowerPC; freeware

Turbo Modula-2
Turbo Modula-2 var en kompilator og et integrert utviklingsmiljø for MS-DOS. Den ble utviklet, men aldri lansert, av Borland. Jensen and Partners, som inkluderte Borland's medgrunnlegger Niels Jensen, kjøpte kompilatoren og endret navnet til TopSpeed Modula-2. Denne kjørte på OS/2 og ble lansert i 1988; siste versjon kom i 1992. Den ble i 1993 solgt til Clarion, senere SoftVelocity, som på denne tiden tilbød Modula-2 som en del av Clarion-produktene.

En Zilog Z80 versjon av Turbo Modula-2 for CP/M ble en kort tid markedsført av Echelon under lisens fra Borland. En beslektet utgave for 8-biter mikroprosessoren Hitachi HD64180 ble solgt av Micromint som et utviklingsverktøy for deres SB-180 datamaskin.

IBM Modula-2
IBM utviklet i 1980-årene en Modula-2 kompilator for internt bruk som kjørte på både OS/2 og AIX, og med førsteklasses støtte i IBM's E2-editor. Den var en av fire kompilatorer som ble støttet av denne editoren; de tre andre var IBM C, IBM Pascal og IBM REXX.

IBM Modula-2 er også brukt i OS/400 / IBM i. 

En bakende for Motorola 68000 ble også brukt i innebygde systemer.

 Operativsystemer 
Modula-2 er brukt som systemprogramvare til å realisere operativsystemer. Den modulære strukturen til Modula-2 har vært benyttet direkte i tre operativsystemer.

 Modula-2 var det eneste programmeringsspråket og applikasjonsprogramvare for Medos-2, operativsystemet til den personlige arbeidsstasjonen Lilith. De første ti Lilith-maskinene ble innstallert i 1980. Lilith var bygd opp rundt mikrobrikken AMD 2901 fra Advanced Micro Devices som kjørte i 7 MHz, og var implementert som en stakkmaskin.
 Operativsystemet Excelsior, for arbeidsstasjonen Kronos, ble bygd opp av moduler fra Modula-2. Kronos ble lansert i 1988, og var bygd omkring en 32-biter proprietær datamaskinarkitektur. Operativsystemet ble utviklet av Kronos Research Group (KRG) i Novosibirsk, som var tilknyttet Sovjetunionens vitenskapsakademi.
 IBM Modula-2 ble 26. august 1988 delvis brukt i OS/400 Vertical Licensed Internal Code (kjernen til OS/400). Denne koden ble for det meste erstattet med C++ da OS/400 ble portert til mikroprosessorfamilien IBM RS64 fra 1992 til 1995.  Operativsystemet ble omdøpt til i5/OS den 26. august 2004 (fordi den kjørte på POWER5) og til IBM i den 2. april 2008; det hadde da fortsatt litt Modula-2 kode i kjernen. 

Referanser
Wirth 1988
Wirth 1988, side 4
BYTE August 1984
Ciarcias Desember 1986
ISO Juni 1996
ISO 1998
Knudsen 1983
Kuznetsov 1989
Sand 1984
Soltis 1996
Wirth 1984
Wirth 2002
 Nettsteder
, oppdatert 30. oktober 2023

Kilder











  ‎

 Eksterne lenker 
  Modula-2 Internet directory

Kategori:Programmeringsspråk
Kategori:Programvare fra 1978
Kategori:1978 i Sveits
Kategori:ETH Zürich