Redigerer
Modula-2
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
{{infoboks programmeringsspråk |komtil = {{Startdato og alder|1978}} }} '''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 (programmeringsspråk)|Pascal]] og [[Modula]].<ref name="Wirth2002" group="L"/> Det var også påvirket av [[Mesa (programmeringsspråk)|Mesa]] og de nye programmeringsmuligheter som Wirth oppdaget i datamaskinen [[Xerox Alto]] under hans [[sabbatsår]] i 1976 ved [[PARC|Xerox PARC]].<ref name="PIM_4" group="L"/> Nøkkelkonseptene i Modula-2 var:<ref name="Wirth" group="W"/> * [[Modulær programmering|Modulet]] som separat kompileringsenhet for separat kompilering * [[Korutine]]n som basis for parallelle prosesser * [[Datatype]]r og [[Prosedyrisk programmering|prosedyrer]] som tillater aksess til maskin-spesifikke data I august og september 1984 omtalte det [[USA|amerikanske]] [[tidsskrift]]et ''[[Byte (tidsskrift)|Byte]]'' språket og dets miljø.<ref name="BYTE" group="L"/><ref name="Sand1984" group="L"/> Modula-2 ble første gang brukt på en [[PDP-11]] [[minidatamaskin]] i [[Zürich]]; i 1980 ble språket portert til [[arbeidsstasjon]]en [[Lilith (datamaskin)|Lilith]].<ref name="Wirth" group="W"/> I tidens løp er det blitt portert til [[IBM stormaskiner]], så vel som til [[innebygd system|innebygde systemer]], [[personlig datamaskin|personlige datamaskiner]] og moderne [[datamaskinarkitektur]]er som [[RISC-V]]. Modula-2 ble etterfulgt av [[Modula-2+]] (1984), [[Modula 3]] (1988), [[Oberon (programmeringsspråk)|Oberon]] (1987), [[Oberon-2]] (1991) og [[Oberon-07]] (2007). == Beskrivelse == Modula-2 er et [[Prosedyrisk programmering|prosedyrisk]] språk som er laget for generelle formål. Det er både et [[Imperativ programmering|imperativt]] og [[Strukturert programmering|strukturert]] programmeringsspråk. Det er egnet for både [[systemprogramvare|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]].<ref name="ISO-1" group="L"/> Språket gjør det mulig å bruke [[en-pass kompilator]]er. En slik [[kompilator]] som ble laget av Gutknecht og Wirth i 1984 var omkring fire ganger raskere enn tidligere [[fler-pass kompilator]]er.<ref name="Wirth1984" group="L"/> Her er et eksempel på kildekoden til programmet «Hello world»: <syntaxhighlight lang="modula2"> MODULE Hello; FROM STextIO IMPORT WriteString; BEGIN WriteString("Hello World!") END Hello. </syntaxhighlight> == Dialekter == Det finnes to hoveddialekter av Modula-2. Den første er ''PIM'', oppkalt etter boken ''Programming in Modula-2'' av Niklaus Wirth.<ref name="PIM" group="L"/> 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]].<ref name="ISO-1" group="L"/><ref name="ISO" group="L"/> Her er forskjellene på dem. * ''PIM2'' (1983) ** Krevde en eksplisitt <code>EXPORT</code> klausul i definisjonsmoduler. ** Funksjonen <code>SIZE</code> behøver ikke å importeres fra modulet <code>SYSTEM</code> * ''PIM3'' (1985) ** Fjernet <code>EXPORT</code> klausulen fra definisjonsmoduler. Ettersom alt innenfor et definisjonsmodul definerer grensesnittet til dette modulet, ble <code>EXPORT</code> klausulen overflødig. ** Funksjonen <code>SIZE</code> er gjennomtrengende (synlig i ethvert område uten å importeres) * ''PIM4'' (1988) ** Spesifiserte oppførselen til operatoren <code>MOD</code> når operandene er negative. ** Krevde at alle <code>ARRAY OF CHAR</code> [[Streng (informatikk)|strenger]] avsluttes med ASCII NUL, selv om strengen passer nøyaktig inn i sin [[Tabell (datastruktur)|tabell]]. * ''ISO'' (1996, 1998) ** ISO Modula-2 fjernet de fleste tvetydighetene i PIM Modula-2. Den tilføyde [[datatype]]ne <code>COMPLEX</code> og <code>LONGCOMPLEX</code>, [[unntakshåndtering]], modulterminering (<code>FINALLY</code> klausulen) og et komplett standard [[I/O]]-[[Bibliotek (programvare)|bibliotek]]. Der finnes mange små forskjeller og avklaringer.<ref name="ISO-1" group="L"/><ref name="ISO" group="L"/> == Språkelementer == === Reserverte ord === PIM [2,3,4] definerer 40 [[Reservert ord|reserverte ord]]:<ref name="PIM" group="L"/> <pre> 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 </pre> === Innebygde identifikatorer === PIM [3,4] definerer 29 innebygde [[identifikator]]er:<ref name="PIM" group="L"/> <pre> 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 </pre> ==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 programvare]] og er lisensiert under [[GNU General Public License]] versjon 3 (GPLv3).<ref name="Savannah" group="W"/> 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 [[Bibliotek (programvare)|biblioteker]]. Attributten <* noreturn *> støttes med [[Kommandolinje|kompilatorflagget]] -Wreturn-type.<ref name="gnu c" group="W"/> ===Andre kompilatorer=== * [[Amsterdam Compiler Kit]] (ACK), ved [[Vrije Universiteit Amsterdam|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]]<ref name="ACK" group="W"/> * 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<ref name="ADW" group="W"/> * Aglet Modula-2 – for [[AmigaOS]] 4.0 og [[PowerPC]]; freeware<ref>{{cite web |url=https://aglet.web.runbox.net/ |title=Aglet Modula-2 |author= |date=15. februar 2012 |website=Aglet Modula-2 }}</ref> ====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.<ref name="edm2-topspeed" group="W"/> Den ble i 1993 solgt til ''Clarion'', senere ''SoftVelocity'', som på denne tiden tilbød Modula-2 som en del av [[Clarion (programmeringsspråk)|Clarion]]-produktene.<ref name="clarion" group="W"/> 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]] [[mikroprosessor]]en [[Hitachi HD64180]] ble solgt av ''Micromint'' som et utviklingsverktøy for deres SB-180 datamaskin.<ref name="Ciarcias1986" group="L"/> ====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 [[E (PC DOS)|E2-editor]]. Den var en av fire kompilatorer som ble støttet av denne editoren; de tre andre var [[C (programmeringsspråk)|IBM C]], IBM Pascal og [[REXX|IBM REXX]].<ref name="edm2" group="W"/> IBM Modula-2 er også brukt i [[IBM i|OS/400]] / [[IBM i]].<ref name="TPM" group="W"/> En bakende for [[Motorola 68000]] ble også brukt i [[innebygd system|innebygde systemer]].<ref name="edm2" group="W"/> == Operativsystemer == Modula-2 er brukt som [[systemprogramvare]] til å realisere [[operativsystem]]er. Den modulære strukturen til Modula-2 har vært benyttet direkte i tre operativsystemer.<ref name="Wirth" group="W"/><ref name="Kuznetsov1989" group="L"/><ref name="TPM" group="W"/> * Modula-2 var det eneste programmeringsspråket og [[applikasjonsprogramvare]] for Medos-2, operativsystemet til den personlige [[arbeidsstasjon]]en [[Lilith (datamaskin)|Lilith]].<ref name="Wirth" group="W"/> De første ti Lilith-maskinene ble innstallert i 1980. Lilith var bygd opp rundt mikrobrikken [[AMD Am2900|AMD 2901]] fra [[Advanced Micro Devices]] som kjørte i 7 MHz, og var implementert som en [[stakkmaskin]].<ref name="Sand1984" group="L"/><ref name="Knudsen1983" group="L"/> * Operativsystemet ''Excelsior'', for arbeidsstasjonen [[Kronos (datamaskin)|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]].<ref name="Kuznetsov1989" group="L"/> * IBM Modula-2 ble 26. august 1988 delvis brukt i OS/400 ''Vertical Licensed Internal Code'' (kjernen til OS/400).<ref name="TPM" group="W"/> 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. <ref name="Soltis1996" group="L"/><ref name="MI400" group="W"/> ==Referanser== <references group="L"> <ref name="PIM" group="L">[[#PIM|Wirth]] 1988</ref> <ref name="PIM_4" group="L">[[#PIM|Wirth]] 1988, side 4</ref> <ref name="BYTE" group="L">[[#BYTE|BYTE]] August 1984</ref> <ref name="Ciarcias1986" group="L">[[#Ciarcias1986|Ciarcias]] Desember 1986</ref> <ref name="ISO-1" group="L">[[#ISO-1|ISO]] Juni 1996</ref> <ref name="ISO" group="L">[[#ISO|ISO]] 1998</ref> <ref name="Knudsen1983" group="L">[[#Knudsen1983|Knudsen]] 1983</ref> <ref name="Kuznetsov1989" group="L">[[#Kuznetsov1989|Kuznetsov]] 1989</ref> <ref name="Sand1984" group="L">[[#Sand1984|Sand]] 1984</ref> <ref name="Soltis1996" group="L">[[#Soltis1996|Soltis]] 1996</ref> <ref name="Wirth1984" group="L">[[#Wirth1984|Wirth]] 1984</ref> <ref name="Wirth2002" group="L">[[#Wirth2002|Wirth]] 2002</ref> </references> ; Nettsteder <references group="W"> <ref name="Savannah">{{cite web |url=https://www.nongnu.org/gm2/ |title=GNU Modula-2 |date=30. august 2018 |website=Savannah |publisher= Free Software Foundation}}</ref> <ref name="Wirth">{{cite web |url=http://www.inf.ethz.ch/personal/wirth/projects.html |date=6. mars 2020 |title=Summary of Projects by N. Wirth, 1962-1999|website=inf.ethz.ch|publisher= Eidgenössische Technische Hochschule Zürich}}</ref> <ref name="MI400">{{cite web|url=https://archive.midrange.com/mi400/200310/msg00008.html|title=Re: [MI400] Re: MI emulator|author=Leif Svalgaard|date=2003-10-08|mailing-list=MI400|website=midrange.com}}</ref> <ref name="clarion">{{cite web |url=http://softvelocity.com/core/default.html |title=About Clarion |website=softvelocity.com |date=7. desember 2002 |access-date=2023-12-03 |archive-date=2002-12-07 |archive-url=https://web.archive.org/web/20021207222218/http://softvelocity.com/core/default.html |url-status=unfit }}</ref> <ref name="TPM">{{cite web |author=TPM|url=https://www.itjungle.com/2011/02/21/tfh022111-story06/ |title=Reader Feedback on AS/400 to i Mystery Solved |date=2011-02-21 |website=itjungle.com|publisher=The Four Hundred, Power Systems & IBM i Insigth, Volume 20, Number 7 }}</ref> <ref name="edm2">{{cite web |url=http://www.edm2.com/index.php/IBM_Modula-2 |title=IBM Modula-2 |date=2. mars 2019 |website=edm2.com|publisher=The Electronic Developer Magaine for OS/2}}</ref> <ref name="edm2-topspeed">{{cite web |url=http://www.edm2.com/index.php/TopSpeed_Modula-2 |title=TopSpeed Modula-2 |date=25. august 2022 |website=edm2.com|publisher=The Electronic Developer Magaine for OS/2}}</ref> <ref name="gnu c">{{cite web |url=https://gcc.gnu.org/gcc-13/changes.html |title=GCC 13 Release Series Changes, New Features, and Fixes|publisher=gnu.org| date=13. april 2023}}, oppdatert 30. oktober 2023</ref> <ref name="ACK">{{cite web |url=https://github.com/davidgiven/ack |title=ACK |last=Given |first=David |date=9. oktober 2020 |website=GitHub}}</ref> <ref name="ADW">{{cite web |url=https://www.modula2.org/ |title=ADW Modula-2 |author= |date= |website=Modula-2.org |access-date=13. mars 2021}}</ref> </references> ==Kilder== * {{cite web |author= Byte Magazine|url=https://archive.org/details/byte-magazine-1984-08/page/n147/mode/2up?q=modula |title=Modula-2 |date=August 1984 |website=BYTE – The Small Systems Journal, 1984 Volume 9 (8) |publisher=Byte Magazine|page=143-232|ref=BYTE}} * {{cite book | title=Ciarcias Circuit Cellar. Build the GT180 Color Graphics Board. Part 2: Hardware |date=Desember 1986|author= Ciarcia, Steve | magazine=Byte: The Small Systems Journal - Graphics Algorithms, Volume 11 (13) |page=98 |url=https://archive.org/details/byte-magazine-1986-12|ref=Ciarcias1986}} * {{cite book |author=[[Den internasjonale standardiseringsorganisasjonen|International International Organization for Standardization]] |date=1. juni 1996 |title=ISO/IEC 10514-1:1996 Information technology. Programming languages. Part 1: Modula-2, Base Language|type= |publisher=International International Organization for Standardization, ISO/IEC JTC 1/SC 22 ICS : 35.060|url=https://www.iso.org/standard/18583.html|ref=ISO-1}} * {{cite book |author=International International Organization for Standardization |date= 19. desember 1998 |title=ISO/IEC 10514-2:1998 Information technology. Programming languages. Information technology — Programming languages — Part 2: Generics Modula-2|type= |publisher=International International Organization for Standardization, ISO/IEC JTC 1/SC 22|url=https://www.iso.org/obp/ui/en/#iso:std:iso-iec:10514:-2:ed-1:v1:en|ref=ISO-2}} * {{cite book |author=International International Organization for Standardization |date= 19. desember 1998 |title=ISO/IEC 10514-3:1998 Information technology. Programming languages. Information technology — Programming languages — Part 3: Object Oriented Modula-2|type= |publisher=International International Organization for Standardization, ISO/IEC JTC 1/SC 22|url=https://www.iso.org/standard/20793.html|ref=ISO-3}} * {{cite book |last=Knudsen |first=Svend Erik |date=23. desember 1983 |title=Medos-2: A Modula-2 Oriented Operating System for the Personal Computer Lilith |type=PhD, Dissertation Technische Wissenschaft. ETH Zürich, Nr. 7346 |publisher=[[Eidgenössische Technische Hochschule Zürich]] |doi=10.3929/ethz-a-000300091|ref=Knudsen1983}} * {{Cite web |last1=Kuznetsov |first1=D.N. |last2=Nedorya |first2=A.E. |last3=Tarasov |first3=E.V. |last4=Filippov |first4=V.E. |date= |title=Kronos: a family of processors for high-level languages (Кронос: семейство процессоров для языков высокого уровня) |url=http://www.kronos.ru/literature/processors |website=Kronos: History of a Project |publisher=xTech Ltd|language=ru |date=1989|ref=Kuznetsov1989}} * {{Cite book |last=Sand |first=Paul A. |date=September 1984 |title=The Lilith Personal Computer |magazine=Byte Magazine, Volume 9 (10) Computer Graphics |pages=300–311 |url=https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n309/mode/2up|ref=Sand1984}} * {{cite book |last=Soltis |first=Frank G. |year=1. januar 1996 |title=Inside the AS/400 |edition=2. |url=https://books.google.com/books?id=5DoPAAAACAAJ |publisher=29th Street Press |isbn=1882419669|id=ISBN 978-1882419661|ref=Soltis1996}} * {{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |date=1. mai 1984 |title=A Single-pass Modula-2 Compiler for Lilith |url=https://www.astrobe.com/Modula2/M2SinglePass.pdf |website=CFB Software|ref=Wirth1984}} * {{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |title=Programming in Modula-2 |year=1988 |location=Berlin, Heidelberg |publisher=Springer Verlag|edition=4. |isbn=978-3-642-83565-0 |doi=10.1007/978-3-642-83565-0|s2cid=41899609|ref=PIM }} * {{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |editor=Manfred Broy og Ernst Denert |chapter=Pascal and its Successors |title= Software Pioneers: Contributions to Software Engineering |year=27. juni 2002 |location=Berlin, Heidelberg |publisher=Springer Verlag|edition= |isbn=3-540-43081-4|id=ISBN 978-3-540-43081-0|ref=Wirth2002 }} == Eksterne lenker == * {{Språkikon|en}} [https://modula2.org Modula-2 Internet directory] {{programmeringsspråk}} {{Autoritetsdata}} [[Kategori:Programmeringsspråk]] [[Kategori:Programvare fra 1978]] [[Kategori:1978 i Sveits]] [[Kategori:ETH Zürich]]
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Maler som brukes på denne siden:
Mal:Autoritetsdata
(
rediger
)
Mal:Bilde fra Wikidata
(
rediger
)
Mal:Cite book
(
rediger
)
Mal:Cite web
(
rediger
)
Mal:Hlist/styles.css
(
rediger
)
Mal:ISOtilNorskdato
(
rediger
)
Mal:Infoboks/styles.css
(
rediger
)
Mal:Infoboks bilde
(
rediger
)
Mal:Infoboks dobbeltrad
(
rediger
)
Mal:Infoboks overskrift
(
rediger
)
Mal:Infoboks programmeringsspråk
(
rediger
)
Mal:Infoboks rad
(
rediger
)
Mal:Infoboks slutt
(
rediger
)
Mal:Infoboks start
(
rediger
)
Mal:Kilde bok
(
rediger
)
Mal:Kilde www
(
rediger
)
Mal:Navboks
(
rediger
)
Mal:Programmeringsspråk
(
rediger
)
Mal:Språkikon
(
rediger
)
Mal:Startdato og alder
(
rediger
)
Mal:Time ago
(
rediger
)
Mal:Time ago/core
(
rediger
)
Modul:Arguments
(
rediger
)
Modul:Citation/CS1
(
rediger
)
Modul:Citation/CS1/COinS
(
rediger
)
Modul:Citation/CS1/Configuration
(
rediger
)
Modul:Citation/CS1/Date validation
(
rediger
)
Modul:Citation/CS1/Identifiers
(
rediger
)
Modul:Citation/CS1/Utilities
(
rediger
)
Modul:Citation/CS1/Whitelist
(
rediger
)
Modul:External links
(
rediger
)
Modul:External links/conf
(
rediger
)
Modul:External links/conf/Autoritetsdata
(
rediger
)
Modul:Genitiv
(
rediger
)
Modul:ISOtilNorskdato
(
rediger
)
Modul:Navbar
(
rediger
)
Modul:Navbar/configuration
(
rediger
)
Modul:Navboks
(
rediger
)
Modul:Navbox/configuration
(
rediger
)
Modul:Navbox/styles.css
(
rediger
)
Modul:String
(
rediger
)
Modul:Wikidata2
(
rediger
)
Modul:WikidataBilde
(
rediger
)
Denne siden er medlem av 1 skjult kategori:
Kategori:CS1-vedlikehold: Uheldig URL
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon