Modula-2
Modula-2 | |||
---|---|---|---|
Tilblivelse | 1978 | ||
Paradigme | Multi-paradigme: Imperativ programmering, strukturert programmering, modulær programmering, samtidig programmering | ||
Designet og utviklet av | Niklaus 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 moduletSYSTEM
- Krevde en eksplisitt
- PIM3 (1985)
- Fjernet
EXPORT
klausulen fra definisjonsmoduler. Ettersom alt innenfor et definisjonsmodul definerer grensesnittet til dette modulet, bleEXPORT
klausulen overflødig. - Funksjonen
SIZE
er gjennomtrengende (synlig i ethvert område uten å importeres)
- Fjernet
- PIM4 (1988)
- ISO (1996, 1998)
- ISO Modula-2 fjernet de fleste tvetydighetene i PIM Modula-2. Den tilføyde datatypene
COMPLEX
ogLONGCOMPLEX
, unntakshåndtering, modulterminering (FINALLY
klausulen) og et komplett standard I/O-bibliotek. Der finnes mange små forskjeller og avklaringer.[L 5][L 8]
- ISO Modula-2 fjernet de fleste tvetydighetene i PIM Modula-2. Den tilføyde datatypene
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]- 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[W 4]
- 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[W 5]
- Aglet Modula-2 – for AmigaOS 4.0 og PowerPC; freeware[1]
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]- Nettsteder
- ^ a b c d «Summary of Projects by N. Wirth, 1962-1999». inf.ethz.ch. Eidgenössische Technische Hochschule Zürich. 6. mars 2020.
- ^ «GNU Modula-2». Savannah. Free Software Foundation. 30. august 2018.
- ^ «GCC 13 Release Series Changes, New Features, and Fixes». gnu.org. 13. april 2023., oppdatert 30. oktober 2023
- ^ Given, David (9. oktober 2020). «ACK». GitHub.
- ^ «ADW Modula-2». Modula-2.org. Besøkt 13. mars 2021.
- ^ «TopSpeed Modula-2». edm2.com. The Electronic Developer Magaine for OS/2. 25. august 2022.
- ^ «About Clarion». softvelocity.com. 7. desember 2002. Archived from the original on 7. desember 2002. Besøkt 3. desember 2023.
- ^ a b «IBM Modula-2». edm2.com. The Electronic Developer Magaine for OS/2. 2. mars 2019.
- ^ 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.
- ^ Leif Svalgaard (8. oktober 2003). «Re: [MI400] Re: MI emulator». midrange.com.
Kilder
[rediger | rediger kilde]- Byte Magazine (August 1984). «Modula-2». BYTE – The Small Systems Journal, 1984 Volume 9 (8). Byte Magazine. s. 143-232.
- Ciarcia, Steve (Desember 1986). Ciarcias Circuit Cellar. Build the GT180 Color Graphics Board. Part 2: Hardware. Byte: The Small Systems Journal - Graphics Algorithms, Volume 11 (13). s. 98.
- International International Organization for Standardization (1. juni 1996). ISO/IEC 10514-1:1996 Information technology. Programming languages. Part 1: Modula-2, Base Language. International International Organization for Standardization, ISO/IEC JTC 1/SC 22 ICS : 35.060.
- International International Organization for Standardization (19. desember 1998). ISO/IEC 10514-2:1998 Information technology. Programming languages. Information technology — Programming languages — Part 2: Generics Modula-2. International International Organization for Standardization, ISO/IEC JTC 1/SC 22.
- International International Organization for Standardization (19. desember 1998). ISO/IEC 10514-3:1998 Information technology. Programming languages. Information technology — Programming languages — Part 3: Object Oriented Modula-2. International International Organization for Standardization, ISO/IEC JTC 1/SC 22.
- Knudsen, Svend Erik (23. desember 1983). Medos-2: A Modula-2 Oriented Operating System for the Personal Computer Lilith (PhD, Dissertation Technische Wissenschaft. ETH Zürich, Nr. 7346). Eidgenössische Technische Hochschule Zürich. doi:10.3929/ethz-a-000300091.
- Kuznetsov, D.N.; Nedorya, A.E.; Tarasov, E.V.; Filippov, V.E. (1989). «Kronos: a family of processors for high-level languages (Кронос: семейство процессоров для языков высокого уровня)». Kronos: History of a Project (på russisk). xTech Ltd.
- Sand, Paul A. (September 1984). The Lilith Personal Computer. Byte Magazine, Volume 9 (10) Computer Graphics. s. 300–311.
- Soltis, Frank G. (1. januar 1996). Inside the AS/400 (2. utg.). 29th Street Press. ISBN 1882419669. ISBN 978-1882419661.
- Wirth, Niklaus (1. mai 1984). A Single-pass Modula-2 Compiler for Lilith (PDF).
- Wirth, Niklaus (1988). Programming in Modula-2 (4. utg.). Berlin, Heidelberg: Springer Verlag. ISBN 978-3-642-83565-0. doi:10.1007/978-3-642-83565-0.
- Wirth, Niklaus (27. juni 2002). «Pascal and its Successors». I Manfred Broy og Ernst Denert. Software Pioneers: Contributions to Software Engineering. Berlin, Heidelberg: Springer Verlag. ISBN 3-540-43081-4. ISBN 978-3-540-43081-0.
Eksterne lenker
[rediger | rediger kilde]- ^ «Aglet Modula-2». Aglet Modula-2. 15. februar 2012.