Modula-2

Modula-2
Tilblivelse1978; 46 år siden (1978)
ParadigmeMulti-paradigme: Imperativ programmering, strukturert programmering, modulær programmering, samtidig programmering
Designet og utviklet avNiklaus Wirth
Typetildeling statisk, sterk, forsiktighet
Påvirket av
Mesa, Pascal, Modula

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.[L 1] 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.[L 2]

Nøkkelkonseptene i Modula-2 var:[W 1]

  • 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ø.[L 3][L 4] Modula-2 ble første gang brukt på en PDP-11 minidatamaskin i Zürich; i 1980 ble språket portert til arbeidsstasjonen Lilith.[W 1] 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

[rediger | rediger kilde]

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.[L 5]

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.[L 6]

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

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

Dialekter

[rediger | rediger kilde]

Det finnes to hoveddialekter av Modula-2. Den første er PIM, oppkalt etter boken Programming in Modula-2 av Niklaus Wirth.[L 7] 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.[L 5][L 8] 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.[L 5][L 8]

Språkelementer

[rediger | rediger kilde]

Reserverte ord

[rediger | rediger kilde]

PIM [2,3,4] definerer 40 reserverte ord:[L 7]

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

[rediger | rediger kilde]

PIM [3,4] definerer 29 innebygde identifikatorer:[L 7]

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

[rediger | rediger kilde]

GNU Modula-2

[rediger | rediger kilde]

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

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.[W 3]

Andre kompilatorer

[rediger | rediger kilde]

Turbo Modula-2

[rediger | rediger kilde]

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.[W 6] Den ble i 1993 solgt til Clarion, senere SoftVelocity, som på denne tiden tilbød Modula-2 som en del av Clarion-produktene.[W 7]

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.[L 9]

IBM Modula-2

[rediger | rediger kilde]

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.[W 8]

IBM Modula-2 er også brukt i OS/400 / IBM i.[W 9]

En bakende for Motorola 68000 ble også brukt i innebygde systemer.[W 8]

Operativsystemer

[rediger | rediger kilde]

Modula-2 er brukt som systemprogramvare til å realisere operativsystemer. Den modulære strukturen til Modula-2 har vært benyttet direkte i tre operativsystemer.[W 1][L 10][W 9]

  • Modula-2 var det eneste programmeringsspråket og applikasjonsprogramvare for Medos-2, operativsystemet til den personlige arbeidsstasjonen Lilith.[W 1] 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.[L 4][L 11]
  • 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.[L 10]
  • IBM Modula-2 ble 26. august 1988 delvis brukt i OS/400 Vertical Licensed Internal Code (kjernen til OS/400).[W 9] 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. [L 12][W 10]

Referanser

[rediger | rediger kilde]
  1. ^ Wirth 2002
  2. ^ Wirth 1988, side 4
  3. ^ BYTE August 1984
  4. ^ a b Sand 1984
  5. ^ a b c ISO Juni 1996
  6. ^ Wirth 1984
  7. ^ a b c Wirth 1988
  8. ^ a b ISO 1998
  9. ^ Ciarcias Desember 1986
  10. ^ a b Kuznetsov 1989
  11. ^ Knudsen 1983
  12. ^ Soltis 1996
Nettsteder
  1. ^ a b c d «Summary of Projects by N. Wirth, 1962-1999». inf.ethz.ch. Eidgenössische Technische Hochschule Zürich. 6. mars 2020. 
  2. ^ «GNU Modula-2». Savannah. Free Software Foundation. 30. august 2018. 
  3. ^ «GCC 13 Release Series Changes, New Features, and Fixes». gnu.org. 13. april 2023. , oppdatert 30. oktober 2023
  4. ^ Given, David (9. oktober 2020). «ACK». GitHub. 
  5. ^ «ADW Modula-2». Modula-2.org. Besøkt 13. mars 2021. 
  6. ^ «TopSpeed Modula-2». edm2.com. The Electronic Developer Magaine for OS/2. 25. august 2022. 
  7. ^ «About Clarion». softvelocity.com. 7. desember 2002. Archived from the original on 7. desember 2002. Besøkt 3. desember 2023. 
  8. ^ a b «IBM Modula-2». edm2.com. The Electronic Developer Magaine for OS/2. 2. mars 2019. 
  9. ^ a b c TPM (21. februar 2011). «Reader Feedback on AS/400 to i Mystery Solved». itjungle.com. The Four Hundred, Power Systems & IBM i Insigth, Volume 20, Number 7. 
  10. ^ Leif Svalgaard (8. oktober 2003). «Re: [MI400] Re: MI emulator». midrange.com. 

Eksterne lenker

[rediger | rediger kilde]
  1. ^ «Aglet Modula-2». Aglet Modula-2. 15. februar 2012.