Modula-2
Modula-2 |
Sprog klasse |
imperativ , struktureret , modulær , data- og metodeskjul |
Dukkede op i |
1978 |
Forfatter |
Niklaus Wirth |
Type system |
statisk , stærk |
Større implementeringer |
ETH Zürich (skabt af Niklaus Wirth ), Gardens Point , p1 ,
Native XDS-x86 , gm2 (GNU Modula-2) |
Dialekter |
PIM2, PIM3, PIM4, ISO |
Blev påvirket |
Pascal , Mesa , ALGOL , Simula-67 |
påvirket |
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM |
Modula-2 (Modula-2) er et alment programmeringssprog , som er en udvikling af Pascal , udviklet af Niklaus Wirth i 1978 .
Mål og principper for sprogudvikling
Modula-2-sproget blev udviklet af Niklaus Wirth for at skabe systemsoftware til Lilith-computeren ., hvis udvikling begyndte i 1977 på Instituttet for Informatik i Zürich . Dette bestemmer mange af dets funktioner. Sproget blev oprindeligt designet som et industrielt systemprogrammeringsværktøj, der giver dig mulighed for at skrive pålidelige, forståelige programmer, der kan vedligeholdes. Samtidig skal sproget, selvom det forbliver et højt niveau sprog med stærk indtastning og understøttelse af alle pålidelige programmeringsværktøjer, gøre det muligt at få direkte adgang til hardware, oprette specifikke systemprogrammer , såsom interrupt-handlere og enhedsdrivere , og support programmering af interagerende processer, der kører parallelt .
Den umiddelbare forfader til Modula-2 var sproget Modula , skabt af Wirth i første halvdel af 1970'erne baseret på Pascal . Den vigtigste tilføjelse, afspejlet i sprogets navn, var evnen til at opdele programmet i moduler - separate kodefragmenter, der interagerer gennem eksplicit beskrevne grænseflader. Syntaksen blev også redesignet og parallelle programmeringsværktøjer blev tilføjet. Den eneste eksperimentelle implementering af Modula dukkede op i 1975 . Modulet kan betragtes som en indledende version, en slags "alfaversion" af Modula-2, syntaktisk er disse to sprog meget tætte. Derudover var Modula-2 ifølge Wirth påvirket af Mesa -sproget., udviklet hos Xerox PARC .
Generelle karakteristika
Modula-2-sproget er et strukturelt , modulært programmeringssprog med en syntaks baseret på Pascal-sproget, men mærkbart revideret og forbedret. Dens vigtigste karakteristiske træk er angivet nedenfor.
- Programmet er et sæt moduler - uafhængige kompileringsenheder, der kan kompileres separat. I dette tilfælde kan programmodulet (men behøver ikke) opdeles i to dele: definitionsmodulet og implementeringsmodulet. Definitionsmodulet er modulets eksterne grænseflade, det vil sige sættet af navne på konstanter, variabler, typer, procedureoverskrifter og funktioner, som det eksporterer, og som er tilgængelige for eksterne moduler. Implementeringsmodulet indeholder programkoden, især instansieringen af beskrivelserne af alt, der er anført i definitionsmodulet. For eksempel kan en posttype være erklæret i et definitionsmodul med kun dets navn, men i et implementeringsmodul med en komplet struktur. I dette tilfælde kan eksterne moduler skabe værdier af denne type, kalde procedurer og funktioner, der arbejder med det, udføre variable tildelinger, men har ikke direkte adgang til værdistrukturen, da denne struktur ikke er beskrevet i definitionsmodulet. Hvis en struktur er beskrevet for samme type i definitionsmodulet, bliver den tilgængelig. Ud over moduler på globalt niveau er det tilladt at oprette lokale moduler i Modul-2.
- Importen af definitioner beskrevet i andre moduler er fuldt kontrolleret. Du kan importere hele definitionsmoduler, men syntaksen giver dig mulighed for betydeligt at forfine importlisterne, såsom import af specifikke konstanter, variabler, procedurer og funktioner fra et modul, lige dem du har brug for.
- Alle I/O-faciliteter er udelukket fra sproget. I stedet anvendes biblioteksmoduler, som har til opgave at implementere I/O på specifikke systemer. Der er dog et sæt standardiserede I/O-biblioteker, der leverer de nødvendige funktioner til typiske tilfælde (input/output af grundlæggende datatyper ved hjælp af en tekstterminal, fil-I/O).
- Et minimum af begreber og primitiver for multi-threaded programmering er blevet indført i sproget, og der er også tilføjet et standardbibliotek , der understøtter parallelle programmer .
- Midler til direkte adgang til computerhardware er inkluderet, især implementeres en direkte mapping af datastrukturer til hukommelse, herunder med direkte adressetildeling.
Sproget er enkelt i strukturen - det har kun 40 reserverede ord (til sammenligning er der 63 i Ada ); den officielle "Sprograpport", der indeholder en omfattende beskrivelse af Modula-2, fylder 40 sider (den fulde beskrivelse af den forkortede version af PL / 1 tager omkring 200 sider).
Syntaksfunktioner
Den nemmeste måde at beskrive funktionerne i Modula-2 er ved at sammenligne det med Pascal-sproget. De vigtigste forskelle, bortset fra introduktionen af moduler og administrerede beskrivelseseksportmekanismer, er som følger.
- Sproget skelner mellem store og små bogstaver - store og små bogstaver i identifikatorer skelnes. Alle søgeord er skrevet med store bogstaver.
- Syntaksen er gjort mere regelmæssig og forenklet. Alle syntaktiske konstruktioner, bortset fra REPEAT-UNTIL-løkken, følger princippet om, at en konstruktion, der starter med et nøgleord, slutter med et nøgleord. Især har den betingede operatør den generelle form
IF THEN betingelse ELSIF sætninger THEN betingelse ELSIF sætninger THEN betingelse ... ELSE sætninger END sætninger
Dette eliminerede behovet for konstant brug af sammensatte udsagn BEGIN-ENDog IF-sætning "stiger" til multi-trins tilstandstest.
- Sløjfer WHILEog FORgiver også en krop fra et sæt udsagn og slutter med det reserverede ord END.
- Tilføjet ubetinget loop LOOP-END .
- Både procedurer og funktioner er deklareret med nøgleordet PROCEDURE.
- Tilføjet foruddefineret type BITSET- bit felt .
- Den ubetingede springoperator GOTO er blevet fjernet fra sproget .
- Der er tilføjet en proceduretype, som gør det muligt at tildele procedurer og funktioner til variabler. Senere blev denne funktion inkluderet i Pascal, hvor den ikke oprindeligt var tilgængelig.
Dialekter
Der er to hoveddialekter af Modula-2. Den første - PIM (efter titlen på Niklaus Wirths bog "Programmering i Modula-2", hvor en detaljeret beskrivelse af sproget og de vigtigste systembiblioteker blev givet), findes i tre hovedversioner, der optrådte sekventielt og adskiller sig minimalt fra hinanden . Den anden store dialekt er ISO , som er standardiseret af International Organization for Standardization. De vigtigste forskelle mellem dialekterne og den oprindelige beskrivelse af sproget er anført nedenfor.
- PIM2 (1983)
- Kræver obligatorisk brug af EKSPORT- direktivet i definitionsmodulet.
- SIZE- funktionen er en biblioteksfunktion og skal importeres fra SYSTEM- modulet .
- PIM3 (1985)
- Fjernede EKSPORT- direktivet fra definitionsmoduler. Ændringen var motiveret af, at hele indholdet af definitionsmodulet eksporteres, så det er overflødigt at bruge EKSPORT .
- SIZE - funktionen er foruddefineret (tilgængelig overalt i programmet uden import).
- PIM4 (1988)
- Afklaret adfærden af MOD- operationen for negative operander.
- Tilføjet et krav om, at alle strenge, der er erklæret som ARRAY OF CHAR , skal være nulterminerede (ASCII NUL), selvom strengen spænder over hele arrayet.
- ISO [1] (1996 og 1998)
- Tilføjede datatyper COMPLEX og LONGCOMPLEX .
- Tilføjede undtagelser.
- Tilføjet en konstruktion til FINALLY -modulets afslutningskode .
- Fuldt standardiseret I/O-bibliotek.
- Der er foretaget præciseringer, der har fjernet de fleste uklarheder i den oprindelige beskrivelse, mange mindre rettelser og præciseringer er foretaget.
Fordele og ulemper
Det kan bestemt siges, at Modula-2-sproget, mens det bevarer de positive egenskaber fra Pascal, har en række funktioner, der gør det til et meget mere kraftfuldt sprog og bedre egnet til både system- og applikationsprogrammering . De vigtigste fordele ved Modula-2 i forhold til moderne strukturelle programmeringssprog er som følger [2] :
- Enkelhed og kortfattet sprogdefinition. En komplet syntaksdefinition i RBNF- notation tager mindre end 3 sider, fulde syntaksdiagrammer - 12 sider, den officielle "besked om sproget" har en længde på 40 sider, hvilket næsten er et absolut minimum for et universelt sprog med sådanne muligheder. Til sammenligning er den officielle fulde definition af Ada-sproget 400 maskinskrevne sider.
- Enkel, logisk og ensartet syntaks, fri for overflødige konstruktioner og elementer, der fremkalder stavefejl. Modula-2 er det første direktivprogrammeringssprog, der gør op med GOTO-sætningen .
- En gennemtænkt mekanisme til at opdele et program i kompileringsenheder (moduler) med eksplicit beskrevne grænseflader og fuldt kontrolleret import, så du kan importere både hele moduler og individuelle elementer med mulighed for både kvalificeret (med modulnavnet) og ukvalificeret brug af navnene på importerede objekter.
- Udelukkelse fra sproget i input-output faciliteterne og de fleste standardprocedurer og funktioner og flytning af dem til biblioteker, designet som standardmoduler, hvilket forenkler sproget og compileren og giver implementeren fuldstændig frihed i, hvordan standardprocedurerne og -funktionerne er. implementeret.
- Inkorporering af programmeringsmekanismer på lavt niveau i sproget, herunder direkte manipulation af hukommelse og utypede data og pointere, som gør det muligt at skrive på et højt niveau sprog de fleste af de lavniveauprogrammer, der traditionelt blev skrevet i assembler, som f.eks. som chauffører og interrupt -handlere .
- Tilgængelighed af elementære midler til parallel programmering, valgt på en sådan måde, at de garanterer passende implementering både på fysisk multiprocessorplatforme og på tidsdelingsplatforme.
- Betydende for tidspunktet for oprettelsen af sproget var udseendet af den proceduremæssige type og følgelig variabler, som procedurer kan tildeles dynamisk.
Ulemperne ved sproget omfatter:
- Svaghed ved parallelle programmeringsmekanismer , især organiseringen af samspillet mellem parallelle processer. Implementeringen af disse værktøjer flyttes til systembiblioteker, og standardbiblioteket indeholder kun de enkleste paralleliseringskontrolværktøjer. Et parallelt program på Modul-2, der bruger samtidighedskontroller, der går ud over disse grænser, mister automatisk portabiliteten. [3]
- Fravær af mekanismer til styring af kortlægningen af abstrakte typer til hukommelsen. [3]
- Understøttelse af lokale moduler komplicerer compileren unødigt. Årsagerne til at bruge indlejrede moduler er at begrænse omfanget og fremhæve højprioriterede dele af programmet for at sikre synkronisering under parallel behandling, men de kan implementeres på andre, enklere og mere indlysende måder. [fire]
- Den eksplicitte opdeling i et implementeringsmodul og et definitionsmodul er en kontroversiel beslutning. Det komplicerer compilerens arbejde og tvinger programmøren til at synkronisere ændringer i forskellige filer. Det kan bemærkes, at i efterkommeren af Modula-2 - Oberon - blev en sådan adskillelse opgivet, i stedet for i et enkelt programmodul er de eksporterede elementer (der udgør modulgrænsefladen) simpelthen markeret på en speciel måde. [fire]
Man kan også bemærke fraværet i Modul-2 af en række funktioner, der er kendt og populære på tidspunktet for dets oprettelse, hvilket kan tilskrives både fordele og ulemper ved sproget, afhængigt af en bestemt kritikers synspunkt:
Brug
I USSR dukkede de første compilere til Modula-2 op i 1982-83 til SM-4 og Elektronika-60 computere. Oversætteren til BESM-6 blev udviklet ved Computing Center for Academy of Sciences of the USSR ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdushny) [5] . Samtidig blev programmeringsteknologier udviklet, og de første pakker med anvendte programmer baseret på Modul-2 blev skabt. Sådant arbejde blev især udført på Fakultetet for Kybernetik i MEPhI . VNTK "START" fra Computing Center for den sibiriske filial af USSR Academy of Sciences udviklede en række Kronos -processorer med hardwareunderstøttelse til Modula-2-programmeringssproget.
Generelt kan vi sige, at Modula-2 ikke modtog den distribution og anerkendelse, som den fortjente for sine kvaliteter. Sproget opnåede en vis popularitet i det akademiske miljø i Europa, var ret populært blandt programmører i USSR, men kunne ikke trykke på sin forgænger: nye implementeringer af Pascal-sproget, som inkluderede midlerne til at organisere moduler og senere objektprogrammering værktøjer , altid omgået Modula-2 i popularitet. Lilith-systemet, som Modula-2 blev skabt til, modtog ikke stor popularitet og kunne ikke hjælpe Modula-2 med at komme videre.
Den ekstremt brede distribution af billige og hurtige Pascal-kompilere fra Borland International spillede sin rolle . Interessant nok blev Turbo Modula-2-kompileren til CP/M OS ikke kun skabt af Borland, men blev endda sat til salg i Nordamerika og Vesteuropa. Imidlertid besluttede virksomhedens ledelse, primært Philippe Kahn , at opgive udviklingen af dette system for ikke at skabe en konkurrent til den ekstremt succesrige Turbo Pascal . Resultatet af denne beslutning var, at Borland Vice President Nils Jensen, en af virksomhedens grundlæggere, forlod Borland med sit udviklingsteam i 1987 og købte rettighederne til Turbo Modula-2. JPI - virksomheden (Jensen & Partners International), skabt af ham, udgav under TopSpeed-mærket en linje af compilere til x86-familieprocessorer: Assembler, Modula-2, Pascal, C/C++, Ada.
På nuværende tidspunkt bruges Modula-2-sproget til programmering af softwaren ombord på satellitter, der er opsendt som en del af GLONASS -projektet [7] . I slutningen af 2010 blev GNU Modula-2-kompileren officielt inkluderet i GCC -samlingen [8] .
Efterkommersprog
- Modula-3 er en videreudvikling af Modula-2, udviklet i fællesskab af DEC og Olivetti Firms med konsulentstøtte fra Wirth.
- Oberon er en videreudvikling af Modula-2, skabt af Wirth i 1988. Oberon bruger automatisk hukommelseshåndtering med skraldindsamling , det ændrede også en række funktioner, som forfatteren på baggrund af erfaringen med at bruge Modula-2 anså for mislykkede. Tilføjet økonomisk implementeret objektsubsystem. Oberon blev til gengæld stamfader til en hel gren af sprog: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
- Zonnon er et sprog skabt af Jürg Gutknecht baseret på Modula-2 og Active Oberon, med tilføjelse af en række nye elementer, både originale og lånt fra andre sprog.
- Alma-0 - Alma-0 er en udvidet (multi-paradigme) version af Modula-2 imperativsproget.
- Parallaxis [9] er et struktureret programmeringssprog til parallel dataprogrammering (SIMD-systemer) udviklet af Thomas Brownle i 1989. Sproget er baseret på seriel Modula-2, men udvidet med ikke-standalone parallelle konstruktioner.
Ud over direkte efterkommere arvede mange andre sprog elementer af syntaks og generel arkitektur fra Modula-2 i en eller anden grad. Indflydelsen af Modula-2 blev nævnt af skaberne af så lidt lignende sprog som for eksempel Lua og Go . Indflydelsen af Modula-2 (og i højere grad dets efterkommer, Oberon-sproget) kan spores i Java, C#, sene Pascal-dialekter som Object Pascal og Delphi.
Noter
- ↑ ISO/IEC 10514-1:1996
- ↑ Wirt N. Programmering i Modula-2 sproget. M.: Mir, 1987;
- ↑ 1 2 Kurochkin V. M. Oversættelsesredaktørens forord til bogen: Wirth N. Programmering i Modula-2-sproget. M.: Mir, 1987.
- ↑ 1 2 Niklaus Wirth. "Fra Modulus til Oberon" . InfoArt (1998). Hentet 25. oktober 2010. Arkiveret fra originalen 19. september 2011. (Russisk)
- ↑ En kort introduktion til Institut for Systemmatik. understøttelse af CC RAS . Hentet 30. november 2019. Arkiveret fra originalen 11. september 2019. (ubestemt)
- ↑ Koltashev A. A. Modula-2 i det russiske rum Arkivkopi af 11. april 2011 på Wayback Machine
- ↑ GNU Modula-2 side . Hentet 9. oktober 2009. Arkiveret fra originalen 5. oktober 2009. (ubestemt)
- ↑ Engelsk bog: Bräunl: Parallel Programming , Prentice-Hall, 1993
Engelsk bog: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
Tysk bog: Bräunl: Parallel Programmierung , Vieweg-Verlag, 1993
Tysk bog: Bräunl: Parallel Bildverarbeitung , -Wesley, 1995
Tysk bog: Bräunl: Massiv parallele Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
Russisk bog: Bräunl: Parallel Programming , Vyschshaya Shkola Publishers, Kiev, 1997
Litteratur
- Wirth N. Programmering i Modula-2 sproget. Oversættelse fra engelsk. V. A. Serebryakova , V. M. Khodukina; Ed. V. M. Kurochkina . — M.: Mir, 1987. — 222 s.
- Wirt N. Algoritmer og datastrukturer (Modula-2 version af bogen), Moscow, Mir, 1989, ISBN 5-03-001045-9 (russisk), 0-13-022005-1 (eng)
- Ruslan Bogatyrev. Chronicle of the Pascal Languages . PC World, #04/2001 (17. april 2001). Hentet: 25. oktober 2010. (Russisk)
- Christian K. Modula-2 Programmeringsvejledning. - M., Mir , 1989. - ISBN 5-03-001117-X - 463 s.
Links